各位好,最近又面临 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
谢谢!
@livid 编辑器太难用
1
shoaly 2016-08-17 20:51:03 +08:00
既然都用 数据库文件了, 跟直接用 rsync 有区别么
|
2
zpvip OP @shoaly 有道理,不过可能还是有点点不一样。
如果用 rsync ,主服务器必须停机,复制一份数据库文件,然后再用 rsync 。 rsync 的时间应该比较长,直接用数据库文件要停机很久。 如果用 diff, 可以先停机,然后直接用数据库文件和 base 作比较, 这个生成的过程应该比较短。 |
3
jhaohai 2016-08-17 21:10:45 +08:00 via iPhone
找台网络连通性好的机器,三台机器通过 VPN 连到一个子网里,用 mysql 自带的主从复制
|
4
kingwkb 2016-08-17 21:25:04 +08:00 via iPhone
异地还是自己写同步数据逻辑比较好吧
|
5
wy315700 2016-08-17 21:29:11 +08:00
xtrabackup
|
7
zpvip OP |
8
ksupertu 2016-08-17 23:07:18 +08:00
关键字: 阿里巴巴
|
9
Marfal 2016-08-17 23:19:13 +08:00
关键词:阿里云
|
10
Livid MOD 用 innobackupex 的话 master 可以不用停机:
https://www.percona.com/doc/percona-xtrabackup/2.1/howtos/setting_up_replication.html |
11
zbz 2016-08-18 09:53:02 +08:00
binlog 不是挺好的么,断了就弄了一个脚本自动修
|
12
fearlesschen 2016-08-18 10:26:37 +08:00
Percona XtraDB Cluster
|
13
qq1242245799 2016-08-18 11:11:30 +08:00
我这边有个自营机房在香港,接入 cn2+pccw+九仓三线组的 bgp 带宽, q1821753741
|
14
wweir 2016-08-18 11:46:27 +08:00
个人感觉楼主的方法看起来很不 MySQL ,或许下面的方法可以好点。
做一个公用的备份仓库,勤备份(全、增)。 开异步复制,断了就让它断,拉备份重新接。 PS :为毛不用 innodb? |