首页 > 解决方案 > Mysql Master 主复制错误主/从

问题描述

我尝试了主主复制;作为其中的一部分,我首先尝试了主从复制。复制连接成功,但是当我在主服务器上进行更改时,从服务器抛出了很多重复的错误。

Last_SQL_Error: 查询时出现错误 'Duplicate entry '1576' for key 'PRIMARY''。默认数据库:“nagiosxi”。查询:'INSERT INTO xi_auditlog (log_time,source,user,type,message,ip_address,details) VALUES ('2018-05-15 16:34:19','Nagios XI','NULL',32,'cmdsubsys:用户 [nagiosadmin] 将新配置应用于 Nagios Core','localhost','')' Replicate_Ignore_Server_Ids:

根据我的理解,主人不能覆盖奴隶中的价值。正在复制的数据库是应用程序数据库,主数据库和从数据库都会引发很多错误,因为无法覆盖这些值。

有人可以帮助我进行主主复制吗?我需要为此目的编写脚本吗?

标签: mysqldatabase-replicationmaster-slave

解决方案


为了使 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_formattoROWMIXED-- not -- 。STATEMENT如果您按照应有的方式备份您的二进制日志,那么log_slave_updates也应该启用。如果您有对向副本,则它们所连接的主服务器必须启用此选项。

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

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


推荐阅读