如何使用一个命令备份多个数据库以分隔文件

时间:2011-03-02 16:28:12

标签: sql bash backup web-hosting database-backups

大家好,我们有2台网络服务器可能会在星期五下线。我们在这些服务器上托管了大约90个网站,我已经找到了将每个网站文件夹备份到自己的.tar.gz文件的方法 - 我现在需要的是找到一种方法从我们的数据库服务器中导出每个数据库作为自己的使用一个命令进行SQL备份。

目前我知道如何使用PHP myAdmin的唯一方法,但对100多个数据库来说,这有点单调乏味。

是否有一种简单的方法可以通过SSH将每个数据库导出为自己的SQL备份文件?

3 个答案:

答案 0 :(得分: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

您只需测试它并根据需要调整路径/名称。

答案 1 :(得分: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.";

答案 2 :(得分: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.";