mysql数据库同步详解
同步介绍:
MySQL 的数据同步,在MySQL 官方网站文档上,叫Replication 字面是重作的意思,意译就是同步了。其实,MySQL 的同步,并不是使用同步sync 这个单词而是用重作replication,很准确表明了MySQL 数据库操作的实质,是作同样的操作,或叫重作同样的操作,以保持主数据库服务器master 与 从属服务器slave 之样的数据保持一致。replication 就是有重复,重作的意思。
同步原理:
MySQL 为了实现replication 必须打开bin-log 项,也是打开二进制的MySQL 日志记录选项。MySQL 的bin log 二进制日志,可以记录所有影响到数据库表中存储记录内容的sql 操作,如insert / update / delete 操作,而不记录select 这样的操作。因此,我们可以通过二进制日志把某一时间段内丢失的数据可以恢复到数据库中(如果二进制日志中记录的日志项,包涵数据库表中所有数据,那么, 就可以恢复本地数据库的全部数据了)。 而这个二进制日志,如果用作远程数据库恢复,那就是replication 了。这就是使用replication 而不用sync 的原因。这也是为什么要设置bin-log = 这个选项的原因。
在同步过程中,最重要的同步参照物,就是同步使用那一个二进制日志文件,从那一条记录开始同步。
同步过程:
首先,你应该有两个或两个以上的MySQL 数据库服务器,版本最好是在3.3 以上 (当然,两个服务器不一定是两台机器,一台机器上安装两个MySQL 服务是可以的,同时,如果你对MySQL replication 原理十分精通的话,你甚至可以在一个MySQL 服务的两个不同数据库database 之间作同步,看有没有需要了)说明: 这两个服务器一般设置一个为主服务器,或叫源服务器,master mysql server, 另一台或其他多台就是replication slave 同步从服务器了。一台slave 与多台slave 设置方法是一样的,这样你就可以作类似数据库集群了。
设置可访问MySQL 帐号,操作以英文为准。
MySQL 帐号一般设置为限定IP 访问,以保障安全性
MySQL 帐号一般在master 与slave 设置为相同帐号,同时是远程可访问
特别注意,如果你用Linux / Unix 操作系统,那一定要注意一下防火墙firewall 有没有限制MySQL 远程访问,如果是,最好是打开远程访问端口,并作好访问IP 限制
由于my.cnf 中要明文存储MySQL 帐号密码,请注意保护my.cnf 不让其他用户访问到(看来要向MySQL 说明下以后用密码存passwd)。
第三步,当然是设置两个服务器要同步的数据库为同样的数据库了。
这里有一些技巧,包括mysql 的sql 指令说明下。
方法之一,就是英文说明中说的,先锁定数据库读写功能( 其实最好是停止mysqld 服务,再作备份) 然后用tar 备份数据库目录,转到slave 服务器相同数据目录中。
方法之二,使用mysql studio 这样的实用工具,直接使用mysql studio 的backup database 工具把数据库同步
以上两种方法都是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 参数而保存有二进制日志
接下来就是配置master 与slave 的my.cnf 文件,使得replcation 能有合适的启动参数以支持数据同步
技巧: 如果你使用win2k 的mysql 那么,你可以下载mysql.com 出的官方mysql administrator 实用程序,直接在mysql administrator 中即可配置master 与slave ,同时也可以配置query-cache 。
在master 的my.cnf(如果是win32 那就是my.ini)增加
[mysqld]
log-bin =
server-id=1
注意,上面的log-bin = 中的 等号= 是不可少的。
在slave 的my.cnf 修改
[mysqld]
server-id=2 # 如果有多个slave 就改为不重复的id 就好,在mysql 4.1 中,这个已经取消了
master-host=10.10.10.22
master-user=backup #同步用户帐号
master-password=1234
master-port=3306
master-connect-retry=60 #预设重试间隔60秒
replicate-do-db=test # 告诉slave只做test 数据库的更新
bin-log =
检查master 与slave 配置状态,使用show master status; 与show slave status; 这两个SQL 指令即可在master 与slave 查看配置状态。这里有两个状态变量十分重要
mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+----
相关新闻>>
- 发表评论
-
- 最新评论 更多>>