mysql双主配置-双主带来的管理思考

2021-03-27  本文已影响0人  随便写点什么就好

概述

mysql双主配置很简单,似乎大家都只关心他的安装和部署,大家可以用他来做双活的方案,并没有深刻的思考过生产环境后续管理的风险和如何规避这些问题。

配置重点

1. 配置文件

log-slave-updates = true
auto_increment_offset = 1 #另外一个主B是2,其他一样。
auto_increment_increment = 2

replicate-ignore-db = mysql
replicate-ignore-db = sys
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = undolog
replicate_wild_ignore_table = mysql.%
replicate_wild_ignore_table = sys.%
replicate_wild_ignore_table = information_schema.%
replicate_wild_ignore_table = performance_schema.%
replicate_wild_ignore_table = undolog.%

2. 其他配置,如果是生产环境改造的话,需要特别注意

  1. service_id当然不能一样。
  2. masterB是用masterA的xtrabackup备份恢复生成。 mysqldump默认参数其实很不到位的,当然大部分情况mysqldump没啥问题。但是如果有下面的问题的话,mysqldump要慎用:
    (1) .你刚好有存储过程,mysqldump需要加另外的参数。
    (2) .你刚好不是utf8mb4,原库要支持表情,然后mysqldump刚好默认是utf8的话,就没有了。
    (3). 你在调试的是生产环境,加--master-data=2来记录binlog点,锁表业务就会找上门来。
  3. binlog这些当然是两边都要开

管理上需要注意的问题

1. 不要发放DDL账号,避免开发人员自行变更数据库表结构,导致1167错误

双主如果一边更新表结构,一边在写入,即使你认为你的的sql没有问题。但是mysqlbinlog的写入日志不是这样的,比如row格式,需要回放的日志如下下面,你修改表结构之前是可以插入的,中间查多一列的话,你的列对不上了,导致1167错误。目前有两种办法可以规避这个问题:

  1. 这种表结构更新可以锁表,不让另外一边写入再执行。
  2. 还有一种办法是列只可以在最后加列,要有默认值。这样即使表结构发生了变更,中继日志还是可以回放的。不至于双主同步报错。
image.png

2. 双主有忽略库

如果忽略了一些库,比如mysql的库,创建账号的时候,就需要两边创建。

上一篇 下一篇

猜你喜欢

热点阅读