2011-03-02 51 views
1

嘿,我們有兩臺Web服務器,它們可能在星期五離線。我們在這些服務器上託管了大約90個網站,並且我已經找到了將每個網站文件夾備份到它自己的.tar.gz文件的方法 - 我現在需要的是找到一種方法將我們的數據庫服務器中的每個數據庫作爲自己的SQL備份與一個命令。如何使用一個命令備份多個數據庫以分離文件

目前我知道如何使用PHP myAdmin的唯一方法,但對於100多個有點乏味的數據庫。

是否有一種簡單的方法可以通過SSH將每個數據庫導出爲自己的SQL備份文件?

+0

100個數據庫沒有現成的備份策略,你可以利用這個練習? {shudder} – 2011-03-02 16:36:00

+0

我走進了一個我們的服務器管理員無法備份單個文件的工作 - 忘記了他甚至無法通過SSH關閉服務器,即使使用一步一步的備忘單。我是一名訓練有素的平面設計師,但如果我們的服務器可能正在關閉,我正在盡一切可能來保存數據,因爲我們目前沒有備份,除了我以前通過網站逐個完成的備份 – innovati 2011-03-02 16:38:50

回答

1

你可能mysqldump --all-databases但你只會得到一個大的SQL轉儲。

發現這個bash腳本:

for T in `mysql -N -B -e 'show databases' -pYOUR_ROOT_PASSWORD`; 
    do echo $T; 
    mysqldump -pYOUR_ROOT_PASSWORD $T | gzip -c > $T.sql.gz; 
done 

你只需要測試和路徑/名稱適應您的需求。

+0

是的,我想將這些文件逐個排序到每個網站的數據庫備份文件和.tar.gz文件夾中,以便在需要時將它們分發給客戶端。擁有一個大文件對我們來說還不錯,可以恢復到服務器上,但我不想給每個客戶端以外的其他客戶端的數據和密碼以及他們自己的數據... – innovati 2011-03-02 16:34:20

+0

看到我的編輯,測試它馬上。 – Capsule 2011-03-02 16:41:01

+0

完美地工作;-) – Capsule 2011-03-02 16:51:28

0
if [ -z "$1" ] 
    then 
    echo "Provide MySQL root password as argument."; 
    exit; 
fi 
cnt=0 
for T in `mysql -N -B -e 'show databases' -u root -p$1`; 
    do 
    D=`date "+%Y_%m_%d_%H_%M_%S"`; 
    cnt=$((cnt + 1)) 
    File=$T"_"$D; 
    echo "Backing up $T to $File.sql.gz"; 
    mysqldump -u root -p$1 $T | gzip -c > $File.sql.gz; 
    echo "Done."; 
done 

echo "$cnt databases backed up."; 
0

這一個適用於共享託管服務器,它存儲在各個用戶的主文件夾每個備份,使他們能夠恢復/使用/相應刪除它們。

backup_folder="automated_backup/"; 


if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

if [ -z "$1" ] 
    then 
    echo "Provide MySQL root password as argument."; 
    exit; 
fi 
cnt=0 
for T in `mysql -N -B -e 'show databases' -u root -p$1`; 
    do 
    D=`date "+%Y_%m_%d_%H_%M_%S"`; 
    cnt=$((cnt + 1)) 
    User=`echo $T | cut -d'_' -f 1` 
    Folder="/home/$User/"; 
    Folder2=$Folder$backup_folder; 
    if [ -d "$Folder" ]; then 
     if [ ! -d "$Folder2" ]; then 

     echo "$Folder2 not exists, creating it …"; 
     mkdir -p $Folder2 

     fi 
     File=$Folder2$T"_"$D; 
     echo "Backing up $T to $File.sql.gz"; 
     mysqldump -u root -p$1 $T | gzip -c > $File.sql.gz; 
     chown $User.$User -R $Folder2; 
     echo "Done."; 
    fi 
done 

echo "$cnt databases backed up."; 
相關問題