我尝试过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:
根据我的理解,主人不能覆盖奴隶中的值。 复制的数据库是应用程序数据库,主数据库和从属数据库都会抛出大量错误,因为这些值无法被覆盖。
有人可以帮助我掌握主复制。 我是否需要为此目的编写脚本?
答案 0 :(得分:0)
要使master-master或Galera安全使用AUTO_INCREMENT,应使用系统变量
auto_increment_increment
和auto_increment_offset
为每个服务器生成唯一值。
在两个主人身上将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的推荐做法是一次只写一个服务器。您的应用程序可以随意切换,但如果只有一个被视为可写,则它最稳定。