Docker使用mysqldump命令备份导出mysql容器中的数据
1、查看Docker中运行的容器
[root@instance-0pk09gjj ~]# docker ps
2、使用mysqldump命令备份导出数据库中的所有表结构和数据
[root@instance-0pk09gjj home]# mkdir bak
[root@instance-0pk09gjj /]# docker exec -it mysql01 mysqldump -uroot -proot demo > /home/bak/demo.sql
3、使用mysqldump只导出数据不导出表结构
[root@instance-0pk09gjj /]# docker exec -it mysql01 mysqldump --opt -t -uroot -proot demo > /home/bak/demo2.sql
4、使用mysqldump只导出表结构不导出数据
[root@instance-0pk09gjj /]# docker exec -it mysql01 mysqldump --opt -d -uroot -proot demo > /home/bak/demo1.sql
5、使用mysqldump导出特定表的结构
[root@instance-0pk09gjj /]# docker exec -it mysql01 mysqldump -uroot -proot -B demo --table playmath_user > /home/bak/playmath_user.sql
Docker执行导入(恢复)数据库命令:
[root@instance-0pk09gjj ~]# docker exec -i mysql01 mysql -uroot -proot playmath_sso < /home/bak/playmath_sso.sql
我们使用脚本进行控制备份
#!/bin/bash ############### common file ################ #本机备份文件存放目录 MYSQLBACK_DIR="/data/backup/bak_mysql" #格式化日期,备份文件时用日期来做文件名的 DATE=`date +%Y%m%d-%H%M%S` #保存日期 DAYS=1 ######## mysql info ############################ # Database info #DB_HOST="198.155.102.78" # framework #docker exec -i saas_mysql_1 mysqldump -d -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${MYSQLBACK_DIR}/db_framework${DATE}.sql # data #docker exec -i saas_mysql_1 mysqldump -t -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${MYSQLBACK_DIR}/db_data${DATE}.sql #all docker exec -i nanchang-mysql mysqldump -uroot -pmk\@86 agr > ${MYSQLBACK_DIR}/db_all${DATE}.sql # auto delete pass file find ${MYSQLBACK_DIR} -name "db_*" -type f -mtime +${DAYS} -exec rm {} \; # linux定时执行任务 # 命令行中输入crontab -e 添加如下信息表示每天2点执行定时任务: #0 2 * * * /root/mysql.sh这里需要说明的是在转载的文章中是没有提及到脚本实现定时任务自动备份的,因此在脚本中我们要注意如下说明(参考自https://blog.51cto.com/11571922/2146096的博文):
docker exec 在运行的容器中执行命令参数: -d :分离模式: 在后台运行 -i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端
docker exec -i (一定不要带-t)这样备份会是空表,切记。看清上边的命令介绍,docker exec -it 相当于交互打开一个伪终端执行备份操作crontab是无法执行的。