我正在使用最新的 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