用 mysql 做双向同步 出现了一点问题 具体情况如下
A 机 和 B机 做双向同步
当 A机更新数据时 B机会同步更新
但是 当 断网了 AB机 不能连同的情况下 分别在 A机 和 B机 操作数据库
过一会 网络恢复 ,在断网情况下 操作的数据 不会同步到后来调了半天 出现了另一种情况 就是 断网后操作的数据  A机 同步到B机,B机也同步到了A机 ,等于说是对调了,如果我操作的是同一条数据,这样对调了 便出错了 我希望能保留最后更新的数据.A B机的 my.cnf 配置分别如下 A机
[mysqld]
concurrent_insert = 1#
server-id = 1
log-bin =mysqlbinlog
binlog_do_db = 数据库名称
binlog_ignore_db = mysql
sync_binlog =1
master-host=192.168.0.20
master-user=数据库访问账号
master-password=数据库访问密码
master-port=3306
master-connect-retry=60
replicate-do-db=数据库名称
slave-skip-errors=all
#B机[mysqld]
concurrent_insert = 1#
server-id = 2
log-bin =mysqlbinlog
binlog_do_db = 数据库名称
binlog_ignore_db = mysql
sync_binlog =1
master-host=192.168.0.21
master-user=数据库访问账号
master-password=数据库访问密码
master-port=3306
master-connect-retry=60
replicate-do-db=数据库名称
slave-skip-errors=all
#不知道是哪里设置有问题了 大家帮忙看下 

解决方案 »

  1.   

    你这种是“master <---> master”的模式,那肯定是会出现A机同步到B机,B机也同步到了A机。
      

  2.   

    a:master-host=192.168.0.20
    b:master-host=192.168.0.21 ?
    a my.ini
    master-host=192.168.0.21b my.ini
    master-host=192.168.0.20
      

  3.   

    双向同步,这个并不是MYSQL的标准功能。其中关键的就是同一记录到底以谁为准?
      

  4.   

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

  5.   

    sorry 楼上的正解Q:当设置双向复制时我应该知道发出那些语句?
    A:MySQL复制目前不支持主服务器和从服务器之间的任何锁定协议来保证分布式(跨服务器)更新的原子性。换句话说,这样做是可能的:客户A根据协作-主服务器1更新,同时,在它传给协作-主服务器2之前,客户B能够根据协作-主服务器2更新,这样客户A的更新与它在协作-主服务器1的更新不同。这样,当客户A根据协作-主服务器2更新时,它产生的表与在协作-主服务器1上的不同,即使所有根据协作-主服务器2的更新已经传过来。这意味着,在双向复制关系中,你不应该把两个服务器串连在一起,除非你确信任何顺序的更新是安全的,或者除非你在客户端代码中注意怎样避免更新顺序错误。
    你还必须认识到从更新角度,双向复制实际上并不能显著地提高性能(或者根本不能提高性能)。两个服务器都需要做相同数量的更新,如同在一个服务器做的那样。唯一的差别是锁竞争要少,这因为源于另一个服务器的更新在一个从线程中序列化。即使这个益处可能被网络延迟抵消。
      

  6.   

    结贴给分  感谢几位的帮助 呵呵
    现在问题解决一半了 通过上面的方法 增加记录没有问题了,不会有ID冲突的情况,但是修改数据还会出现问题。所幸我这边的修改的关键是 用户的余额  在sql 里面都是 用 + - 来实现的 所以这个问题就不是问题了 两边各做各的 但是归到一起 结果是不变的 
    但是 如果是 set 字段 = 值 这样 就不行了  set 字段=字段+1 这样就不会有问题