mysql 复杂架构探讨3地(不同的地区)的msyql server。
a(地方服务器)  b(地方服务器)  c(中心服务器)简化问题 ,a b c 3地的mysql都有相同的库 userdb ,都有同结构的表user
其中c的数据是集中a b 的数据。 简单说 c 的user表是a 的user数据 + c 的user数据现在要求的是 做到一点 , a和b的user表数据是没有联系的,彼此都看不到哦。但c 的user是a b的相加,
另外还有苛刻要求,  a 的user表的任何改动(增 删 减)都会实时同步到c的那个表, b 的user表的任何改动(增 删 减)都会实时同步到c的那个表。  反过来,  c 的user表的任何改动(增 删 减)都会实时同步到a 或 b的那个表。从mysql复制技术来讲,也就是 a <--->c 主主复制     b <--->c 主主复制
请问这个能否做到吗 ?? (如果或者用集群实现也可以的)

解决方案 »

  1.   

    用复制比较麻烦,当然你可以把C上的userdb 与A上另建一个 AC库上的userdb 进行同步,在A.userdb  上创建触发器更新AC.userdb 。另外创建事件每分钟根据AC.userdb  更新一下 A.userdb 
      

  2.   

    实际中的一个方案:A,B,C通过某个消息工具连接,比如我这一个实例中的MQseries, 任何改动均由本机上的一个进程监视表的变化,比如每分钟检查一次,然后通过MQseries 做 spoolout, spoolin 进行消息传递进行然后利用脚本处理。注意一下对信号的区别,以防止死循环。
      

  3.   

    楼上想的跟我一样 可惜验证是失败的我把楼上的想法实现 (a  b   c上有3个库(c ac bc ))
    在c机器上
    ac库《--》a机器 主主
    bc《--》b机器 主主c的库 有一个user 是集中ac 和bc 的user表数据。
    ac的user ----c用触发器。 
    以及事件通知。  -------------可维护性太差 。c机器的数据修改返回到a b 机器好麻烦。容易造成触发器循环。
    从楼上启发 得到我的解决方法
    (a  b   c上有3个库(c ac bc ))
    在c机器上
    ac库《--》a机器 主主
    bc《--》b机器 主主在c机器的c中建立view ,这个view就是 uinon all ac 和bc 的 这样基本就不会动java或.net 任何东西。(楼上的实现过于复杂)
     
      

  4.   

    mysql的视图无法解决一个重大问题。insert AC(name) values(546);
    insert BC(name) values(676);
    update user set name=909 where id=1;------------失败 ,如果是但表的视图是ok ,但是多个表union 过来的是失败的
      

  5.   

    则中的解放方案 
    如果遇到  insert update delete view这样来处理直接对AC BC进行操作
    也就是这个意思
    insert user  做2次(insert ac insert bc)
    其他也一样