mysql数据库双向复制的疑难问题,现在双向复制简单的配置已经可以了,不论从A机器插入,修改,删除数据,B机器会相应改变,反过来也一样。
但是现在如果要在A、B机器上同时操作数据,还有以下问题比较难处理:
1.自动ID值的问题,当同时操作时,会有自动增长ID值相冲突,导致双向复制失败;
2.比如单号编码的问题,跟ID自动增长类似,插入数据时会有冲突。
希望高手帮忙解决,不胜感谢!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    双向复制您需要修改下面的两个值,这样就能避免主键冲突,您试一试添加A B机的 my.cnf 配置分别如下,这样A机一直使用奇数,B机一直使用偶数的auto_increment A机 
    [mysqld] 
    auto_increment_increment=1 
    auto_increment_offset=2 B机 
    [mysqld] 
    auto_increment_increment=2 
    auto_increment_offset=2
      

  2.   

    2.比如单号编码的问题,跟ID自动增长类似,插入数据时会有冲突。这个您或许可以使用uuid生成,就不会冲突了; 您需要先在mysql配置文件中修改binlog的格式为ROW 或者 MIXED,默认STATEMENT复制uuid()会有问题的
    binlog-format=ROW
      

  3.   

    楼上方法应该可以,设置主键为 UUID, 或者设置成复合主键,一个为 (1,UUID) ,另一个为 (2,UUID)
      

  4.   

    我的mysql版本是version4的,加了auto_increment_increment=1,服务启不来;
    另外UUID那东西不大可行,因为这个标识没有任何意义,不适宜做单号呢
      

  5.   

    这样设置也是用重复的,正确的应该这样设置:[mysqld]
    auto_increment_increment=2
    auto_increment_offset=1B机
    [mysqld]
    auto_increment_increment=2
    auto_increment_offset=2
      

  6.   

    那要不这样折中处理吧
    建立表后(字段用bigint类型),设置A:
    alter table tb_name auto_increment=1;B:
    alter table tb_name auto_increment=100000000000;
      

  7.   


    sorry, 末学想当然的以为offset是步进值,多谢指教!
    auto_increment_offset determines the starting point for the AUTO_INCREMENT column value
    auto_increment_increment controls the interval between successive column values.