1

我每天都在转储一个 mysql wordpress 数据库作为备份。因为我不想在一年后得到 365 个 .sql 文件,所以我认为只保留最后 30 天的转储文件是不错的。始终保留最后 30 个并自动删除旧的,每天一个。

我希望在 bash 中对此进行编程,作为 cron 工作的一部分。所以我已经有了转储文件并将文件发送到备份服务器的部分。我只需要每天添加计数和删除最旧的片段。

这是我得到的(用户名和 pswd 保存在 .my.cnf 文件中):

now=$(date +'%m-%d-%y')
mysqldump -h mysql.server.com my_database | gzip -9 > ${home}/dbBackups/db_backup.sql.gz
mv ${home}/dbBackups/db_backup.sql.gz ${home}/dbBackups/${now}_db_backup.sql.gz
scp ${home}/dbBackups/${now}_db_backup.sql.gz backup_user@backup.server.com:/home/backup_user/backup.server.com/dbBackups/

有谁知道如何实现这个功能?

4

3 回答 3

7

打印超过 30 天的文件的标准命令是

find <full_path_to_your_dir> -type f -mtime +30 -print 

删除超过 30 天的文件的标准命令是

find <full_path_to_your_dir> -type f -mtime +30 -delete

上述命令将删除所有超过 30 天的文件。

于 2015-07-01T04:00:54.120 回答
1

上面提到的 find 命令是最简单/最干净的解决方案。如果你愿意,你也可以这样做

old=$(date -d "30 days ago"  +'%m-%d-%y') 
rm ${home}/dbBackups/$"{old}"_db_backup.sql.gz

您将要确保没有办法搞砸您的路径。实际上 ${home} 与环境变量 $HOME 非常接近,因此您可以考虑更改它。您还可以 cron 像这样每天运行一个简单的脚本,以从您正在使用它们的任何位置删除文件。

于 2015-07-01T05:11:01.253 回答
0

你们都已经提供了额外的帮助。谢谢你。

所以我将尝试的版本 1 脚本将如下所示:

homePath="/home/myuser"
now=$(date +'%m-%d-%y')
mysqldump -h mysql.server.com my_database | gzip -9 > ${homePath}/dbBackups/db_backup.sql.gz
mv ${homePath}/dbBackups/db_backup.sql.gz ${homePath}/dbBackups/${now}_db_backup.sql.gz
find ${homePath}/dbBackups/ -type f -mtime +30 -delete
rsync -e ssh backup_user@backup.server.com:/home/backup_user/backup.server.com/dbBackups/ ${homePath}/dbBackups/

很简单。你觉得这听起来对吗?

由于版本 1 不太好用,经过最少的调整,这里是工作脚本:

homePath="/home/myuser"
now=$(date +'%m-%d-%y')

mysqldump -h mysql.server.com my_database | gzip -9 > ${homePath}/dbBackups/db_backup.sql.gz
mv ${homePath}/dbBackups/db_backup.sql.gz ${homePath}/dbBackups/${now}_db_backup.sql.gz
find ${homePath}/dbBackups/ -type f -mtime +30 -delete
rsync -a --log-file=${homePath}/rsync.log  ${homePath}/dbBackups/ backup_user@backup.server.com:/home/backup_user/backup.server.com/dbBackups/
于 2015-07-01T12:10:59.380 回答