双主双从 架构
一个主机 Master1 用于处理所有写请求,它的从机 Slave1 和另一台主机 Master2 还有它的从 机 Slave2 负责所有读请求。
当 Master1 主机宕机后,Master2 主机负责写请求,Master1 、 Master2 互为备机。
架构图如下:
其实和 一主一从的搭建很类似,可查看博文
https://blog.csdn.net/qq_41712271/article/details/114992971
唯一不同的,就是 两个主机 都 增加了 log-slave-updates选项 (在作为从数据库的时候,有写入操作也要更新二进制日志文件),
另外就是两个主机之间也要互相复制同步,注意 ip,日志文件和同步位置 不要弄错了
准备的机器如下 :
| 角色 | IP地址 | my.cnf文件中的 server-id | 端口号 |
主机 1 | Master1 | 172.16.208.211 | 1 | 3306 |
从机 1 | Slave1 | 172.16.208.212 | 2 | 3306 |
主机 2 | Master2 | 172.16.208.213 | 3 | 3306 |
从机 2 | Slave2 | 172.16.208.214 | 4 | 3306 |
1 配置两台主机,注意server-id 不一样,其余都一样,所以只写了 Master1的配置
[mysqld]
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=blog
#设置logbin格式
binlog_format=STATEMENT######################### 增加的选项 #########################
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
2 配置两台从机,注意server-id 不一样,其余都一样,所以只写了 Slave1 的配置
[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
3 双主机、双从机重启 mysql 服务
4 在两台主机上创建同步用的帐号和查询master的状态
# 创建同步数据的账户,并且进行授权操作
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'ProphetClouds.com2017';# 刷新权限
flush privileges;# 查询master的状态,记录下File和Position的值,执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化
show master status;
5 在从机上配置需要复制的主机,并启用同步,查询同步的状态,
注意 ip,日志文件和同步位置 不一样,所以只写了 Slave1的命令
Slave1 复制 Master1,
Slave2 复制 Master2
# 指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。
CHANGE MASTER TO MASTER_HOST='172.16.208.211',
MASTER_USER='slave',
MASTER_PASSWORD='ProphetClouds.com2017',
MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=982;# 启动同步
START SLAVE;# 停止同步
STOP SLAVE;# 查看同步状态,出现下面的截图,就成功了
SHOW SLAVE STATUS;
6 两个主机互相复制
Master2 复制 Master1,
Master1 复制 Master2
方法和步骤4,步骤5一样,注意 ip,日志文件和同步位置 不要弄错了
7 开始测试,注意上面的步骤都完成后,才开始创建库,创建表,增删改查等,可以发现已经可以实现同步了
如果已经有数据库,并有表,表记录的话,先自行baidu解决,后期我也会研究研究
8 如果搭建失败,需要重新配置的话,可以执行下面的命令
### 在主机上执行 ###
# 停止同步
STOP SLAVE;
# 重置主机
RESET MASTER;### 在从机上执行 ###
# 停止同步
STOP SLAVE;
# 重置从机
RESET SLAVE;