http://v2ex.com/t/299994 两边都发一下,希望从大家那里学到更好的方法。
各位好,最近又面临 MySQL 异地同步问题,想了一个主意,不知道大家有没有更好的办法。
MySQL,MyISAM 引擎,中美欧三地机房 数据不要求实时,有一两天延时也没关系,服务器半夜可停机。 <- 这些前提很重要
美国放主服务器 中欧放从服务器 主从复制 效果好的时候一切 OK,但你懂的,经常断,修复起来很麻烦。
比如说 从主服务器 copy Binlog 到 从服务器然后再同步,类似这样,但感觉太复杂,不方便自动化: http://blog.csdn.net/jesseyoung/article/details/37106035
http://jojodiff.sourceforge.net
因为 MyISAM 引擎本质上就是文件,所以我想用 diff 的方式来做:
a) 主服务器上 copy 一份原始数据库 base 文件 (table.FRM, table.MYD, table.MYI),并传递到从服务器
b) 一天后停主服务器,跟原始文件生成 patch 文件
c) 传递 patch 到从服务器,跟原始文件 merge,生成新的数据库文件,重启 mysql 服务
d) 以后每天半夜同样处理
e) 视 patch 文件大小,可以一个月一次或几个月一次更新 base 文件
这一切可以通过 bash 和 Cron 自动执行,简单可靠,只要主服务器不出错,从服务器没有出错的理由。主服务器可以用 Digital Ocean 的备份服务。
大家讨论一下这个方法有没有什么明显问题,或者有什么更可靠的简单方法。方法要简单,类似这种高雅范的我真有点吃不消: https://github.com/alibaba/otter
谢谢!