我正在寻找一些帮助MySql主主配置问题。
我正在处理一个服务器配置,该服务器配置是由另一名员工设置的,他现在无法在此问题上提供任何帮助。这是我第一次体验这样的设置,在做了相当多的研究之后,我找到的都是矛盾的(或缺失的)!信息。因此,如果我的问题是愚蠢的,我会道歉!
我的问题是:
当复制在服务器之间工作时,我对Auto_Increment值的行为方式有一个问题。
我感到满意的是,AI偏移量和增量设置正确:
-- Master1 --
auto_increment_increment = 2
auto_increment_offset = 1
-- Master2 --
auto_increment_increment = 2
auto_increment_offset = 2而且目前这是正确的(主1有奇数AI_Numbers,主2甚至有AI_Numbers)。不幸的是,使用此系统的软件只有在主1失败时才连接到主2(自2年前启动以来就没有这样的情况)。这意味着,对于系统中负责更新的部分,我们还没有看到一个均匀的AI_Number.永远不会!
使用:
SHOW TABLE STATUS FROM `Database` LIKE 'TableName';我可以看到AI值是7765。然而,这对于两个表都是正确的-因此,即使Master2从未在下一个表运行时直接对其进行插入运行,但它将生成7766作为AI_Value。因此,我的问题是:
这是预期的,还是Master2中的表的值为1(因此在运行insert时生成2)?如果这是预期的,那么是否有一种方法来保持复制配置,但只增加AI_Value of Master2在其上运行插入?
谢谢你的帮忙!
克里斯
发布于 2016-03-04 01:55:37
不,你看到的是正确的。
当从另一台服务器复制行时,没有直接写入的表服务器的AUTO_INCREMENT值将被弹出,这样它就不会小于迄今为止插入的最大值。
这些选项的命名可能与直觉相悖。每个服务器只会为该服务器分配不小于当前值的值,并在从0开始的所有整数集中为该服务器分配偏移量、增量增量的值。
给定服务器上下一次插入的自动增量值为INT(current_value / increment) x increment + offset。
因此,如果AUTO_INCREMENT为9,增量为2,带有偏移量1的服务器A将在int(9/2) x2+1处执行下一次插入操作,因此下一行将是9.但服务器B的偏移量为2,给定9种使用的AUTO_INCREMENT相同,int(9/2) x2+2= 10
这样,两个服务器上的自动增量值相对于时间分配的顺序几乎完全相同,因为插入实际上发生了,偏移量提供了冲突保护。
在您所描述的设置中,通常都有所有的奇数或偶数值,而且通过设计,这些空白仍然未被使用。插入的下一行(由任何服务器写入)的自动增量值将高于先前插入的任何行。
当第一个本地插入发生时,您的“主2”将做正确的事情。给定表的当前AUTO_INCREMENT值在任何给定时间对所有主表都是相同的。
所以,不,它不能改变,也不应该改变。将行插入这些间隙将导致页面分割和表空间碎片的混乱,因为当最初插入行时,存储空间中没有任何空白--您没有未使用的空间,只有未分配的数字。
https://stackoverflow.com/questions/35766521
复制相似问题