概述
环境:docker
数据库版本:mysql 5.7.34
目的:每天定时把一个库的数据备份到本机里。
容器名称:mysql
备份目录:/data/backup
由于mysqldump的时候会要求输入密码,无法做到自动备份。本案例通过docker的exec执行容器命令的方式创建login-path和实现自动备份。
1.创建login-path
login-path是MySQL5.6开始支持的新特性。通过借助mysql_config_editor工具将登陆MySQL服务的认证信息加密保存在.mylogin.cnf文件(默认位于用户主目录) 。之后,MySQL客户端工具可通过读取该加密文件连接MySQL,避免重复输入登录信息。创建方法如下:
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
其中可配置项
-h,–host=name 添加host到登陆文件中
-G,–login-path=name 在登录文件中为login path添加名字(默认为client)
-p,–password 在登陆文件中添加密码(该密码会被mysql_config_editor自动加密)
-u,–user 添加用户名到登陆文件中
-S,–socket=name 添加sock文件路径到登陆文件中
-P,–port=name 添加登陆端口到登陆文件中
关于 mysql_config_editor 的其他用法:
显示指定用户的login-path的配置:
mysql_config_editor print --login-path=root_login
显示所有用户的login-path的配置:
mysql_config_editor print --all
删除指定用户的login-path的配置:
mysql_config_editor remove --login-path=root_login
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里的
%
需要加\
进行转移,不然定时任务执行不成功。