debian mysql 自动每日备份

debian mysql 自动每日备份

我需要在 Debian 服务器下每天备份我的 Mysql 数据库。我知道有很多脚本,但我的需求是每天备份为 sql 文件,并将每个备份单独(可能将当前日期作为文件名?)放在同一个文件夹下,这样每次备份时都不会覆盖单个文件。

问候

答案1

我经常使用自动mysql备份它每天执行一次 mysqldump,将其保存一周,每周备份一次以保存一个月,每月备份一次以保存一年左右...一切都非常轻松!

答案2

就像是:

 for db in $(mysql -e "show databases" -B  --skip-column-names); do
     mysqldump --opt --databases "$db" \
     | gzip -3 --rsyncable > "/var/backup/$db-$(date +%Y-%m-%d).sql.gz"
 done

然后,您可以在 cron 作业中使用它来每天进行备份。

您可以让 mysqldump 将所有数据库转储到一个文件中,但如果出现问题,这将使恢复单个数据库变得非常困难。如果您通过 rsync 将文件复制到另一台服务器,您确实需要 --rsyncable 选项。它会浪费一些磁盘空间,但比 rsync 性能更好。这主要与 rsync 计算要传输的数据块的方式有关。

我们使用与上述脚本非常相似的脚本,只是文件名中不使用日期,因为这会导致您必须清理旧备份。我们使用 backuppc 来保留旧副本。除非您已经有远程备份解决方案,否则我强烈建议您查看 backuppc。

答案3

David 的看起来不错,但还有几个供您参考(第二个备份所有数据库,但我认为 David 的 mysql 选项比 sed 命令更好):

示例 1:

#!/bin/bash
#Create local backups of the mysql drupal database for easy restore
#KMB 2008

dumpdir='/root/drupaldumps'
backupdir='/root/drupal_backups'
myuser='drupal'
mypass='SECRET'
dumpfile="${dumpdir}/drupal-$(date +%s).sql"

mysqldump -udrupal -p${mypass} drupal > $dumpfile
mv $dumpfile ${backupdir}/
find $backupdir -name '*.sql*' -type f -mtime +7 -exec rm {} +

示例 2:

#!/bin/bash
#KMB March 2009 
umask u=rw,g=,o=
dumpdir='/root/db_backups'
backupdir='/root/db_backups/dumps'
myuser='backup_user'
mypass='SUPER_SECRET'

while read database; do
        dumpfile="${dumpdir}/${database}-$(date +%s).sql.bz2"
        mysqldump -u $myuser -p${mypass} $database | bzip2 > $dumpfile
        mv $dumpfile ${backupdir}/
done < <(mysql -u $myuser -p${mypass} -e 'show databases' -s | sed '1d;$d')

find $backupdir -name '*.sql.bz2*' -type f -mtime +7 -exec rm {} \;

答案4

您也可以尝试一下 Zmanda Recovery Manager (zrm-m​​ysql)。

虽然乍一看可能过于复杂,但我已经使用 ZRM 社区版为多个远程 MySQL 服务器创建了完全加密且管理良好的集中备份解决方案。

在 HowtoForge 上可以找到更多有关主题的信息,例如:

http://www.howtoforge.com/mysql-backups-with-zrm-2.0

干杯

相关内容