2011-04-12 124 views
2

我想讓客戶端能夠手動下載他的數據庫的備份。我正在使用PHP和MySQL編碼網站。因此,在admin用戶登錄後,菜單中會出現一個鏈接,用於將.sql文件下載到本地計算機。我怎樣才能用PHP完成這項工作?MySQL數據庫的PHP下載備份

+0

http://stackoverflow.com/questions/3595976/backup-mysql-database-with-php類似 – mikel 2011-04-12 21:08:26

+0

[備份mysql數據庫並將其作爲文件下載]的完全重複(http://stackoverflow.com/問題/ 3751069/backup-a-mysql-database-and-download-as-a-file),以及右邊相關列表中的一半問題。 – Charles 2011-04-12 21:08:32

回答

3

這會導致混亂嘗試備份從PHP數據庫,你將讓MySQL的處理這個問題的更好,並告訴mysql做到這一點,最好的方法是使用shell腳本:

#!/bin/bash 
# Shell script to backup MySql database 
# To backup Nysql databases file to /backup dir and later pick up by your 
# script. You can skip few databases from backup too. 
# For more info please see (Installation info): 
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html 
# Last updated: Aug - 2005 
# -------------------------------------------------------------------- 
# This is a free shell script under GNU GPL version 2.0 or above 
# Copyright (C) 2004, 2005 nixCraft project 
# Feedback/comment/suggestions : http://cyberciti.biz/fb/ 
# ------------------------------------------------------------------------- 
# This script is part of nixCraft shell script collection (NSSC) 
# Visit http://bash.cyberciti.biz/ for more information. 
# ------------------------------------------------------------------------- 

MyUSER="SET-MYSQL-USER-NAME"  # USERNAME 
MyPASS="SET-PASSWORD"  # PASSWORD 
MyHOST="localhost"   # Hostname 

# Linux bin paths, change this if it can not be autodetected via which command 
MYSQL="$(which mysql)" 
MYSQLDUMP="$(which mysqldump)" 
CHOWN="$(which chown)" 
CHMOD="$(which chmod)" 
GZIP="$(which gzip)" 

# Backup Dest directory, change this if you have someother location 
DEST="/backup" 

# Main directory where backup will be stored 
MBD="$DEST/mysql" 

# Get hostname 
HOST="$(hostname)" 

# Get data in dd-mm-yyyy format 
NOW="$(date +"%d-%m-%Y")" 

# File to store current backup file 
FILE="" 
# Store list of databases 
DBS="" 

# DO NOT BACKUP these databases 
IGGY="test" 

[ ! -d $MBD ] && mkdir -p $MBD || : 

# Only root can access it! 
$CHOWN 0.0 -R $DEST 
$CHMOD 0600 $DEST 

# Get all database list first 
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')" 

for db in $DBS 
do 
    skipdb=-1 
    if [ "$IGGY" != "" ]; 
    then 
    for i in $IGGY 
    do 
     [ "$db" == "$i" ] && skipdb=1 || : 
    done 
    fi 

    if [ "$skipdb" == "-1" ] ; then 
    FILE="$MBD/$db.$HOST.$NOW.gz" 
    # do all inone job in pipe, 
    # connect to mysql using mysqldump for select mysql database 
    # and pipe it out to gz file in backup dir :) 
     $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE 
    fi 
done 

然後你告訴PHP告訴操作系統執行該腳本,並等待它完成,這通常是用做execsystem如:

exec('/path/to/backup/script.sh'); 

然後,你可以簡單地發送由創建的文件腳本到達瀏覽器t用戶。

+0

+1讓MySQL做到這一點是路要走。從上面的腳本中刪除重要的是使用'mysqldump'。請參閱http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html以獲取更多參考。 – mfonda 2011-04-12 21:13:49

+0

shell腳本似乎是最好的解決方案,因爲你可以更好地控制錯誤等,如果你只是用'mysqldump'和'exec',那麼你很可能會遇到一些錯誤。 – RobertPitt 2011-04-12 21:16:07

+0

感謝這使我在正確的軌道上,但我做了我自己的shell腳本來執行mysqldump命令 – 2011-04-12 22:21:25