网上有不少关于 mysql 数据库服务器的数据同步文章,其实只有二位朋友发表的文章,其他都是转抄。
而这些文章中,仅对数据同步过程的操作作了一个记录,而没有把操作方法,原理与一些过程中出现的问题说明清楚。
因为工作需要,我公司需要对美国服务器上的 mysql
数据库同步到香港服务器上,仅对部分业务相关表进行同步,而同时又需要把香港服务器上的产品数据同步到美国服务器上,这是同一个数据库,不同表
table 的双向同步,我在设置过程中,参考了网上的中文文章与 msql.com 网站上的在线文档,多次成败,也算是把 mysql
的这样同步搞个明白。
下面就是一些记录文章,希望可以说明一些内在原理,一些出错现象与处理方法。
mysql 的数据同步,在 mysql 官方网站文档上,叫 replication 字面是重作的意思,意译就是同步了。
其实,mysql 的同步,并不是使用同步 sync 这个单词而是用重作 replication ,很准确表明了 mysql
数据库操作的实质,是作同样的操作,或叫重作同样的操作,以保持主数据库服务器 master 与 从属服务器 slave
之样的数据保持一致。replication 就是有重复,重作的意思。
mysql 为了实现 replication 必须打开 bin-log 项,也是打开二进制的 mysql 日志记录选项。
mysql 的 bin log 二进制日志,可以记录所有影响到数据库表中存储记录内容的 sql 操作,如 insert /
update / delete 操作,而不记录 select
这样的操作。因此,我们可以通过二进制日志把某一时间段内丢失的数据可以恢复到数据库中,(
如果二进制日志中记录的日志项,包涵数据库表中所有数据,那么,就可以恢复本地数据库的全部数据了 )
上面同步的单词是 synchronization ,呵呵简写 sync ,也是 linux 下一个重要操作
下面的官方文档,说明如何安装与设置 mysql 同步操作,当然,英文版
http://dev.mysql.com/doc/mysql/en/Replication_HOWTO.html
现在,我们用中文复述一下过程
1. 首先,你应该有两个或两个以上的 mysql 数据库服务器,版本最好是在 3.3 以上 (
当然啦,两个服务器不一定是两台机器,一台机器上安装两个 mysql 服务是可以的,同时,如果你对 mysql replication
原理十分精通的话,你甚至可以在一个 mysql 服务的两个不同数据库 database 之间作同步,看有没有需要了)
说明: 这两个服务器一般设置一个为 主服务器,或叫源服务器, master mysql server, 另一台或其他多台就是
replication slave 同步从服务器了。一台 slave 与多台 slave 设置方法是一样的,这样你就可以作类似数据库集群了
2. 设置可访问 mysql 帐号,操作以英文为准
说明: 2.1 mysql 帐号一般设置为限定 ip 访问,以保障安全性
2.2 mysql 帐号一般在 master 与 slave 设置为相同帐号,同时是远程可访问
2.3 特别注意,如果你用 linux / unix 操作系统,那一定要注意一下防火墙 firewall
有没有限制 mysql 远程访问,如果是,最好是打开远程访问端口,并作好访问 ip 限制
2.4 由于 my.cnf 中要明文存储 mysql 帐号密码,请注意保护 my.cnf 不让其他用户访问到
( 看来要向 mysql 说明下以后用密码存 passwd )
3. 第三步,当然是设置两个服务器要同步的数据库为同样的数据库了
这里有一些技巧,包括 mysql 的 sql 指令说明下
3.1 方法之一,就是英文说明中说的,先锁定数据库读写功能 ( 其实最好是停止 mysqld 服务,再作备份) 然后用 tar 备份数据库目录,转到 slave 服务器相同数据目录中
3.2 方法之二,使用 mysql studio 这样的实用工具,直接使用 mysql studio 的 backup database 工具把数据库同步
3.3 以上两种方法都是 master 数据库中有不少数据记录,按上两 种方法得到 master 与 slave
有相同数据库与数据记录。 而第三种方法,则是适合于新建数据库的情况,特别适合于 master 与 slave 在 my.cnf 已经设置好
replication 关系 (但 未指定 database 同步数据库 ) 的情况: 这就是使用 mysql 的 sql 语句 load
table from master 与 load data from master;
load table from master 可以从 master 数据库把表结构复制到 slave 数据库中,这样可以建立同步的表。
load data from master 是从 master 数据库把数据导入到 slave 数据表中,条件是 master 从一开始安装运行就使用了 bin-log 参数而保存有二进制日志
4. 接下来就是配置 master 与 slave 的 my.cnf 文件,使得 replcation 能有合适的启动参数以支持数据同步
技巧: 如果你使用 win2k 的 mysql 那么,你可以下载 mysql.com 出的官方 mysql
administrator 实用程序,直接在 mysql administrator 中即可配置 master 与 slave
,同时也可以配置 query-cache 哟