两台MySQL之间互为彼此的从库,同时又是主库。这种方案,既做到了访问量的压力分流,同时也解决了“单点故障”问题。任何一台故障,都还有另外一套可供使用的服务

MySQL 主主复制_自增

mysql 的主主复制就是两台 mysql 节点互为主从。搭建起来 mysql 主从,再来搭建主主复

制就非常简单了。在原来主从的基础上做如下操作:

1.开启原从节点的 binlog 日志

2.原从节点创建读取副本的用户

3.在原主节点中让 master 指向从节点

4.在原主节点执行 start slave 命令

 

mysql 的主主复制就是两台 mysql 节点互为主从。搭建起来 mysql 主从,再来搭建主主复

制就非常简单了。在原来主从的基础上做如下操作:

1.开启原从节点的 binlog 日志

2.原从节点创建读取副本的用户

3.在原主节点中让 master 指向从节点

4.在原主节点执行 start slave 命令

 

从节点192.168.178.88上来配置


(1)从节点开启bing log

mysql> show variables like '%log_bin%';  --binlog 并没有开启

+---------------------------------+-------+

| Variable_name                   | Value |

+---------------------------------+-------+

| log_bin                         | OFF   |

| log_bin_basename                |       |

| log_bin_index                   |       |

+---------------------------------+-------+

 

[root@mysqlslave ~]# vim /etc/my.cnf

server-id=2

relay-log=/var/lib/mysql/relay-bin  #可加可不加,自动生成

relay-log-index=/var/lib/mysql/relay-bin.index  #可加可不加,自动生成

log-bin=/var/lib/mysql/mysql-bin --添加该行

 

mysql> show variables like '%log_bin%';  --重启mysql服务再来看看

+---------------------------------+--------------------------------+

| Variable_name                   | Value                          |

+---------------------------------+--------------------------------+

| log_bin                         | ON                             |

| log_bin_basename                | /var/lib/mysql/mysql-bin       |

| log_bin_index                   | /var/lib/mysql/mysql-bin.index |

 

mysql> show master status;  --查看从库binglog信息和pos点

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |      154 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

(2)创建用户并且授权

mysql> create user 'repl'@'192.168.179.%' identified by 'repl';

mysql> grant all on *.* to ​'repl'@'192.168.179.%';

 

[root@master log]# mysql -h192.168.179.88 -urepl -p  --创建完用户授权之后在主库上测试一下看是否可以使用repl用户进行登入

Enter password:repl

mysql>

 

 

主节点192.168.179.77上来配置


连接 Master 192.168.179.88

change master to

master_host='192.168.179.88',master_port=3306,master_user='repl',master_password='repl',master_log_file='/var/lib/mysql/mysql-bin.000001',master_log_pos=351;

 

mysql> start slave;

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.179.88

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000001

          Read_Master_Log_Pos: 351

               Relay_Log_File: master-relay-bin.000002

                Relay_Log_Pos: 320

        Relay_Master_Log_File: mysql-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

以上步骤即可完成主主节点的配置!

 

 

自增主键的问题


下面有一个问题需要解决,就是自增主键的问题,按照上面的做法,如果向两个节点中插

入数据,一定会导致主键的重复,这里需要一个小的技巧

这里让第一台节点主键采用 1 3 5 7的方式自增

第二台节点采用 2, 4, 6, 8 的方式递增

这样就不会导致主键冲突了

在主1节点/etc/my.cnf下配置

auto_increment_increment=2

auto_increment_offset=1

 

在主2节点/etc/my.cnf下配置

auto_increment_increment=2

auto_increment_offset=2

 

在 MySQL5.7 中,不需要配置主键自增策略,每个库的操作都会让另外一个库递增