这几天在网上查找了许多资料,几乎全部是雷同的信息,经过一番测试作出如下结论,经过本人测试。
主从单向数据同步
1、数据库版本
主数据库/从数据库 版本号5.0.24a
2、分别修改(主从)mysql安装目录-根目录下的配置文件【my.ini】
3、我的测试环境是这样的
主数据库机器ip地址:192.168.1.120
从数据库机器ip地址:192.168.1.119
4、主/从机器中的配置细节如下
0)、start.
1)、按照官方的提法主/从数据库配置文件my.ini中的server-id = (num)的值不能相同即可。
2)、修改主数据库配置文件my.ini文件找到[mysqld]标识符(建议在添加以下代码之前首先创建号要同步的数据库),键入以下代码
log-bin=mysql-testsyn-bin #--主库二进制日志文件名的前缀(会在data目录中出现)
binlog-do-db=syntest #--要同步的数据库
server-id = 1 #--serverid和从库不同即可
3)、步骤2)执行完毕后重启mysql服务,root用户登录执行以下命令
1、创建用户syntest.拥有replication slave权限
grant replication slave on *.* to "syntest"@"192.168.1.%" identified by 'syntest' with grant option;
2、在设置syntest用户 增删改查,等权限。
4)、查看主库状态,使用mysql自带命令行
show master status;
+---------------------------------+----------+------------------+------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------------------+----------+------------------+------------------------+
| mysql-testsyn-bin.000003 | 640 | syntest | |
+---------------------------------+----------+------------------+------------------------+
1 row in set (0.01 sec)
根据提示可以看出,
file=表示同步使用的索引文件(文件后最默认是从000001开始)
position=偏移量
Binlog_Do_DB=备份的数据库
Binlog_Ignore_DB=忽略的数据库
经过测试、如果从步骤 2)-3)配置完后当执行步骤4)时如果没有结果说明配置失败.
5)、修改从数据库配置文件my.ini文件找到[mysqld]标识符(建议在添加以下代码之前首先创建号要同步的数据库),键入以下代码
server-id = 2 #--serverid和主库不同即可
master-host = 192.168.1.120 #--主机ip地址
master-user = syntest #--主机登录用户名
master-password = syntest #--主机登录密码
master-port = 3306 #--主机端口
master-connect-retry = 5 #--重试间隔时间(秒)
replicate-do-db = syntest #--同步db
6)、步骤5)执行完毕后重启mysql服务,root用户登录执行命令
show SLAVE status;
7)、执行以下代码
stop slave;
start slave;
8)、在主数据库中创建一张表(需要使用代码的方式创建表),在看从数据库.
9)、end.
5、如何正确的使用同步,以下是测试到的步骤(同仁如有其它测试结果请一并贴出来
)
1)、主从配置完后需要测试
1、查看data目录下的(*.err)文件如果没有出现[ERROR]字符说明通信成功,从数据库中data目录.
2、主从库中分别创建一张一模一样的表,注意第一次创建测试是否已通信成功,不能使用MySQL-Front等工具创建,不吃这一套;得用代码创建.
3、与步骤2同时在写一个insert添加语句执行。
4、查看以上2-3步骤皆为在主库中执行,于此同时查看从书库,如果有一模一样的数据则说明通信成功.
2)、主/从双方的库中表保持一致,此时创建一张“临时表”作为测试是否通信.
在保持一致的同时从库中表的内容不能与主表中的内容不一致
【
例如:test表在主从中同时出现,id字段将从1开始,地址从表中已经有了一条记录,说明占用了id为1值,此时在主库中表test添加一条记录
id同时也是1,这时就通信失败了,由于数据库表字段唯一标识因此导致通信失败,则1、删除从表中的记录;2、必须重启服务,才能挽救通信.
】
3)、如果主从库中的配置---配置完成在启动mysql服务之前先删除data目录中的日志等文件,除了“目录”,“ibdata1”文件外其余全部删除.
4)、在通信测试未成功之前不能使用工具创建表,添加记录等操作,第一次必须使用代码的形式来创建执行;通信成功后方可使用工具执行.
5)、一旦通信成功切忌双方中data目录中的文件不能随意打开,原因:“由于mysql服务一旦启动则会自动根据设定的时间通信,如果打开索引等文件则就占用了IO流操作,固因此
服务会自动终止通信(需要重启才能拯救).
6、同步实现大概的流程(同仁如有其它不同的看法与流程图,敬请贴出来交流
)
1、主/从双方修改配置文件,通过某种通信两台机器知道谁是“主”,谁是“从”.
2、查找“主”方是否配置成功,使用代码 show MASTER status;所返回的结果中记录了关于同步时所使用到的索引文件;根据log-bin=[文件前缀名称].00001,每重启一次则后面的编号会自动加一.
3、“从”数据库机器mysql服务启动时根据配置信息找到主数据库,将会根据“主” show master status中的file字段信息,生成4个文件分别如下:
第一次配置成功启动:
*-relay-bin.000001(*号代表本机的“计算机名称”)
*-relay-bin.index
master.info
relay-log.info
第二次启动
*-relay-bin.000001后面的编号会变
以上提到的文件作用流程如下:
1、“从”服务器启动mysql服务时,根据配置文件信息找到“主”服务器,根据 show master status 中的file字段信息首先创建master.info文件,记录了关于
链接“主”服务器的参数配置信息,其中最主要的一条是:“以字段file的值”记录,
2、其次创建relay-log.info文件,其中主要是记录以master.info文件中“以字段file的值”的一个关联.于此同时记录该文件与*-relay-bin.index文件的关联
3、再次通过文件*-relay-bin.index中的记录在创建具体操作文件就是:(*-relay-bin.000001)索引文件.
4、每次通信会将“主”服务器上的索引文件内容当下来存放在*-relay-bin.00000num索引文件中,同时,执行“主”最近更新的数据,到“从”服务器中.
4、最简单的理解就是:
1、“主”服务器启动后生成索引文件,用于记录对数据库更新的sql语句.
2、“从”服务器启动后会根据“主”服务器上的索引文件生成本地索引文件,用于记录从“主”服务器上当下来的数据.
3、“从”服务器根据设定的时间间隔从“主”服务器上抓取数据,然后在执行,最后成为本地数据.
5、如图:
流程图 /查看“流程图”目录.
... ...
本流程图是根据以上实现步骤的实现,总结出自己对数据同步的流程图,同志们方可参考,如有不对的地方,请与我来信(594131528@qq.com),如果可以的话,提出修改建议等。。。谢谢合作。
感兴趣者请查看附件、其中包含了本人的理解,在测试中遇到了那些问题,等等。。。
下载次数: 36
大小: 60.2 KB
分享到:
2009-12-20 23:23
浏览 1218
论坛回复 / 浏览 (1 / 2464)
分类:数据库
评论
1 楼
MrPengPeng
2010-06-30
写的 太详细了 !太棒了 !连流程图都有 ! 赞