引言
数据库备份重中之重,那使用docker应该怎么样备份数据呢?
用法
查看Docker中运行的容器
docker ps
假如容器名是mysql_server
导出数据
docker exec -it mysql_server mysqldump -uroot -proot test_db > /opt/sql_bak/test_db.sql
此时导入可能出现以下问题:
mysql: [Warning] Using a password on the command line interface can be insecure
mysql从5.6版本后命令行方式直接写密码会提示不安全的。 可以在my.cnf内指定,于是打开我的my.cnf,在[mysqldump]下增加: vim /etc/mysql/my.cnf
[mysqldump]
user=your_backup_user_name
password=your_backup_password
修改完配置文件后, 只需要执行mysqldump 脚本就可以了;备份脚本中不需要涉及用户名密码相关信息;
docker exec -it mysql_server mysqldump test_db > /opt/sql_bak/test_db.sql
压缩
备份的原始文件可能会很大,为了节省空间,我们在备份成功再进入压缩。压缩成功后直接删除原始文件。
cd /opt/sql_bak
tar -czvf test_db.tar.gz ./test_db.sql
rm -f ./test_db.sql
定时备份
把上面的命令全部集合到一个/yourpath/backup.sh文件里:
# 数据库名 db="test_db" # 保存路径 path="/opt/sql_bak/$db" # 文件名 name=$(date +%Y%m%d%H) # 判断目录是不是已经存在,如果不存在则创建 if [ ! -d $path ]; then mkdir -p $path fi # 进入目录 cd $path # docker 执行备份 docker exec -it mysql mysqldump $db > ./$name.sql #压缩文件 tar -czvf $name.tar.gz ./$name.sql #删除sql文件的 rm -f ./$name.sql
使用crontab定时任务: 在夜里自动执行,此时系统负载不大。 在 12:01 a.m 运行,即每天凌晨过一分钟。 定时备份可以按时自己的需求进行调整。
crontab –e 1 0 * * * /yourpath/backup.sh
结语
这样就大功告成,定时自动备份数据库,以保证数据库万一出现问题,可以有备份还原。