配置主主环境的时候有两个参数控制步长和偏移量
在做主主同步前需要特别注意的一个问题:
主主复制和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题,例如:
出现的问题(多主自增长ID重复)
1. 首先在A和B两个库上创建
test
表结构;
2. 停掉A,在B上对数据表
test
(存在自增长属性的ID字段)执行插入操作,返回插入ID为1;
3. 然后停掉B,在A上对数据表
test
(存在自增长属性的ID字段)执行插入操作,返回的插入ID也是1;
4. 然后 同时启动A,B,就会出现主键ID重复
做主主同步时需要设置自增长的两个相关配置,如下:
auto_increment_offset #表示自增长字段从那个数开始,其默认值是1,如果有n台mysql机器,则从第一台开始分为设1,2...n
auto_increment_increment #表示自增长字段每次递增的量,其默认值是1,如果有n台mysql机器,这个值就设置为n。
在主主同步配置时,需要将两台服务器的:
auto_increment_increment #增长量都配置为2
auto_increment_offset #分别配置为1和2。这是序号,第一台从1开始,第二台就是2,以此类推!这样效果就是:master的数据id是1,3,5,7..., slave的数据id是2,4,6,8....
这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。(针对的是有自增长属性的字段)
mysql> SHOW VARIABLES LIKE 'auto_inc%'; # 查看数据库的自增步长
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
2 rows in set (0.00 sec)
# 主主同步必要配置
#masterA自增长ID
log-slave-updates = true # #将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启
auto_increment_offset = 1
auto_increment_increment = 2 #奇数ID
#masterB自增加ID
log-slave-updates = true
auto_increment_offset = 2
auto_increment_increment = 2 #偶数ID