Mysql Master Master复制错误主/从

时间:2018-05-15 23:13:37

标签: mysql database-replication master-slave

我尝试过master-master复制;作为其中的一部分,我首先尝试了主从复制。复制连接成功,但是当我在master上进行更改时,slave会抛出大量重复错误。

  

Last_SQL_Error:错误'重复录入' 1576'关键' PRIMARY''在查询。默认数据库:' nagiosxi'。查询:' INSERT INTO xi_auditlog(log_time,source,user,type,message,ip_address,details)VALUES(' 2018-05-15 16:34:19',' Nagios XI& #39;,' NULL',32,' cmdsubsys:用户[nagiosadmin]将新配置应用于Nagios Core',#local;''& #39)' Replicate_Ignore_Server_Ids:

根据我的理解,主人不能覆盖奴隶中的值。 复制的数据库是应用程序数据库,主数据库和从属数据库都会抛出大量错误,因为这些值无法被覆盖。

有人可以帮助我掌握主复制。 我是否需要为此目的编写脚本?

1 个答案:

答案 0 :(得分:0)

  

要使master-master或Galera安全使用AUTO_INCREMENT,应使用系统变量auto_increment_incrementauto_increment_offset为每个服务器生成唯一值。

     

https://mariadb.com/kb/en/library/auto_increment/

在两个主人身上将auto_increment_increment设为2。在一台服务器上将auto_increment_offset设置为2,在另一台服务器上设置为1(默认)。

这会导致一个服务器只创建偶数值,另一个服务器只创建奇数值。它们仍然是顺序的,因为如果一个服务器创建1,3,5,7和9,并且在所有这些服务器复制之后下一个插入发生在另一个服务器上,则下一个id将是10。不可避免,但正如任何有经验的DBA会告诉你的那样,不要忽视差距。

您应该在两台服务器上将binlog_format设置为ROWMIXED - 而不是STATEMENT。如果您正在备份binlogs,则还应启用log_slave_updates。如果您有对象副本,则它们所连接的主站必须启用此选项。

此外,此时您将需要销毁和重建其中一个服务器,因为它们的数据永远不会一致。

master / master的推荐做法是一次只写一个服务器。您的应用程序可以随意切换,但如果只有一个被视为可写,则它最稳定。