MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 9708|回复: 4
打印 上一主题 下一主题

不同地域服务器MySQL数据库之间更新数据同步方案讨论

[复制链接]
跳转到指定楼层
1#
发表于 2012-5-16 11:21:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
出处:mysqlpub.com

一个朋友的问题。
环境:
A(windows 2008 core r2+mysql 5.6) 主要服务器,会有更新数据。
B(windows 2008 core r2+mysql 5.6) 分发服务器,把A中的更新数据同步过来,再分发给其他服务器。
现在的问题是如何把A中的更新(包含DB数据和磁盘文件),同步到B中来。

需求:
1、同步增量数据,可以是网络也可以是离线方式
2、保证数据一致性
3、有数据库数据+实际文件,也就是数据库中的数据库可能还会对应服务上的一些文件,要一起同步。
4、主要是更新几个表,做增量更新,现在的问题是怎么样可以计算时间,把想要时间内的导出,导入时在原有的基础上增加?
5、只增量相关的几个表,是要在一个系统的数据库中把近期发布的信息导出,更新到另一个数据库中,有两种方式,一种是只导和文章标题 、内容等信息相关的表,如果有其它的需要,可以选择同时导出其它的表,就是导出时可以选择。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏1 分享淘帖 顶 踩
2#
 楼主| 发表于 2012-5-16 11:25:54 | 只看该作者
我的建议是:

方案一
如果A与B之间有网络互通,哪怕就是每天或每周的限时互通,那么就可以用MySQL同步机制(MySQL Replication )实现,方便快捷,有数据库来保证数据的一致性。 把B配置成A的slave机器,联机一次就同步一次,自动同步,或手动start slave。


如果A、B之间不能有网络的互通,且在异地,只能用中间介质传递,那么大体思路是:主要分清楚那些是增加(如多表多数据)即可,记录下,导入到B中。
方案二
具体可用mysqldump加where参数,导出更新的数据 + 关联的文件,如.
mysqldump --where=name    Dump only selected records. Quotes are mandatory.

方案三
如果就分不出来数据表中的数据那些是更新的,那么就用触发器,在数据库中建立几个触发器,把需要同步的表数据触发到一个新表中,每次都只导出这个触发后的表,然后导入B,导入时也可以选择性导入。

  1. DELIMITER $
  2. DROP TRIGGER /*!50032 IF EXISTS */ `ha`.`tr_ttt`$
  3. CREATE
  4.     /*!50017 DEFINER = 'root'@'%' */
  5.     TRIGGER `tr_ttt` BEFORE INSERT ON `content`
  6.     FOR EACH ROW BEGIN
  7.      IF ( new.a IS NOT NULL ) THEN
  8.      INSERT INTO b(a) VALUES(new.a);
  9.      END IF;
  10. END;
  11. $
复制代码
当然如果表多更新多,整个机制是需要脚本配合...

方案四
如果还考虑表结构变化和数据变化,或什么都不想考虑,A和B就几乎是完全一样,那么就用binlog同步。
把A库中的binlog复制下来,直接拿到B中导入即可。
具体,
A上,flush logs;会产生一个新的binlog文件(记录从此刻开始以后的更新),你就可以放心的把从这个新文件之前的binlog拷贝下来,到上次的记录点(要分清楚,不然会有重复导入)。
B上,导入 mysql -uxxx -pxxx DB < binlog(A上拷贝出来的)   (至于MySQL的binlog在那里长什么样查查资料即可)
好处:从目前应用场景来看,比较符合,而且这样做出错率少,操作简单,适应性强(包括一切A上的变更)。



3#
发表于 2012-6-20 22:56:08 | 只看该作者
1. 想要实现的功能 比如一台服务器上面有A和B两个数据库   每个数据库下面有两种类型的表
比如:
a_jia_xxx
a_yi_xxx
比如A经常更新。。。B同步A  (即B的数据从A中来)
  但是B只需要同步A库下面的jia前缀的表(yi的不要)。。。
请教大家如何实现这个功能。。
2.能不能实现直接镜像。。。。  比如B站点的jia表其实自己是没有的。。直接用A站点的jia表。这个可以省下一倍的数据空间。。。。。。。。
3.如果A跟B不在一个服务器。。这两种功能又要如何实现??
希望能通过phpmyadmin实现这些功能。。。。菜鸟不懂命令。。只能图形管理工具。。。
4#
 楼主| 发表于 2012-6-21 10:51:36 | 只看该作者
你可以参考一下 楼上例子 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-5 19:21 , Processed in 0.072429 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表