您的位置:首页 > 数据库 > MySQL

MySql主从复制(Master-Slave)

2012-06-03 15:41 218 查看
参考此篇成功完成 配置

MySql主从复制(Master-Slave) - 曹振华 - 博客园

MySql主从复制(Master-Slave)

MySql主从复制(Master-Slave)

先简单的说一下MySql复制的过程,但是实际的每个步骤比这要复杂。1.主(master)服务器把数据更改的记录或者事件记录到二进制日志里。
2.从(slave)服务器把主服务器的二进制日志复制到自己的中继日志里。
3.从(slave)服务器根据中继日志的内容应用到自己的数据上。

假设我们的主从复制结构是由3台服务器构成,1台master,2台slave。



文章中的命令行提示符的含义:

第一步,分别在3台机器上安装MySql,并使用MySql自带的my-medium.cnf作为初始配置文件,在3台服务器里分别执行如下命令。

第二步,创建用于复制的账户,我们不管主从,在3台MySql创建相同用户名密码的用户。
1.首先启动MySql,并设置root密码,我这里是测试,所以你千万别把密码设置的这么简单。

2.创建并授权用于从服务器复制的复制账户。

★:如果你了解MySql,可能你会说只需要在主服务器上添加一个从服务器用于复制的账户即可,也不需要REPLICATION SLAVE权限,但是我这样做的好处有2个方面,1是监视和管理复制,2是方便将来主从交换角色。

第三步,配置主(Master)服务器配置文件,此步在主(Master)里操作。
在/etc/my.cnf的[mysqld]域后追加



添加完设置后,重启MySql,并确认主服务器状态。

可见,二进制日志已经开启并生效了,接下来该配置从(Slave)服务器了。

第三步,配置2台从(Slave)服务器配置文件,此步分别在2台从(Slave)里操作。
1.在192.168.0.101的/etc/my.cnf的[mysqld]域后追加

2.在192.168.0.102的/etc/my.cnf的[mysqld]域后追加

前面解释的参数,这里就不解释了。

另外,你可能发现我把主(Master)服务器里的一些配置,比如二进制日志的设置也拿过来了,同样是方便将来不停服务实现主从交换角色。

★:有人肯定要疑问了,为什么在从(Slave)服务器的配置里没有从主服务器复制的账户等相关信息?
回答:直接把这些的信息写到配置文件是没有好处的,根据一些高手的经验,还可以能出不可以预知的错误,因此我们将在下一步启动复制的时候,
在MySql命令行里执行命令来指定这些信息,这样做还有一个很大的好处,在我们要变换主服务器的时候不需要重启MySql。
★:关于过滤复制对象的问题,但是如果不是特殊需要,不要使用复制过滤,因为同样有几率在一些事件触发的时候导致一些错误。介绍几种过滤参数。
binlog_do_db 只复制指定的数据库(主服务器配置文件里设置)
binlog_ignore_db 不复制指定的数据库(主服务器配置文件里设置)
replicate_ignore_table 不复制指定的表(从服务器配置文件里设置)
replicate_wild_ignore_table 使用wild匹配来不复制的指定表(从服务器配置文件里设置),比如参数设为abc.%,表示不复制abc的所有表。

3.在2台从(Slave)服务器里重启MySql服务器

★:因为我们是新装的MySql服务器,所以接下来我们就可以开启复制了,如果你是给已经有大量数据的MySql服务器添加从(Slave)服务器,那么先从主(Master)服务器把数据导入到从(Slave)服务器里,让2者的数据一致,然后再开启复制。最简单的方法就是关闭主服务器MySql的写入,用mysqldump工具导出所有主(Master)服务器数据并上传到从(Slave)服务器:

然后把备份导入到从(Slave)服务器里:

如果你要在主服务器MySql正常运行的状态下进行热拷贝等方法,我建议你不要用mysqldump这个命令,如果是MyISAM存储引擎,用mysqlhotcopy进行热备份会更好,如果是InnoDB存储引擎,使用ibbacup这样的工具更好。

第四步,在从(Slave)服务器里开启复制,次步的操作在2台从(Slave)服务器里执行。

最后我用了SHOW SLAVE STATUS来查看复制情况,从第一行可以看出从服务器已经在等待主服务器的event了,也可以看到Slave_IO,Slave_SQL线程都正常开启,最好同时查看从(Slave)服务器的日志/var/log/mysqld.log,确认没有错误信息,接下来你就可以去主服务器进行一些操作看看同步是否正常。

另外,在上面的操作中MASTER_LOG_POS=0,这里0的意思是从日志开头开始复制的意思,并不是实际的日志里的位置,实际的日志里的开始位置默认应该是4。
★:有人觉得,数据分别保存在2个机器里,就认为备份不需要了,千万别这么想,只能说有助于备份,绝对不能替代备份。

到此为止,简单的主从配置就完了,但是真正要使用和管理好主从MySql服务器,不是靠这点知识就可以的。

http://www.litvip.com/2011/06/01/291
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: