我每天都在倾倒一个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/
有没有人知道如何实现此功能?
答案 0 :(得分:4)
打印超过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天的所有文件。
答案 1 :(得分:1)
上面提到的find命令是最简单/最干净的解决方案。如果你想要你也可以做
old=$(date -d "30 days ago" +'%m-%d-%y')
rm ${home}/dbBackups/$"{old}"_db_backup.sql.gz
你需要确保没有办法搞砸你的路径。实际上$ {home}非常接近env var $ HOME,因此您可以考虑更改它。你也可以像这样编写一个简单的脚本来每天运行以从你scp他们的任何地方删除文件。
答案 2 :(得分: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/