docker mysql 主从复制(一主一从)
拉取MySQL的镜像
docker pull mysql
启动MySql
docker run -p 3380:3306 --name MYSQL8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
- 新装了MYSQL8.0后再用navicat连接就会报2059的错误。发现是8.0之后MYSQL更改了密码的加密规则,只要在命令窗口把加密方法改回去即可。
docker exec -it MYSQL8 bash
- 然后登录MySQL
mysql -uroot -p123456
- 最后运行以下SQL即可
alter user 'root'@'%' identified by '123456' password expire never ;
alter user 'root'@'%' identified with mysql_native_password by '123456' ;
flush privileges ;
启动MySql-slave
docker run -p 3381:3306 --name MYSQL8-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql
重复上面的步骤启动 slave
配置Master
docker exec -it MYSQL8 bash
进入容器后,切换到 /etc/mysql目录下,使用vim命令编辑 my.cnf 文件。
cd /etc/mysql
apt-get update
apt-get install vim
在my.cnf添加如下配置
## 同一局域网注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
添加完后保存,同时退出当前Docker容器。因为修改了配置文件,所以要重启下该MYSQL,这里重启下该Docker容器就好了。
docker restart MYSQL8
这个时候我们通过工具连接该MYSQL服务器,你可以通过navicat或者Sequel pro等等,连接登上后。
创建用户并授权
create user 'slave'@'%' identified by '123456';
-- create user 'slave'@'指定ip' identified by '123456';
grant replication slave, replication client on *.* to 'slave'@'%' ;
flush privileges;
alter user 'slave'@'%' identified by '123456' password expire never ;
alter user 'slave'@'%' identified with mysql_native_password by '123456' ;
flush privileges ;
至此,Master配置完成。
配置从库
和上面一样进入到 etc/mysql路径,使用vim命令编辑 my.cnf 文件:
cd /etc/mysql
apt-get update
apt-get install vim
## 同一局域网注意要唯一, 和 master 也不能一样
server-id=101
## 开启二进制日志功能,以备Slave作为其他 Slave的 Master 时使用
log-bin=mysql-slave-bin
## 设置只读,该项如果不设置,表示Slave可读可写
read_only = 1
docker restart MYSQL8-slave
配置完成后也需要重启Docker容器。
docker restart MYSQL8-slave
开启Master-Slave主从复制
上面两步Master和Slave都配置成功了,而且Master也为Slave读取Master数据专门设置了一个账号,下面就来实现同步。
进入Master库查看Master状态
show master status
记住File和Position,后面Slave库会在这个文件这个位置进行同步数据。此时一定不要操作Master库,否则将会引起Master状态的变化,File和Position字段也将会进行变化。
- 进入Slave库执行SQL
change master to
master_host='docker.for.mac.localhost', -- '10.211.55.2',
master_port=3380,
master_user='slave',
master_password='123456',
master_LOG_FILE='mysql-bin.000001',
master_LOG_POS=1668 ; -- 在 master 执行 show master status
使用 start slave 开启主从复制过程
start slave
其他命令 stop slave
检查主从连接状态
show slave status\G
启动之后我们来看下有没有成功。
show slave status 命令
测试
- 只在Mater 创建一张User表
- Master插入一条数据
参考1:
https://baijiahao.baidu.com/s?id=1685556899002728376&wfr=spider&for=pc
参考2:
https://www.cnblogs.com/djj123/p/11289043.html