上一篇我写了一篇主从同步的文章,主要是1主多从这种模式。但这种模式随着访问流量的过大,也会把从库给拖垮,因此为了解决这个问题,又出现一种新的方法-----主主互备,互为主从。这样的好处是做到了访问量的压力分流,同时也决绝单点故障的问题,任何一台发送故障,都还有另一台可供使用。
这种设计的缺点是只能适用于两台机器的场景。如果后期快速拓展业务的话,可以选择将业务分离,建立多个主主互备的数据库。
互为主从的设置其实很简单,只要看过我之前写的那篇主从同步的文章,你就想到互为主从的做法。
1.首先在A服务器上打开my.cnf,并输入一下内容
server-id=1
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
log-bin=master-bin
relay-log=relay-bin
sync-binlog = 1
2.在B服务器上打开my.cnf
server-id=2
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
relay-log=relay-bin
log-bin=master-bin
sync-binlog = 1
3.重启服务
systemctl restart mariadb.service
4.清空A,B服务器的master和slave日志(若之前有开启过同步的,需要先停止同步:stop slave;)
reset master;
reset slave;
5.分别给AB服务器创建授权的同步账户
A:给B创建一个用户:127.0.0.2为B服务器的地址(需要改成自己的服务器地址)
grant replication slave on *.* to 'slaveuser'@'127.0.0.2' identified by 'slaveuser';
B: 给A创建一个用户:127.0.0.1为A服务器的地址(需要改成自己的服务器地址)
grant replication slave on *.* to 'slaveuser'@'127.0.0.1' identified by 'slaveuser';
6.分别给A,B数据库锁表(不能终止mysql进程)
FLUSH TABLES WITH READ LOCK;
7.分别查看A,B服务器的主机状态。日志记录的二进制文件:
SHOW MASTER STATUS;
8.根据上面的图来修改A,B服务器的配置
A:Host为B服务器地址
CHANGE MASTER TO MASTER_HOST='127.0.0.2',MASTER_USER='slaveuser', MASTER_PASSWORD='slaveuser',MASTER_LOG_FILE='master-bin.000002',MASTER_LOG_POS=245;
CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_USER='slaveuser', MASTER_PASSWORD='slaveuser',MASTER_LOG_FILE='master-bin.000002',MASTER_LOG_POS=245;
start slave;
10.分别查看A,B的同步状态是否正常,红框两个都为yes代表同步成功
SHOW SLAVE STATUS\G;
11.解锁
UNLOCK TABLES;
12.可以自行测试了,这个时候同步是成功的了,我这里设置的是出了mysql和information_schema不同步之外,其他数据库都同步