如何在Docker中搭建MySQL主从复制

5 篇文章 0 订阅
5 篇文章 0 订阅

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值