Mysql 5.0正式的版本,我是在11月1号下的,好象从他网站上看10月24号就公布了,目前下的是5.015. Replicatons配置目前中文资料不多,主要是基于 4和3的一些配置方法。开始我也是参照这些资料配置的,不过后来发现总是不能同步。开始以为是人家写错了,或者自己没准确按照步骤执行,可后来检查多次发现的确没错。那到底怎么会事儿? 想来想去,唯一可能就是Mysql 5.0的配置方法有所不同,其实最好的方法还是去看Mysql 5.0自己的手册。网上已经有多篇关于这个的说明,这里不具体描述。以下是一些我找到的中文资源,如果有兴趣最好先看看中文的内容。附注(1,2)都是一些中文资源。 当然最好还是看Mysql自己的5.0说明文档第六章(附注 3)有专门介绍。实际Mysql 自己说明上讲的非常清楚该怎么配置,唯一问题是你是不是有耐心看完着一堆洋文。
如果你没耐性看完Mysql的手册,那么你就照着我下面列出的注意事项,参照中文步骤配置。我这里只记录一些5.0需要注意的内容,和我认为和以前版本有较大区别的地方。有些地方我也没完全搞明白,抱着能用就成的想法,也没具体深究,其实如果有工夫,真可以再自己看看。
1 最关键的,当然就是Slave的权限问题。 很多在3/4 上能配置起来可到了5以后怎么也配置不起来的主要问题,就是Slave的权限。 以前只 Grant file 权限是不够的,必须有管理权限。否则你怎么配置也一样不能复制,这个就是关键。 在配置Salve端的时候 一定要给连接用户赋管理员权限,这个权限与数据库权限不同。 GRANT SUPER,REPLICATION CLIENT,REPLICATION SLAVE,RELOAD ON *.* TO repl@"%" IDENTIFIED BY 'repl_pass'; 如果你只为好玩,哪给你个建议不管哪端都 Grant all,这样应该最保险。不过这个只是自己开发测试用的偷懒方法,如果你真打算当作应用来使用。哪还是老老实实的一个个权限赋。
2 如果Master 和 Slave是在2个网段的机器,那么实际上Master的 remote user应该不止 Slave哪个ip的user。这个具体是为什么大家可以自己象,我举个列子 Master : 192.168.1.3 , Slave : 10.145.1.2
那么在Master上不光要配置一个 backup@ 10.145.1.2 还需要配置一个 backup@192.168.1.1 ,而且这个backup@192.168.1.1需要Slave client 的权限。具体为什么可以自己想,我只说明我在实际配置中遇到的情况。
3 关于双向Replications 的问题。 这里需要说明的server-id ,对于使用 Replications 功能,server-id 不能是<2的id,反正手册上说0是不可以的,我试验也的确不成,最好是设置大点。我的做法是master从99开始计数。slave都是连续-1。使用Replications必须 Master机my.ini/my.conf上添加 log-bin 这个参数。如果你要自己指定日志名称可以 log-bin= /user/xxxxx/longname 或者 log-bin= c: logname。这里要说明的是在windows上 文件路径是要写成 c:logname,不能有\。
4 另外需要注意的就是binlog产生后,如何设置同步点的问题。由于mysql 只会在第一次设置my.ini/my.conf文件的时候读取默认mysqld段中replications信息。因此一但产生了master.info信息,那么以后每次读取同步点信息都是从这个文件里读取,你怎么改mysqld里的配置信息都没有。所以才需要mysql 命令 master chang to +相应变量修改来修改同步点信息。 master.info信息在 data目录下,我没试过linux下mysql 的实际文件产生位置,应该差不多。如果需要修改同步配置信息。2个方法。最省事情的方法就是停掉mysql 的服务,然后删除master.info和log信息文件。这样mysql再下次启动的时候会重新读取mysqld里的信息。当然这有个前提,replication 动作已经是成功的。否则如故master_log_file和master_log_pos等等信息不对,那么就算重新配置了,你还是需要用change master to 来修改。 第二个方法就是用change master to 来修改。这个修改动作都是在slave 机器上进行的。首先你需要用 slave stop 停掉slave 服务,然后是change master to ,最后slave start.
5 replication 的数据库需要指定,在master 机器上用 binlog-do-db= dbname 来指定,这个参数可以重复多个,来指定多个数据库的replication .在slave 上用replicate-do-db=dbname 来指定。
6 最后一个可能遇到的问题就是怎么把master 机器的数据库load 到slave上。据说最省事的方法是 load data from master。不过我实验N 次都以失败告终。当然我遇到的问题,可能不是配置问题,而是数据库本身的问题,因为根据报错信息,好象我原来用的数据库中表里字段存在没有设置默认信息的。总是导了一个表就over掉了。这里顺便说一下,mysql 推出了migration toolkit工具,不过我发现这个东西并不象他说的那么好。对于异构数据库要求比较严格,个别是表结构语法都要求比较严格。个人认为用处不大。 我load数据的方法很简单,使用mysql 自己的administrator 工具,直接备份,然后restore到slave上。这里需要注意的是,我发现mysql目前对他自己view支持的也不是非常完善,view 的确可以使用,但在restore的时候总会出些奇怪问题,如果用他的工具看view 的source 也是不完整的。我估计他的ddl还是不够完善,不过有总比没有强。
7 关于 mysql 的版本问题,mysql 5.0说明上指出,新版本并不完全兼容老版本的replication ,所以master/slave的 mysql版本选择,最好不要搞的不一样。少麻烦的方法就都装同一个版本。这样不需要考虑版本兼容问题。
最后要说的是replication 配置能一次 ok的可能性不大,肯定要多试几次。出了问题注意多看mysql 自己的services log 。个人感觉mysql administraotr 这个工具很不错。如果配置不成功 slave 的log上总会有Error提示你为什么的。Mysql replication 配置目前我也只是知道一些皮毛,并不完全掌握。而且在使用中发现,曾经出现多次slave 不能正常停止,造成master整个replication库全都当掉,基本就是数据库被毁掉了。当然这个可能和我操作有很大关系,因为在配置的时候实验了很多方法。但个人感觉replication 功能虽然是可以用的,但用的时候一定要小心,特别是注意master机的备份工作,否则真要DB 嗖的一下不见了,后果...... 总之小心驶的万年船。
1. [url=http://art.21e.cn/tec/server/database/3950.html] http://art.21e.cn/tec/server/database/3950.html
2. http://www.21ds.net/article/database/MySQL/2005-06/09/584_1.html