我想每小时运行一次cron作业来备份我的mysql数据库。
当它运行24小时后,我希望它再次启动,然后覆盖每个文件。
我想出的最好的是:
15 0 * * * /usr/bin/mysqldump -u DBUSERNAME -pDBPASSWORD DBNAME > /PATH/backup1.sql
15 4 * * * /usr/bin/mysqldump -u DBUSERNAME -pDBPASSWORD DBNAME > /PATH/backup2.sql
15 8 * * * /usr/bin/mysqldump -u DBUSERNAME -pDBPASSWORD DBNAME > /PATH/backup3.sql
15 12 * * * /usr/bin/mysqldump -u DBUSERNAME -pDBPASSWORD DBNAME > /PATH/backup4.sql
15 16 * * * /usr/bin/mysqldump -u DBUSERNAME -pDBPASSWORD DBNAME > /PATH/backup5.sql
15 20 * * * /usr/bin/mysqldump -u DBUSERNAME -pDBPASSWORD DBNAME > /PATH/backup6.sql
是否有更有效的方法来执行此操作并执行cron作业自动覆盖文件或是否需要添加交换机?
新服务器的东西,但必须学习!
答案 0 :(得分:1)
我会选择类似的东西:
15 */4 * * * /bin/bash /path/to/your/script.sh
这会在第15分钟每4小时执行/bin/bash /path/to/your/script.sh
。
然后让script.sh
成为:
num=$(( ($(date "+%H") + 4 ) / 4))
/usr/bin/mysqldump -u DBUSERNAME -pDBPASSWORD DBNAME > /PATH/backup${num}.sql
获得
hour num
0 1
4 2
....
20 6
我用:
$(date "+%H")
返回小时。$(date "+%H") + 4
返回小时+4。$(( ($(date "+%H") + 4 ) / 4))
返回小时+4除以4. 答案 1 :(得分:0)
您可以在实际备份之前简单地轮换备份。
#!/bin/sh
for I in `jot 5 5 1`; do
NN=`expr $I + 1`
mv backup$I.sql backup$NN.sql
done
mysqldump -u DBUSERNAME -pDBPASSWORD DBNAME > backup1.sql