用于自动数据库备份到最新前缀文件的 cronjob

用于自动数据库备份到最新前缀文件的 cronjob

我正在使用最新的 Linux Mint。我想知道是否可以为数据库备份创建一个特殊的 cronjob。

在我的/etc/cronjob文件中,我有以下代码:

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh

在我的/home/users/backup.sh我有:

mysqldump -uroot -p MyDatabase > /home/users/backup_MyDB/full_myDB.sql

相反,full_myDB.sql我想要2014-04-04_full_myDB.sql根据我们拥有的日期动态添加日期之类的东西。

如果 SQL 备份文件是超过一周我希望 cronjob 能够删除自动地。

答案1

使用 GNU date(Linux Mint 上的默认设置),您可以执行以下操作:

mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql

要删除超过 1 周的文件:

find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +

虽然通常明智的做法是在删除之前查看要删除的内容(至少在测试脚本时),为此只需执行以下操作:

find /home/users/backup_MyDB -type f -mtime +7

答案2

我使用了上述信息,并希望提供另一项较小的更新,该更新实际上截断了导致备份速度减慢的非常大的表之一。

希望这对其他人有帮助。

使用上述信息,我创建了一个名为 mysqlbackup.sh 的基本 shell 脚本,其中包含以下内容:

#!/bin/sh
find /data/var/backups/mysql/dumps -type f -mtime +3 -exec rm {} +
mysql -e "truncate table sitename_prod.cache_table"
mysqldump sitename_prod > /data/var/backups/mysql/dumps/$(date +%F)_full_sitename_prod.sql

确保运行:chmod +x mysqlbackup.sh

我还将其放入我的 crontab -e 中:

# MYSQL Dump and retention for 3 days
30 22 * * * bash /root/bin/mysqldump.sh > /dev/null 2>&1

答案3

我知道它很旧,但我已经使用了上面的答案,并添加了文件压缩指令。希望其他人发现这很有用。

1) 经过一番研究,7-zip 似乎是最好的压缩器。如果您的 Linux 发行版支持它,您可以使用 apt 安装程序:

sudo apt-get install p7zip-full

或者,如果您觉得更舒服,也可以使用 tar.gz。

2) 然后,创建一个脚本,例如/home/users/backup.sh 内容如下:

#!/bin/sh
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
7z a /home/users/backup_MyDB/$(date +%F)_full_myDB.7z /home/users/backup_MyDB/*.sql
rm -f /home/users/backup_MyDB/*.sql

该脚本将找到超过 7 天的文件并删除它们,然后进行 sql 转储,然后对目录中的所有 .sql 文件进行 7-zip,然后删除目录中的所有 .sql (顺便说一句,如果需要,您可以选择在转储之前添加 mysql 命令,如前面的答案所述)

3)我们做了一个chmod +x /home/users/backup.sh这样它就可以执行了。

3.1) 您应该测试您的脚本是否按预期工作

4)我们对任务进行编程crontab -e

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh >> /dev/null 2>&1

就是这样。它将在一周中的每天凌晨 4:30(星期日除外)备份您的 MySQL 数据库,并压缩备份

答案4

要添加到 @Graeme 的答案,可能值得注意的是,您有时可能需要在 cron 作业中转义 '%' 字符,因此它看起来像这样:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql

相关内容