首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql主复制-主复制导致丢失AutoIncrement值

MySql主复制-主复制导致丢失AutoIncrement值
EN

Stack Overflow用户
提问于 2016-03-03 08:09:30
回答 1查看 1.1K关注 0票数 1

我正在寻找一些帮助MySql主主配置问题。

我正在处理一个服务器配置,该服务器配置是由另一名员工设置的,他现在无法在此问题上提供任何帮助。这是我第一次体验这样的设置,在做了相当多的研究之后,我找到的都是矛盾的(或缺失的)!信息。因此,如果我的问题是愚蠢的,我会道歉!

我的问题是:

当复制在服务器之间工作时,我对Auto_Increment值的行为方式有一个问题。

我感到满意的是,AI偏移量和增量设置正确:

代码语言:javascript
复制
-- 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.永远不会!

使用:

代码语言:javascript
复制
SHOW TABLE STATUS FROM `Database` LIKE 'TableName';

我可以看到AI值是7765。然而,这对于两个表都是正确的-因此,即使Master2从未在下一个表运行时直接对其进行插入运行,但它将生成7766作为AI_Value。因此,我的问题是:

这是预期的,还是Master2中的表的值为1(因此在运行insert时生成2)?如果这是预期的,那么是否有一种方法来保持复制配置,但只增加AI_Value of Master2在其上运行插入?

谢谢你的帮忙!

克里斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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值在任何给定时间对所有主表都是相同的。

所以,不,它不能改变,也不应该改变。将行插入这些间隙将导致页面分割和表空间碎片的混乱,因为当最初插入行时,存储空间中没有任何空白--您没有未使用的空间,只有未分配的数字。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35766521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档