利用计划任务和批处理从docker容器中备份数据库文件到宿主机指定目录
创建计划任务(定时任务):
crontab -e
打开后是VI编辑器,将自己计划任务的内容写到里边然后wq(保存并退出)就行了
查看计划任务:
crontab -l
查看以及存在的计划任务
bash: crontab: command not found
service crond start
没有找到服务
yum -y install crontabs
安装成功备份文件路径:/home/database_bak/
计划任务内容(每天晚上10点执行):
容器内也可不用加定时任务,直接从宿主机调用容器内的脚本
0 10 * * * /home/database_bak/bak_database.sh
脚本bak_database.sh内容:
# 备份数据库文件
mysqldump -u*** -p*** boo_db -t > /home/database_bak/$(date +%Y%m%d)_boo_db.sql
# 清理5天前的备份文件,防止过度占用内存
rm -rf /home/database_bak/$(date -d "5 day ago" +%Y%m%d)_boo_db.sql
0 11 * * * /thinker/storage/data_base_bak/bak_database.sh
docker exec -it [容器ID或名称] /bin/bash -c "sh /home/database_bak/bak_database.sh"
# 从容器中复制出备份过的数据库文件
docker cp 57e5270897f0:/home/database_bak/$(date +%Y%m%d)_boo_db.sql /thinker/storage/data_base_bak/
# 清除历史备份文件 清除5天前的备份文件
rm -rf /thinker/storage/data_base_bak/$(date -d "5 day ago" +%Y%m%d)_boo_db.sql
if [ -f /www/backup/database/$(date -d "2 day ago" +%Y%m%d)_covid.sql ] && [ $(stat -c %s /www/backup/database/$(date -d "2 day ago" +%Y%m%d)_covid.sql) -gt 1048576 ]; then
echo "File exists and is larger than 1MB"
rm -rf /www/backup/database/$(date -d "3 day ago" +%Y%m%d)_covid.sql
else
echo "File does not exist or is smaller than 1MB"
fi