我创建了一个脚本来备份生产数据库。我最初的方法是备份 mysql 目录本身 (/var/lib/mysql),但其他用户不鼓励这样做。
该脚本非常简单,只要具备shell脚本知识就非常基础。
#!/bin/bash
# backup file
backupFile="backup_$(date +%d%m%Y_%H%M).sql"
# create the backup file using mysqldump
/usr/bin/mysqldump -uuser -ppass db > /home/user/db_backups/$backupFile
# copy the backup file to the remote server
rsync -e ssh -varuzP /home/user/db_backups/ user@remoteserver:/home/user/backup/mysql
首先,我想知道您对该脚本的看法。其次,我还想知道 rsync 是否会在生产服务器和远程备份服务器之间的传输过程中以某种方式检查可能的文件损坏。
提前感谢您的帮助,谨致问候!
答案1
至少你的脚本简单而直接。
检查 rsync 是否正常的一种方法是比较 md5sum。
LOCALCOPY=`md5sum /home/user/db_backups/$backupFile`
REMOTECOPY=`ssh user@remoteserver md5sum /home/user/backup/mysql/$backupfile`
if [ $LOCALCOPY == $REMOTECOPY ]; then echo "Checksum OK"; else echo "Checksum ERROR. Eep."; fi
或者类似的东西,实际上并没有测试过。
答案2
出于性能和完整性原因,应避免使用大型数据库的 mysqldump。您可以设置副本并在从属服务器上进行备份。
在互联网上搜索,你会发现很多关于 mysql 备份的文章。
答案3
我觉得这个脚本不错,但你可能要考虑设置一个循环系统,覆盖旧备份(从而充分利用 rsync)。至于损坏检查,我相信如果你使用该--checksum
选项,rsync 会自动为你执行此操作。
除非您打算查看输出或将其传输到文件,否则我不建议使用该--verbose
选项。此外,不需要-a
和-r
一起使用:
-a, --archive
这相当于 -rlptgoD。
另请参阅 StackOverflow 问题:确保 mysqldump <-> rsync 的数据完整性