双主配置
我在配置主从服务器时,使用了两台服务器:10.19.34.126和10.19.34.91。
1、首先需要在这两台上搭建单独的mysql服务masterA和masterB。
2、配置数据库masterA,要对每一个数据库服务配置唯一标示,参数名为server-id,也可以通过ip来指定。修改my.conf文件参数:
log-bin= mysql-bin #所有的数据操作写入二进制日志,便于将sql语句同步到中继日志
auto-increment-offset=1 #自增长字段从那个数开始,他的取值范围是1 .. 65535
auto-increment-increment=2 #自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
log_slave_updates=1 #该参数用来设置将中继日志中的操作传入二进制日志,以便于该从数据库作为其他实例的主库。
replay_log=mysql-replay-bin #用来存储中继日志
server-id=1
在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2。这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
3、配置数据库masterA,要对每一个数据库服务配置唯一标示,参数名为server-id,也可以通过ip来指定。修改my.conf文件参数:
log-bin= mysql-bin #所有的数据操作写入二进制日志,便于将sql语句同步到中继日志
auto-increment-offset=2 #自增长字段从那个数开始,他的取值范围是1 .. 65535
auto-increment-increment=2 #自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
log_slave_updates=1 #该参数用来设置将中继日志中的操作传入二进制日志,以便于该从数据库作为其他实例的主库。
replay_log=mysql-replay-bin #用来存储中继日志
server-id=2
4、在masterA数据库上创建账号,通过这个账号进行同步主库的二进制日志到备库的中继日志。
MySQL>grant all on *.* to 'root'@'%' identified by '123456'
5、在masterB数据库上创建账号,通过这个账号进行同步主库的二进制日志到备库的中继日志。
MySQL>grant all on *.* to 'root'@'%' identified by '123456'
6、在masterA服务器上查看当前二进制日志名和偏移量值:
MySQL> show master status;
7、在masterB服务器上首先停止复制服务,然后设置从服务器的同步点,最后开启同步服务:
MySQL> stop slave;
MySQL> CHANGE MASTER TO MASTER_HOST="10.19.34.126",MASTER_USER="root",MASTER_PASSWORD="123456",MASTER_PORT=3306,MASTER_LOG_FILE="mysql-bin.000003",MASTER_LOG_POS=393044781,MASTER_CONNECT_RETRY=10;
MySQL> start slave;
8、在masterB服务器上查看当前二进制日志名和偏移量值:
MySQL> show master status;
9、在masterA服务器上首先停止复制服务,然后设置从服务器的同步点,最后开启同步服务:
MySQL> stop slave;
MySQL> CHANGE MASTER TO MASTER_HOST="10.19.34.91",MASTER_USER="root",MASTER_PASSWORD="123456",MASTER_PORT=3306,MASTER_LOG_FILE=" mysql-bin.000004",MASTER_LOG_POS=393044425 ,MASTER_CONNECT_RETRY=10;
MySQL> start slave;
双主的部分详解
在配置双主时,可能有人会想到在将主数据库A的数据操作同步到主数据库B的中继器,由于开启了log_slave_updates参数,主数据库B从主数据库A同步的语句从中继日志转储到二进制日志中。由于是双向复制是否会出现该语句又同步到了数据库A中,答案是不可能的,因为在二进制日志中会标示该条语句是来自哪个数据库实例,如果标示数据库A,则不会循环同步到数据库A。如果该数据库的搭建模式只是双主模式,没有改属猪模式的从数据库,可以将log_slave_updates参数关闭,所有的同步复制不会转储到二进制日志,也避免了循环复制。
应有备库的双主模式
1、对双主模式中的两个数据库配置文件中添加配置参数:log_slave_updates=1。
2、查看masterA和masterB的二进制日志的文件和同步点。
3、在masterA和masterB的两个备库上都要执行以下指令,实现数据同步:
MySQL> stop slave;
MySQL> CHANGE MASTER TO MASTER_HOST="10.19.34.91",MASTER_USER="root",MASTER_PASSWORD="123456",MASTER_PORT=3306,MASTER_LOG_FILE=" mysql-bin.000004",MASTER_LOG_POS=393044425 ,MASTER_CONNECT_RETRY=10;
MySQL> start slave;
双主实现自动切换