大家好,我们有 2 个 Web 服务器,周五可能会离线。我们在这些服务器上托管了大约 90 个网站,我已经找到了将每个网站文件夹备份到其自己的 .tar.gz 文件的方法 - 我现在需要找到一种方法,将每个数据库从我们的数据库服务器导出为自己的使用一个命令进行 SQL 备份。
目前我知道的唯一方法是使用 PHP myAdmin,但对于 100 多个数据库来说,这有点乏味。
有没有一种简单的方法可以通过 SSH 将每个数据库导出为自己的 SQL 备份文件?
大家好,我们有 2 个 Web 服务器,周五可能会离线。我们在这些服务器上托管了大约 90 个网站,我已经找到了将每个网站文件夹备份到其自己的 .tar.gz 文件的方法 - 我现在需要找到一种方法,将每个数据库从我们的数据库服务器导出为自己的使用一个命令进行 SQL 备份。
目前我知道的唯一方法是使用 PHP myAdmin,但对于 100 多个数据库来说,这有点乏味。
有没有一种简单的方法可以通过 SSH 将每个数据库导出为自己的 SQL 备份文件?
你可以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
您只需要对其进行测试并根据您的需要调整路径/名称。
这个适用于共享主机服务器,它将每个备份存储在各自的用户主文件夹中,以便他们可以相应地恢复/使用/删除它们。
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.";
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.";