cronjob用于自动将数据库备份到日期为前缀的文件


12

我正在使用最新的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.sql2014-04-04_full_myDB.sql想像是根据我们拥有的日期动态添加日期的地方,不如说是。

如果SQL备份文件的时间超过一周,我希望cronjob 自动删除它。

Answers:


15

使用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

我正在准备答案,但您击败了我:P
Ramesh 2014年

2
@Ramesh,很高兴我击败了别人以进行更改-通常我发布并且有人已经有类似答案。
Graeme 2014年

非常好。我要更改的唯一用途是将数据库访问详细信息放在.my.cnf文件中。
约翰·戴克

4

我使用了以上信息,并希望提供另一个较小的更新,该更新实际上会截断使我们的备份变慢的非常大的表之一。

希望这可以帮助其他人。

使用以上信息,我创建了一个名为mysqlbackup.sh的基本外壳脚本,其内容如下:

#!/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数据库,并压缩备份


1

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

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.