centos使用shell脚本定时备份docker中的mysql数据库

时间:2022-09-24 00:29:04

shell脚本

#!/bin/bash

#容器ID
container_id="6b1faea2b4d7"
#登录用户名
mysql_user="root"
#登录密码(注意 如果密码包含特殊符号 前面要用'\')
mysql_password="Yvi\$123"
mysql_port="3306"
#备份的数据库名
mysql_database="clne"
# 备份文件存放地址(根据实际情况填写)
backup_dir="/home/data/crontab/data"
# 是否删除过期数据
expire_backup_delete="true"
#过期天数
expire_days=3
backup_time=`date +%Y%m%d%H%M` # 备份指定数据库中数据
docker exec $container_id mysqldump -P$mysql_port -u$mysql_user -p$mysql_password $mysql_database > $backup_dir/bak-$mysql_database-$backup_time.sql # 删除过期数据
if [ "$expire_backup_delete" == "true" -a "$backup_dir"!="" ];then
`find $backup_dir/ -type f -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi

赋予权限

chmod 777 脚本.sh

可以这里先执行下脚本看下效果

如果shell脚本报错:.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录

参考:https://www.cnblogs.com/pxblog/p/15094666.html

保存后

修改  配置定时任务

vim /etc/crontab

添加

0    0    *    *    * root  . /etc/profile;/bin/sh  /home/脚本.sh

后面的脚本要使用绝对路径

前面那个是cron 可以根据自己的来修改(上面这个示例表示每天0点执行一次)

常用的

0 */2 * * *   意思是每两个小时

50 7 * * *   意思是每天7:50

50 22 * * *   意思是每天22:50

0 0 1,15 * *   每月1号和15号

1 * * * *   每小时的第一分执行 

30 6 */10 * *   意思是每月的1、11、21、31日是的6:30执行一次

然后重启crontab服务

service crond restart

然后就可以看是否执行

 cat /var/log/cron

查看日志