1. 前言
在前面已经搭建了一主一从 读写分离环境,虽然读写分离分担了压力但是,任然存在单点故障,因此需要有主备切换也就是需要多个主机,多个从机,一个主机挂了,另外一个顶上
2. 资源分布
在原有一台机器上,不同端口表示不同MySQL
实际环境中应该在不同机器上,达到最大io利用
- 3306 主 负责写操作,与33060 互相切换 读写
- 3307 从 负责读操作
- 33060 主 负责读操作,与3306 互相切换 读写
- 33070 从 负责读操作
3. 开始配置
3.1 创建镜像
mkdir /home/data/mysql5760 ;
mkdir /home/data/mysql5770 ;
docker run -d -p 33060:3306 --restart=always --name mysql5760 -eTZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=chennewtoo_ -v /home/data/mysql5760:/var/lib/mysql --privileged=true mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run -d -p 33070:3306 --restart=always --name mysql5770 -eTZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=chennewtoo_ -v /home/data/mysql5770:/var/lib/mysql --privileged=true mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
3.2 进入容器修改文件
进入新容器后安装一下vim
apt-get update;apt-get install -y vim ;
- 修改主库1 3306
[mysqld]
## 同一局域网内注意要唯一
server-id=3306
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
### muti master muti slave config
# maybe master shift to slave , slave shift to master
# 如果需要双主切换读写 必须加
log-slave-updates
# increment step is 2
auto-increment-increment=2
# increment start with 1 起点与另外的主不能重复
auto-increment-offset=1
- 修改主库2 33060
### muti master muti slave config
#
#
[mysqld]
server-id=33060
log-bin=mysql-bin
log-slave-updates
auto-increment-increment=2
auto-increment-offset=2
- 修改从库1 3307
[mysqld]
## 设置server_id,注意要唯一
server-id=3307
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
#relay_log=edu-mysql-relay-bin
# muti m s config
relay-log=mysql-relay
- 修改从库2 33070
[mysqld]
server-id=33070 #服务器唯一ID
log-bin=mysql-slave-bin # 这个是下面的前提
relay-log=mysql-relay #启用
4. 启动 配置
- 同样给 两个主库添加 slave 账号 赋权 [
REPLICATION SLAVE
REPLICATION CLIENT
] - 在主库上查看状态
show master status;
- 在两个slave
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;
- 修改成对应的主库账号
需要注意
如果配置的是docker 的IP 端口处直接写的是容器内的端口3306 而不是映射外部的端口如33060
如果之前是一主一从的配置 需要重置masterRESET MASTER;
和 slaveRESET slave;
并且停止stop slave - 然后启动slave
start slave
, 查看各个状态SHOW MASTER STATUS;
SHOW slave STATUS;
- 和一主一从相同,slave 是yes 即成功 , 到这里 两个 主从就好了,但是还需要两个主之间进行主从配置,相互切换
- 在 两个master 上面执行 第3步 , 将改成复制对方 ,然后分别
start slave
- 再验证是否成功