我尝试过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','NULL',32,'cmdsubsys:用户[nagiosadmin]将新配置应用于Nagios Core','localhost','')'Replicate_Ignore_Server_Ids:
根据我的理解,主服务器无法覆盖从服务器中的值 . 复制的数据库是应用程序数据库,主数据库和从属数据库都会抛出大量错误,因为无法覆盖这些值 .
有人可以帮助我掌握主复制 . 我是否需要为此目的编写脚本?
1 回答
在两个主设备上将
auto_increment_increment
设置为2 . 在一台服务器上将auto_increment_offset
设置为2,在另一台服务器上设置为1(默认值) .这会导致一个服务器仅创建偶数值,另一个服务器仅创建奇数值 . 它们仍然是顺序的,因为如果一个服务器创建1,3,5,7和9,并且在所有这些服务器复制之后下一个插入发生在另一个服务器上,则下一个id将是10 . 不可避免,但正如任何有经验的DBA会告诉你的那样,不要忽视差距 .
您应该在两台服务器上将
binlog_format
设置为ROW
或MIXED
- 而不是STATEMENT
. 如果您正在备份binlogs,那么也应该启用log_slave_updates
. 如果您有对象副本,则它们所连接的主站必须启用此选项 .此外,此时您将需要销毁和重建其中一个服务器,因为它们的数据永远不会一致 .
master / master的推荐做法是一次只写一个服务器 . 您的应用程序可以随意切换,但如果只有一个被视为可写,则它是最稳定的 .