mysql中配置双主双从: M1-S1 M2-S2 ,M1和M2互为主从 。
为了完成这个实验,我们需要准备4个mysql实例,我们还是用docker-compoe来搞。
mysql1 M1,mysql2 S1
mysql3 M2 , mysql4 S2
mkdir work2
vi docker-compose.yml,内容如下:
version: '3'
services:
mysql1:
container_name: mysql1
image: mysql:5.7
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- "/data/mysql1/lib:/var/lib/mysql"
- "/data/mysql1/mysql.conf.d:/etc/mysql/mysql.conf.d"
- "/data/mysql1/log:/var/log"
networks:
mynet:
ipv4_address: 10.0.0.2
mysql2:
container_name: mysql2
image: mysql:5.7
ports:
- "3308:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- "/data/mysql2/lib:/var/lib/mysql"
- "/data/mysql2/mysql.conf.d:/etc/mysql/mysql.conf.d"
- "/data/mysql2/log:/var/log"
networks:
mynet:
ipv4_address: 10.0.0.3
mysql3:
container_name: mysql3
image: mysql:5.7
ports:
- "3309:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- "/data/mysql3/lib:/var/lib/mysql"
- "/data/mysql3/mysql.conf.d:/etc/mysql/mysql.conf.d"
- "/data/mysql3/log:/var/log"
networks:
mynet:
ipv4_address: 10.0.0.4
mysql4:
container_name: mysql4
image: mysql:5.7
ports:
- "3310:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- "/data/mysql4/lib:/var/lib/mysql"
- "/data/mysql4/mysql.conf.d:/etc/mysql/mysql.conf.d"
- "/data/mysql4/log:/var/log"
networks:
mynet:
ipv4_address: 10.0.0.5
networks:
mynet:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.0.0.0/24
cd /data
cp -rf mysql1 mysql3 #复制出M2
cp -rf mysql2 mysql4 #复制出S2
修改m1 、s1 、m2、 s2的配置
m1配置中新增:
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
#表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1
m2配置中新增:
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
#表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2
s1和s2的配置
#配置从节点
server-id=3
relay-log=mysql-relay
#配置从节点
server-id=5
relay-log=mysql-relay
都配置好后,启动docker-compse
cd /root/work2
docker-compose up -d
ok, 4个mysql实例都启动成功了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们再用sqlyog客户端,分别连上这4个mysql实例。
# M1(10.0.0.2) 中创建用户,并授权
CREATE USER 'slave'@'10.0.0.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.0.0.%';
FLUSH PRIVILEGES;
RESET MASTER;
SHOW MASTER STATUS ;
#配置M1和M2互为主从复制 (0.2,0.4)
#M1上:
STOP SLAVE
CHANGE MASTER TO MASTER_HOST='10.0.0.4', MASTER_USER='slave',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
START SLAVE
SHOW SLAVE STATUS
#S1(10.0.0.3)中重新配置从节点
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='10.0.0.2', MASTER_USER='slave',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
#启动主从复制
START SLAVE;
SHOW SLAVE STATUS;
============================
# M2(10.0.0.4) 中创建用户,并授权
CREATE USER 'slave'@'10.0.0.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.0.0.%';
FLUSH PRIVILEGES;
RESET MASTER
SHOW MASTER STATUS ;
#配置M1和M2互为主从复制 (0.2,0.4)
#M2上:
STOP SLAVE
CHANGE MASTER TO MASTER_HOST='10.0.0.2', MASTER_USER='slave',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=800;
START SLAVE
SHOW SLAVE STATUS
======================================
#S2(10.0.0.5)中重新配置从节点
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='10.0.0.4', MASTER_USER='slave',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
START SLAVE;
SHOW SLAVE STATUS ;
测试一下,发现在m1做的任何修改(建库、建表、insert、update、delete等),都会同步到s1、m2、s2;
在m2做的任何修改(建库、建表、insert、update、delete等),都会同步到s2、m1、s1
Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1