开发者社区> 问答> 正文

做双向同步的话,需不需要改自增ID的步进?

请问,如果做双向同步,两边的数据库都在写入的话,那么自增ID会不会冲突,需不需要改自增ID的步进,也就是 auto_increment_increment 和 auto_increment_offset 这两个参数?

原提问者Github 用户 dmanbu

展开
收起
云上静思 2023-06-14 23:17:00 75 0
4 条回答
写回答
取消 提交回答
  • 会冲突,可以自己实现。我们用的是基于redis的UUID保证不冲突但是需要更改自增ID,但低版本的 mysql 有更改步进后,生成的自增ID重复的bug 这个Bug在 5.5.65, 5.6.45, 5.7.27, 8.0.17 版本被修复

    原回答者Github用户 BaliStarDUT

    2023-06-16 15:19:04
    赞同 展开评论 打赏
  • 如果您需要进行双向同步,那么自增ID的设置可能会影响数据同步的结果。自增ID的步进值是由 MySQL 中的两个系统变量 auto_increment_increment 和 auto_increment_offset 控制的。如果您需要在两个不同的 MySQL 实例之间进行数据同步,而双方都会写入数据,那么在同步过程中可能会出现自增ID冲突的问题,导致数据同步失败。

    解决这个问题的最常见做法是重新设置 auto_increment_increment 和 auto_increment_offset。方式如下:

    1. 在同步源 MySQL 实例中,查看当前的 auto_increment_increment 和 auto_increment_offset 的值,命令如下:
    mysql> SHOW VARIABLES LIKE 'auto_inc%';
    
    1. 计算一个新的 auto_increment_increment 和 auto_increment_offset 的组合值,以确保在不同数据库之间的数据记录自增ID不会出现冲突。

    举例来说,如果您要将目标数据库的自增步长设置为 2,偏移量为 1,那么您可以使用以下命令:

    mysql> SET @@auto_increment_increment=2;
    mysql> SET @@auto_increment_offset=1;
    
    1. 确认将新的 auto_increment_increment 和 auto_increment_offset 参数值应用。

    2. 在目标 MySQL 实例中设置相同的 auto_increment_increment 和 auto_increment_offset 的值。

    这样,您就可以通过重新设置自增ID参数值,避免在使用 MySQL 数据库之间进行双向数据同步时出现自增ID冲突的问题。需要注意的是,对于已经存在的数据表中,如果已经有自增ID被使用过,那么这个过程需要慎重处理,确保修改自增ID参数不会影响到已有的数据记录。

    2023-06-15 08:40:32
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    两个数据库都在写入数据,并且您希望进行双向同步,那么自增ID可能会出现冲突。这是因为自增ID是在每个数据库中独立生成的,而不是跨数据库共享的。因此,当您在双向同步期间将数据插入两个数据库中时,可能会导致自增ID冲突。

    为了解决这个问题,您可以尝试使用MySQL提供的auto_increment_increment和auto_increment_offset参数。这些参数用于在多个MySQL实例之间分配自增ID范围。通过正确配置这些参数,您可以确保每个MySQL实例都分配了唯一的自增ID范围,从而避免自增ID冲突。

    具体来说,auto_increment_increment参数指定自增ID的增量值,而auto_increment_offset参数指定起始值。例如,如果您有两个MySQL实例,您可以将auto_increment_increment设置为2,并将auto_increment_offset设置为1和2,这样每个MySQL实例都会分配奇偶数自增ID范围,从而避免冲突。

    需要注意的是,您需要确保在双向同步期间正确配置这些参数,并且在每个MySQL实例上都使用相同的参数值。否则,可能会导致自增ID冲突。

    除了使用auto_increment_increment和auto_increment_offset之外,您还可以尝试其他方法来避免自增ID冲突,

    2023-06-15 08:06:20
    赞同 展开评论 打赏
  • 如果做双向同步,两边的数据库都在写入,那么会出现自增ID冲突的情况。需要修改auto_increment_increment和auto_increment_offset参数来避免冲突。auto_increment_increment参数表示自增ID的步进,auto_increment_offset表示自增ID的初始值。在双向同步的情况下,每个数据库的auto_increment_increment必须相同,而auto_increment_offset必须不同,以确保每个库分配的ID是唯一的且不会重叠。另外需要注意的是,如果使用多个从库进行双向同步,需要对每个从库进行相应的配置,以保证自增ID的唯一性。

    2023-06-15 08:05:29
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载