思路:将这个目标分为两步执行 Step1.编写一个shell脚本让它在docker 里面执行数据库备份操作 mysqldump Step2.写一个定时任务的脚本定时执行这个shell脚本
Step1:
1.在宿主机编写好shell脚本 注:注意密码中若有符号 是否需要带上转义符
dockersqlbak.sh
#!/bin/bash
#mysql用户名
db_user=root
#mysql密码
db_passwd=Password123@mysql
/usr/bin/mysqldump -u${db_user} -p${db_passwd} --all-databases > /root/metersphere.sql
2.将宿主机上的shell 脚本 使用docker cp 命令拷贝到docker 容器内部
docker cp /home/mysql_data/dockersqlbak.sh 440e1fc891ee:/root #将宿主机上的/home/mysql_data路径下的sh文件 cp到容器的/root 目录下 9bf13f44af62为容器ID
3.进入容器内部 并给脚本授权
docker exec -it 440e1fc891ee /bin/bash #进入容器中 440e1fc891ee为容器id 可以用docker ps 查看对应的ID
cd /root #进入sh文件所在的目录
chmod +x dockersqlbak.sh #给sh文件添加执行权限
4.测试这个脚本是否能成功执行可以看到生成了这个metershpere sql文件 脚本执行成功
Step2.
1.写一个shell 脚本用于定时任务定时启动这个容器内的脚本 (docker exec -d 后台启动, -c 是执行shell 命令)
dockercron.sh
#!/bin/bash
docker exec -d 440e1fc891ee /bin/bash -c 'find /root/ -type f -name "*.sql" -mtime +5 |xargs rm -f && /root/dockersqlbak.sh'
2.验证脚本:成功
3.编写crontab 定时任务
crontab -e #进入编辑定时任务
#execute mysqldump in docker container once a week
00 00 07 * * /home/mysql_data/dockercron.sh #这里是每7天执行一次定时任务