文章目录
一个主机 master1 用于处理所有写请求, 它的从机 slave1 和另一台主机 master2 还有它的从机 slave2 负责所有读请求。
当 master1 主机宕机后, master2 主机负责写请求, master1、 master2 互为备机。 架构图如下 :
1、服务器规划
编号 | 角色 | IP 地址 | 机器名 |
---|---|---|---|
1 | Master1 | 192.168.140.101 | host101_master1 |
2 | Slave1 | 192.168.140.201 | host201_slave1 |
3 | Master2 | 192.168.140.102 | host102_master2 |
4 | Slave2 | 192.168.140.202 | host202_slave2 |
2、双主机配置文件修改
2.1、Master1 配置
vim /etc/my.cnf
my.cnf 的内容:
[mysqld]
#主服务器唯一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必须配置。因为作为从数据库的时候, 有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1, 取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1
2.2、Master2 配置
修改配置文件:
vim /etc/my.cnf
my.cnf 的内容:
[mysqld]
#主服务器唯一ID
server-id=3
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 双主模式中,log-slave-updates必须配置。因为作为从数据库的时候, 有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2
2.3、重启Mysql,使配置生效
systemctl restart mysqld.service
3、双从机配置文件修改
3.1、Slave1 配置
vim /etc/my.cnf
my.cnf 的内容:
[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
3.2、Slave2 配置
vim /etc/my.cnf
my.cnf 的内容:
[mysqld]
#从服务器唯一ID
server-id=4
#启用中继日志
relay-log=mysql-relay
3.3、重启Mysql,使配置生效
systemctl restart mysqld.service
4、双主机上创建账号,并授权远程复制
grant replication slave on *.* TO 'slave'@'%' identified by '123123';
4.1、查询Master1的状态
show master status;
4.2、查询Master2的状态
show master status;
分别记录下 File 和 Position 的值 ,执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。
5、双从机上执行 change master
change master 命令格式如下:
#复制主机的命令
change master to master_host='主机的IP地址',
master_user='slave',
master_password='123123',
master_log_file='mysql-bin.具体数字',
master_log_pos=154;
5.1、执行 change master 命令
Slave1 复制 Master1的命令:
Slave2 复制 Master2的命令:
5.2、启动两台从服务器复制功能
#启动两台从服务器复制功能
start slave;
5.3、查看从服务器状态
查看从服务器状态的命令:
show slave status\G;
5.3.1、Slave1 从服务器状态
5.3.2、Slave2 从服务器状态
当 Slave_IO_Running
、Slave_SQL_Running
两个参数都是Yes,则说明主从配置成功!
从服务涉及到的命令:
1、停止从服务复制功能
stop slave;
2、重新配置主从 :
stop slave;
reset master;
6、两个主机互相复制 change master
因为是双主双从,所以要配置 Master2 复制 Master1, Master1 复制 Master2 。
Master2的复制命令
Master1的复制命令
6.1、启动两台主服务器复制功能
#在两个Mysql主服务上,执行复制功能
start slave;
6.2、查看两台主服务的从服务器状态
从服务器状态命令:
show slave status\G;
6.2.1、Master2 的服务状态:
6.2.2、Master1 的服务状态 :
当 Slave_IO_Running
、Slave_SQL_Running
两个参数都是Yes,则说明主从配置成功!
7、双主从双 测试
在 Master1 主机新建库、新建表、 insert 记录, 然后在 Master2、slave1、slave2上查看复制 是否成功 。