意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

MySQL 主主复制

来源:恒创科技 编辑:恒创科技编辑部
2023-12-20 13:13:59


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

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

上一篇: Mysql 慢查询日志 下一篇: MySQL 组复制(MGR) 以及常用复制技术介绍