1、 锁定主数据库
只允许读取不允许写入,这样做的目的是防止备份过程中或备份完成之后有新数据插入,导致备份数据和主数据数据不一致,同样,这样做也有弊端,可能在锁库期间会影响正常的业务流程,所以我们应使锁库的粒度尽可能小。
FLUSH TABLES WITH READ LOCK;
2、查询主库状态
SHOW MASTER STATUS;
3、开始备份主数据库
执行docker mysql备份命令
docker exec [CONTAINER] /usr/bin/mysqldump -u username --password=xxx [DATABASE] > bak.sql
[CONTAINER] 是你自己容器的名字, [DATABASE]是你自己数据库的名字,bak.sql是临时产生的备份文件,里面是sql语句, username是用户名,一般是root,xxx则是密码。该命令的意思是执行docker容器内mysql相关命令:mysqldump,将指定的数据库导出到主机当中
若要备份全部数据库,[DATABASE]处使用–all-databases
在主机上执行下列语句
docker exec dk-mysql-master /usr/bin/mysqldump -u root --password=123456 --all-databases > bak.sql
上面命令把mysql基础表也导出了,我不需要复制基础表,所以指定库
docker exec dk-mysql-master /usr/bin/mysqldump -u root --password=123456 db_user > db_user_bak.sql
4、执行docker mysql插入数据脚本命令
找不到相关数据库
在手动创建完数据库后执行下列语句
命令格式:
cat bak.sql | docker exec -i [CONTAINER] /usr/bin/mysql -u username --password=xxx [DATABASE]
我的
cat db_user_bak.sql | docker exec -i dk-mysql-slave1 /usr/bin/mysql -u root --password=123456 db_user
呦呵,你不会自动创建库啊,垃圾,手动创建吧
CREATE DATABASE db_user;
这次成功了
这下库、表、数据都有了,
5、解锁
UNLOCK TABLES;
6、查看从服务的主从同步状态
SHOW SLAVE STATUS
7、主master服务添加一个数据试试?
怎么没提示插入成功?,查看数据试试
果然没进去,这块是我忘记关闭锁了,就是第五步的解锁!!!