MySQL - 备份而不覆盖旧备份

MySQL - 备份而不覆盖旧备份

如何在不覆盖旧备份的情况下进行此备份?这是我制作的 crontab:

* 2 * * *  /opt/bitnami/mysql/bin/mysqldump -u root -password--databases BDname>~/Backup/DBname

答案1

您可以简单地写入带日期标记的转储文件:

* 2 * * *  /opt/bitnami/mysql/bin/mysqldump -u root -password--databases BDname >"$HOME/Backup/DBname_$(date +\%F).sql"

date +%F将在表格上生成一个日期YYYY-MM-DD。必须%在 crontab 条目中用反斜杠转义,因为%那里有特殊含义。

生成的转储文件名今天将会DBname_2017-10-06.sql

如果将转储命令放入其自己的脚本中并进行安排,您将获得更易于管理的操作。这个 crontab 条目是当某些事情发生时的边界情况轻微地对于 cron 作业来说太“不简单”。

我倾向于在交互式 shell 之外的所有地方使用$HOME而不是主目录,主要是因为它不充当变量,并且在脚本中更具描述性,或者像这里一样,在 crontab 中。参见示例~~$HOME为什么波形符 (~) 不在双引号内展开?


如果您还需要清理旧的数据库备份,请参阅以下问题的答案删除 X 天以上之前的文件

这可以作为单独的 cron 作业来完成,或者您可以将两个操作(备份 + 清理)合并在一个脚本中并安排该脚本(我会这样做)。

答案2

如果您编写一个脚本来管理与数据库备份相关的所有步骤,您可以将数据时间戳应用于您的备份名称,您可以删除旧备份以将空间使用量保持在最低限度,记录活动。您需要做的就是调用备份脚本。否则,您可能必须为您想要运行的每个不同命令将不同的行放入 crontap 中。更有效的方法是使用简单的脚本。

[thebtm@server Backup] cat db_backup.sh
#!/bin/bash                                                                                                                                                                                                                                                                                                                                                                                                                                                      
BASE="~/Backup";                                                                                                                                                                                                                         
YESTERDAY=`TZ=$ENV{'TZ'}+30 date '+%Y%m%d'`                                                                                                                                                                                                  
echo "****************"                                                                                                                                                                                                                      
date                                                                                                                                                                                                                                         
echo Backing up Database
#find $BASE/DB/ -mtime +30 -type f -delete
/usr/bin/mysqldump -u root --password=password --routines dbname | bzip2 --best -c > $BASE/DB/dbname.$YESTERDAY.bz2
echo Done
date

然后设置 crontab 来运行脚本

# MySQL database backups for <dbname>
15 1 * * * ~/Backup/db_backup.sh >> ~/Backup/logs/db_backup.log 2>&1

相关内容