insert 操作的时 AUTO_INCREMENT 的问题。

2016-04-21 10:48:15 +08:00
 Mayuyu
A服务器, A表, AUTO_INCREMENT是从0开始。
B服务器, A表, AUTO_INCREMENT是从20000000开始。

因为业务需要,所以可能会需要把 B 服务器的 A 表数据插入到 A 服务器的 A 表。然而问题来了。
如果A服务器的 A表目前AUTO_INCREMENT是632 , B 服务器的 A 表 AUTO_INCREMENT 是20000514 。
我往A表insert操作完之后, A表的AUTO_INCREMENT变成了20000515 。


如果做到insert的时候不影响A服务器A表的自增ID咧?
3820 次点击
所在节点    MySQL
15 条回复
archer2ee
2016-04-21 11:11:05 +08:00
插入后不影响 A 的自增序列的话,整个表就乱套了,后续可能会导致 id 重复的问题。

这种情况要么在插入到 A 的时候不带 id ,让其随 A 自增,要么就做 DB 同步吧。

坐等高手。
Mayuyu
2016-04-21 11:15:20 +08:00
@archer2ee 所以 B 服务器的 A 表自增 ID 才设为两千万啊。当初这样设计就是为了拿来同步用的,这样重复的可能性就小多了,然而万万没想到插入之后自增 id 也会变的问题。
yuankui
2016-04-21 11:16:18 +08:00
shiji
2016-04-21 11:20:47 +08:00
理论上就应该 AUTO_INCREMENT 变成 20000515 呀。

如果你能确定这个表再怎么增加,都不会过 20000000 产生冲突, 你可以手动把 AUTO_INCREMENT 改回去,反正这种操作是不规范的也是不推荐的。
hxsf
2016-04-21 11:26:27 +08:00
@Mayuyu
> 当初这样设计就是为了拿来同步用的

为什么不直接用 db 自带的同步功能?
scusjs
2016-04-21 12:35:51 +08:00
数据同步过去后,
alter table table_name AUTO_INCREMENT=n
msg7086
2016-04-21 12:41:51 +08:00
@shiji
@scusjs
AUTO_INCREMENT 是不能小于数据表里字段最大值的。
自增的作用本来就是指示表里数据最大值的,根本不是上面说的什么「拿来同步用」的。
同步用老老实实上唯一 ID 。
pubby
2016-04-21 13:14:14 +08:00
master-master 的方式,不是应该设这两个参数么?

A:
auto-increment-increment = 2
auto-increment-offset = 0

B:
auto-increment-increment = 2
auto-increment-offset = 1


auto-increment-increment=机器数 N
auto-increment-offset = 每台机器序号 [0,1,....,N-1]
void1900
2016-04-21 13:43:04 +08:00
当初设计就有问题。。。
BeanMr
2016-04-21 13:50:24 +08:00
如果确认数据库数量为什么不用遗赠步长控制呢? A 库用奇数 B 用偶数!
kamushin
2016-04-21 14:01:26 +08:00
AUTO_INCREMENT 不应该用作主键(提升数据库性能)外的任何目的.
darasion
2016-04-21 14:11:01 +08:00
为什么要这么做? 怕浪费 ID 空间么? 囧。
Mayuyu
2016-04-21 14:47:56 +08:00
@darasion 因为公司会在其他很多城市都有业务,所以会在当地架一台服务器。
魔都的作为主数据库,下面城市的数据会定时的插入到主库,但是为了每个城市的数据写入到上海数据库的时候不重复,所以才想到了用 2kw , 3kw 。。。。。一直到 9kw 。
不是传统的主从或者主主,需求是:魔都的数据库里面有其他城市的数据,但其他城市的数据库里面只有本地的数据。但偶尔也可能会让本地有上海的数据。
msg7086
2016-04-22 02:28:40 +08:00
@Mayuyu 你需要读写分离,多机写入。
但是不管怎么搞,这样的设计都还是有问题的。
minotaur
2016-05-04 15:41:36 +08:00
为啥不 mod 1024 ,用范围。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/273302

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX