我每天都在转储一个mysql wordpress数据库作为备份。由于我不想在一年后得到365.sql文件,我认为只保留最后30天的转储文件是不错的。总是保留最后30个,并自动删除旧的,每天一个。
作为cron工作的一部分,我希望在bash中对此进行编程。所以我已经有了将文件转储并发送到备份服务器的部分。我只需要每天添加计数和删除最旧的片段。
以下是我得到的(用户名和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/
有人知道如何实现这个功能吗?
打印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天的文件。
上面提到的find命令是最简单/最干净的解决方案。如果你想你也可以做
old=$(date -d "30 days ago" +'%m-%d-%y')
rm ${home}/dbBackups/$"{old}"_db_backup.sql.gz
你会想确保没有办法搞砸你的道路。事实上,${home}非常接近env-var$home,所以你可以考虑更改它。你也可以每天运行这样一个简单的脚本,从你扫描文件的地方删除文件。
你们都已经给予了额外的帮助。非常感谢。
因此,我将尝试的版本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/