爱编程,爱生活

mysql 数据库主-主模式常见问题以及修复方式

2018-06-16  本文已影响17人  熬夜的猫头鹰

mysql 数据库主-主模式常见问题以及修复方式

上面的图就是主-主模式原理简介

数据库A可以读(R)可以写(W),数据库B同样可以读(R)写(W)。
应用在会将数据随机的写入数据库A或者是数据库B,然后数据再将自己拥有的数据同步到彼此。比如现在在数据库A中的Test表中写入了一条记录,那么数据库A会将这条记录同步到B。但是主-主模式因为是双写双读,所以容易产生同步问题:
比如说数据库中有一张表,表的数据结构中有一个联合主键 ,假设一种情况,如果在设计接口的时候不是幂等的情况下,很有可能将两条相同联合主键的记录写入到数据库中;
但是两条相同的数据恰巧是A中写入一条B中写入一条,此时A向数据库B中同步数据的时候,因为数据库B中已经存在了一条相同主键的数据,所以就会导致B中主键冲突,同理数据库B中向A中同步的时候,也会出现这种问题。

解决办法如下:

mysql在主从复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。
slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。
slave_skip_errors选项有四个可用值,分别为:off,all,ErorCode,ddl_exist_errors。
默认情况下该参数值是off,我们可以列出具体的error code,也可以选择all,mysql5.6及MySQL Cluster NDB 7.3以及后续版本增加了参数ddl_exist_errors,该参数包含一系列error code(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)
一些error code代表的错误如下:

my.cnf中的写法:

slave_skip_errors=1062,1053
slave_skip_errors=all
slave_skip_errors=ddl_exist_errors

作为mysql启动参数的写法:

--slave-skip-errors=1062,1053
--slave-skip-errors=all
--slave-skip-errors=ddl_exist_errors

从数据库中查看该参数的值:

mysql> show variables like 'slave_skip%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| slave_skip_errors | 1007  |
+-------------------+-------+

上一篇 下一篇

猜你喜欢

热点阅读