概述
环境:docker 数据库版本:mysql 5.7.34 目的:每天定时把一个库的数据备份到本机里。 容器名称:mysql 备份目录:/data/backup 由于mysqldump的时候会要求输入密码,无法做到自动备份。本案例通过++docker的exec执行容器命令的方式创建login-path和实现自动备份。++
1.创建login-path
创建方法如下:
docker exec -it mysql mysql_config_editor set --login-path=root_login --host=10.1.0.1 --user=root --password
这里会要求输入一次密码。 创建完后,在容器里的/root 目录里创建一个.mylogin.cnf 文件。查看文件如下:
docker exec -it mysql ls -la /root/.mylogin.cnf
-rw------- 1 root root 136 Apr 22 21:28 /root/.mylogin.cnf
2. 备份数据
创建完login-path后,执行mysqldump的时候通过指定login-path就可以直接备份了。命令如下:
docker exec -it mysql mysqldump --login-path=root_login blog_db > /data/backup/blog_db_$(date +%Y%m%d).sql
3. 定时执行
执行完mysqldump后,就可以在本机的/data/backup 目录上看到这个备份的文件了。 把命令写到 /etc/crontab 定时每天凌晨3点执行:
echo '00 03 * * * root /usr/bin/docker exec mysql mysqldump --login-path=root_login blog_db > /data/backup/blog_db_$(date +\%Y\%m\%d).sql' >> /etc/crontab
注意:
- 由于这个
login-path 是放在容器里,当容器重启的时候就会消失。 - crontab里的
% 需要加\ 进行转移,不然定时任务执行不成功。
|