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 中,不需要配置主键自增策略,每个库的操作都会让另外一个库递增
目录 返回
首页