• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wuwukai007
V2EX  ›  程序员

多台 mysql 中用的 相同表名,自增 ID ,现在要合并到一个库中, ID 冲突如何解决呢?

  •  1
     
  •   wuwukai007 · Dec 27, 2020 · 6492 views
    This topic created in 2138 days ago, the information mentioned may be changed or developed.
    • 多台服务器上有相同的库,相同的表结构
      用的都是自增 ID,现在要 合并到一个 mysql 中, 会出现 ID 冲突,有没有成熟的工具可以做这个?
    Supplement 1  ·  Dec 27, 2020

    感谢各位回复

    • 现在采用 : 新库重新建表 + insert 去掉 id 字段
    • 表有关联的,我已经在新的库重新建表了,insert 把自增id 删了,晚上挂在跑,明天看看有没有问题
    23 replies  •  2020-12-28 16:44:26 +08:00
    yulitian888
    yulitian888
    Dec 27, 2020
    1
    上策:另立新 ID,好像并不需要什么特别的工具哦!
    中策:给每个不同的源库加上不同的前缀数字,比如 A 库来的叫做 32000xxxx,B 库来的叫做 98000xxxx,补以适当的补位数即可。好像,也不需要什么特别的工具哦!
    下策:发个问题,坐等别人介绍工具
    roundgis
    roundgis
    Dec 27, 2020 via Android
    2
    如果沒有 unique index
    你如何判斷該記錄是不是相同的呢
    encro
    encro
    Dec 27, 2020
    3
    没有,如果做了表关联的话。
    wuwukai007
    wuwukai007
    OP
    Dec 27, 2020
    4
    @yulitian888 表太多了,几百张表,数据量也比较大,好几台服务器,自己弄估计费劲!
    buhi
    buhi
    Dec 27, 2020
    5
    不合并不就完事了, 首先合并是图啥
    wuwukai007
    wuwukai007
    OP
    Dec 27, 2020
    6
    @roundgis 有一个类似产品 ID 的 字段,和创建时间可以锁定唯一,
    notejava
    notejava
    Dec 27, 2020
    7
    重新生成分布式 ID,再将相关联表的 ID 离线重新绑定。
    xiaofan2
    xiaofan2
    Dec 27, 2020❤️2
    8
    大家都是数据量太大了做拆分 你这反而给他合并起来了 这就是传说中的分久必合?
    wuwukai007
    wuwukai007
    OP
    Dec 27, 2020
    9
    @xiaofan2 上面要求,硬着头皮干呗。
    loading
    loading
    Dec 27, 2020 via Android
    10
    前面加一位不就好了
    例如
    100000 数 012345
    200000 字 012345
    yulitian888
    yulitian888
    Dec 27, 2020
    11
    @wuwukai007 不管多少张表,在不借助其它工具的情况下,操作基本只考虑一种 sql 句式了
    insert into 目标表 select 字段 1,字段 2... from 源表
    然后,加一个变量进去很复杂?
    insert into 目标表 select 前缀+字段 1,字段 2... from 源表
    表再多也不过就是把前缀做成变量而已。用工具不是一样道理吗,将一个如上查询结果集作为导出范围,一模一样啊
    wa8n
    wa8n
    Dec 27, 2020 via iPhone
    12
    自己写工具,合并表时生成新的 id 同时更新关联 id 。话说之前帮别人写了个工具,工具写完人联系不上了😂
    opengps
    opengps
    Dec 27, 2020❤️1
    13
    你们最初拆分的时候就不合理,应当用不一样的起始种子和步长,现在要合并,就直接按照库做分段吧,比如 A 库占用 1-100000,B 库占用 10001-20000,这样来融合
    alonehat
    alonehat
    Dec 27, 2020
    14
    是都从 1 开始自增的?有关联关系吗,没有的话直接数据库对拷或者写个批量插入工具不插 ID 继续自增就是了;有关联关系的话那考虑到关联也只能新加几个个字段区分,改成组合外键
    mmdsun
    mmdsun
    Dec 27, 2020 via Android
    15
    批量 insert 不插入 ID 字段不就可以了么。

    难道说表关联也是用的自增 ID ?
    elintwenty
    elintwenty
    Dec 27, 2020
    16
    这个问题难道不是先要看有没有关联的情况吗?没有关联就随意处理了
    fox0001
    fox0001
    Dec 27, 2020 via Android
    17
    建立新库,新增两个字段:
    1 )新建新的主键字段,标记数据唯一。
    2 )新建机器编号字段,标记数据来自哪个机器。

    这样,涉及关联的话,就用旧 ID 与机器编号去关联现有数据
    mingl0280
    mingl0280
    Dec 27, 2020
    18
    并库不并表,表加前缀。
    we3613040
    we3613040
    Dec 28, 2020
    19
    连表都合并了?那当初为啥要拆。。。。。
    rSP0rcaA9K11Rjsz
    rSP0rcaA9K11Rjsz
    Dec 28, 2020
    20
    @wuwukai007 你有没有考虑过这么大的数据量合并完了以后,你的服务还有可用性吗?
    WaldenHorizon
    WaldenHorizon
    Dec 28, 2020
    21
    上面要求?兄弟这种不合理的要求一定要据理力争啊,到时候查询扛不住再分库分表你不是白干了
    wuwukai007
    wuwukai007
    OP
    Dec 28, 2020
    22
    @nano91 @wangritian 之前是分库+ 分表,发现 分表就可以满足了,现在调整成 把多个库 合并,在分表。
    prodcd
    prodcd
    Dec 28, 2020
    23
    新建一个表,使用新的自增 id,增加 2 个字段,old_server 、old_id 备用,等啥事都没有了可以考虑删掉

    不过你这需求真奇葩。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2565 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 14:48 · PVG 22:48 · LAX 06:48 · JFK 09:48
    ♥ Do have faith in what you're doing.