mysql主主同步配置

永远的零 2020-01-13 PM 161℃ 0条

mysql1.jpg

主主同步就是在本身的主从同步基础上再去从数据库上做一个主从同步,也就是互为主从的关系。

但是有个问题,主主同步是两台服务器都有写权限,这就涉及到自增长重复问题。比如有自增长属性的ID字段的test表,停掉A机器,在B上对test表执行插入操作,返回插入ID为1;
再停掉slave,在A上执行插入操作,返回的插入ID也是1 ; 然后同时启动两台机器,就会出现主键ID重复!
为了避免这个问题,我们在两台主机上设备不同的自增长,A插入奇数ID,B插入偶数ID。
master:192.168.1.1
slave:192.168.1.2

一、在master上的配置:

1.修改my.cnf配置

# 添加如下配置,不是覆盖
vim /etc/my.cnf
server-id = 1        
log-bin = mysql-bin  
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2    # 自增长为2
auto-increment-offset = 1       # 从1开始,也就是全是奇数ID
slave-skip-errors = all

2.重启mysql,授权同步用户

mysql> grant replication slave,replication client on *.* to repl@'192.168.1.2' identified by "123qqq...A";
mysql> flush privileges;

3.查看状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |   609 |        |         |          |
+------------------+----------+--------------+------------------+-------------------+

二、在slave上的配置:

1.修改my.cnf配置

vim /etc/my.cnf
server-id = 2       
log-bin = mysql-bin  
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2    # 自增长为2,也就是递增2
auto-increment-offset = 2       # 从2开始,也就是插入偶数ID
slave-skip-errors = all

2.重启mysql,授权同步用户

mysql> grant replication slave ,replication client on *.* to repl@'192.168.1.1' identified by "123qqq...A";  
mysql> flush privileges;

3.查看状态

show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |   609 |       |          |          |
+------------------+----------+--------------+------------------+-------------------+

三、在slave上做同步master的设置:

mysql> change master to 
master_host='192.168.1.1',
master_user='repl',
master_password='123qqq...A',
master_log_file='mysql-bin.000001',
master_log_pos=609;

mysql> start slave;
mysql> show slave status \G;
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.1.1
              Master_User: repl
              Master_Port: 3306
             Connect_Retry: 60
            Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 158
           nelay_Log_File: mysql-relay-bin.000003
             Relay_Log_Pos: 750
        Relay_Master_Log_File: mysql-bin.000001
            Slave_IO_Running: Yes      # 两个都显示YES,表示同步成功
            Slave_SQL_Running: Yes
            ..................

四、在master上做同步slave的设置:

mysql> change master to 
master_host='192.168.1.2',
master_user='repl',
master_password='123qqq...A',
master_log_file='mysql-bin.000001',
master_log_pos=609;
 
mysql> start slave;
mysql> show slave status \G;
*************************** 1. row ***************************
           Slave_IO_State: Waiting for master to send event
             Master_Host: 192.168.1.2
             Master_User: repl
             Master_Port: 3306
            Connect_Retry: 60
           Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 256
           Relay_Log_File: mysql-relay-bin.000003
           Relay_Log_Pos: 750
        Relay_Master_Log_File: mysql-bin.000001
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ..................

人要么永不做梦,要么梦得有趣;人也必须学会清醒:要么永不清醒,要么清醒得有趣。

评论啦~