- docker搭建mysql的集群(双主双从)
- 主机创建用户并授权:
- 链接Master(主)和Slave(从)
- 链接两个主机
首先在docker上拉取mysql的镜像,以及运行起来四个mysql,不会的话大家可以去看我之前搭建一主一从的文章,在这里细节就不多演示了,直接从4台配置开始:
我这里直接开过了:master,master01,slave,slave01四台
进入master容器内部:
docker exec -it mysql-master /bin/bash //mysql-master为容器名称
如果没有安装vim的话需要安装下vim编辑器,安装可跳过这一步:
docker内部安装vim
apt-get update apt-get install vim
编辑配置文件
root@6867ee816ce1:/# vim etc/mysql/conf.d/docker.cnf
配置解释:
#主服务器唯一ID 四台机器不要重复 server-id=1 #启用二进制日志 log-bin=mysql-bin # 设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql binlog-ignore-db=information_schema #设置需要复制的数据库 binlog-do-db=需要复制的主数据库名字 #设置logbin格式 binlog_format=STATEMENT # 在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updates #表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535 auto-increment-increment=2 # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535 auto-increment-offset=1
下面是我配置的master:
接下来配置slave主机:
配置解释:
#从服务器唯一ID server-id=101 #启用中继日志 relay-log=mysql-relay-bin
下面是我配置的
其他两个主从都是一样的,直接给出我的配置:
master01主机:
slave01从机:
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.36 sec) mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; Query OK, 0 rows affected (0.00 sec)
至此,Master配置完成。
链接Master(主)和Slave(从)在Master进入mysql,执行
show master status;
然后在master的从节点slave中配置:
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000007', master_log_pos= 154, master_connect_retry=30;
将master_host改为master的ip, master_log_file改为master的日志File ,master_log_pos改为上图对应的position
命令说明:
master_host :Master的地址,指的是容器的独立ip,可以通过
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip命令:
改写配置语句:
所以我在slave配置的命令就是
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='master-bin.000001', master_log_pos= 371, master_connect_retry=30;
同理在slave01中配置master01:
这样来说两个主从都配置好了
使用show slave status G;查看:
两个主机互相复制:
在master节点配置master01:
开启:
mysql> start slave; Query OK, 0 rows affected (0.01 sec)
在master01节点配置master:
开启:
mysql> start slave; Query OK, 0 rows affected (0.01 sec)
这样就成功了!
测试
创建一个数据库,四个数据库都已同步:
成功!



