查看文章
 
Mysql的Master-Slave复制
2009-03-13 23:47
最近由于数据库负载过大,我们想把它做成Master-Slave的复制模式。这样的好处是, 通过Slave读数据,可以分担很多压力。另外, 由于Slave几乎可以说是实时的作为Master的镜像,所以也算是在线热备吧。

按照Mysql的官方文档说,很简单。但是做了一下午都没有成功。问题总是在将数据导入Slave的时候出错。后来发现,用mysqldump便可以解决这个问题。虽然官方说mysqldump有些慢,但是它的确是一个很稳定的方法。

首先,修改数据库的配置文件,my.ini或者my.cnf。通过修改server-id项给每个Server分配一个编号。例如Master是1,Slave是2。然后修改Master的配置文件, 确认“log-bin”的值是“mysql-bin”,这样Mysql是使用日志的。复制就是基于日志。Master做了什么操作,都会记录在日志中。Slave通过日志中的记录,再做一遍,来达到复制的效果。但是在复制建立之前,我们需要先建立一个快照。

导出所有的数据,要注意的是使用了"--master-data“选项:mysqldump -uroot -p >dump.sql

打开dump.sql, 我们可以看到一个“CHANGE MASTER TO”的SQL命令。这个命令设置了MASTER_LOG_FILE和MASTER_LOG_POS属性。这个两个属性就是在Dump数据的时候,Mysql当前的日志文件,和日志文件中的位置。这样,我们就有了一个快照,和这个快照对应的日志文件和位置。以后复制的时候, Slave会在快照上从这个日志点开始执行以后的日志,从而两个服务器便处于了一种同步的状态。

在Master中建立一个用于复制的用户:Grant Replication Slave on *.* To 'repl'@'Slave的IP‘ Identified By 'repl的密码';

修改dump.sql中的CHANGE MASTER TO命令,加入Master的IP、用户名和密码。注意,不要改动已有的MASTER_LOG_FILE和MASTER_LOG_POS属性:Change Master To Master_Host='Master的IP地址',Master_User='repl', Master_password='repl的密码’, MASTER_LOG_FILE='原来的值', MASTER_LOG_POS='原来的值';

最后,通过"Start Salve“命令来启动复制。在Master中做个修改,看看是不是Slave也同样发生了变化?

类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(978)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu