来源:自学PHP网 时间:2015-04-16 10:50 作者: 阅读:次
[导读] 这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave,没有任何的热机备份和多slave),该主从结构的基本拓扑图如下所示:建立基本的主从复制可以总结为以下三个基本步...
这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave,没有任何的热机备份和多slave),该主从结构的基本拓扑图如下所示:
建立基本的主从复制可以总结为以下三个基本步骤: 配置master服务器配置slave服务器将slave连接到master在配置完成之后,我们会做一个简单的测试,测试复制是否正常。 本文所涉及的master和slave服务器均位于同一台单机上,使用不同的端口号区分,基本的环境为:Window 7 旗舰版 32位,MySQL的版本为5.6.21 。上一篇笔记(Windows环境下压缩版MySQL安装)中,已经介绍了压缩版mysql配置的基本过程,这里需要复制一份,并解压缩到另外一个目录(例如D:/Mysql_slave目录中)。为了区分master和slave,我们分别使用不同的端口号:master使用3306,slave使用3307端口号。 一、配置Master将服务器配置为Master,需要确保服务器有一个活动的二进制日志(binary log)和唯一的服务器ID(server-id,用于区分服务器).二进制日志中包含了Master的所有改变,并且可以在Slave上执行。 配置master的my.ini文件: 打开master目录下的my.ini文件,在文件中添加如下内容: server-id = 1 binlog-do-db = test log-bin=master-bin log-bin-index=master-bin.index 其中: (1) server-id=1用于配置服务器ID,是mysql主从集群中的一个唯一区分号。所有的服务器都应该有自己的唯一ID,如果一个Slave连接到Master,但是和Master有相同的ID,则会产生Master和Slave ID相同的错误 (2) binlog-do-db :指定主从复制的数据库。 (3) log-bin字段给出了二进制日志所产生的所有文件的基本名,二进制文件可以包含多个文件,如下图所示: (4) log-bin-index.这其实是指定了一个索引文件(纯文本,内容为文件列表),该索引文件中包含所有二进制文件的列表。如果没有为log-bin-index设置默认值,则会使用机器的hZ喎"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3RuYW1lsvrJ+mxvZy1iaW4taW5kZXjOxLz+o6zV4tH5o6zU2rf+zvHG97XEaG9zdG5hbWW4xLHkuvOjrL/JxNy74bP2z9bO3reo1dK1vcv30v3OxLz+o6y007b4yM/Oqrb+vfjWxs7EvP7B0LHtzqq/1aOstbzWws7et6jV/ci3tcTJ+rPJtv69+NbGYmluLWxvZ6Gjy/nS1KOszca89tOmuMPKudPDu/rG987eudi1xMP719bX986qYmluLWxvZy1pbmRleLXEzsS8/sP7LjwvcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20141018/2014101809022018.png" alt="\"> 配置完ini文件之后,需要从命令行启动mysqld服务,进入master的bin目录(D:.Mysql/bin)并执行下述命令(如果之前配置过mysql,执行之前请关闭已经启动的mysql服务 net stop mysql): mysqld –console 如果启动成功,cmd窗口会出现如下类似的内容(红色部分是关键): 这时master服务器已经启动了.将该cmd窗口最小化不用管它。新开一个cmd窗口,连接到master(mysql –u root -pxxx),通过show master status可以查看master的状态。 Slave连接Master时,会启动一个标准的客户端去连接Master,并请求Master将所有的改动转储给它。因此,在连接时,需要Master上有一个具有复制权限的用户。在master的控制台执行如下命令: Create user reply_user; Grant REPLICATION SLAVE On *.* to reply_user IDENTIFIED BY ‘xxxxxxxxx’; Flush privileges; Replication slave权限并没有什么特别之处,只是这个用户能够从Master上二进制文件的转储数据。完全可以给一个常规的用户赋予该权限,但最好还是将复制Slave的用户和其他用户区分开来,这样的话,如果想要禁止某些slave的链接,只要删除该用户就可以了 二、配置Slave配置Slave的过程和配置Master的过程基本相同,不同的是,需要配置一个不同的端口号,需要一个不同的server-id号。并且需要为Slave配置relay-log(中继日志)和relay-log-index(中继日志的索引文件)。打开Slave目录下的my.ini(D:/mysql_slave目录),添加如下内容: #mysql slave port port = 3307 #slave server id server_id = 2 #replication database replicate-do-db=test #relay log file relay-log=slave-relay-bin #relay log index file relay-log-index=slave-relay-bin.index 修改完Slave后。同样需要通过命令启动slave的mysqld: d: cd mysql_slave/bin mysqld –console 现在虽然配置好了Master和Slave。但是Master和Slave之间没有任何的联系,这时如果在Slave的控制台执行:show slave status;会出现提示:it is not a slave 三、Slave连接到Master将Slave连接到Master,需要知道Master的四个基本的信息: (1) 主机名或者IP地址,由于这里都是单机,主机的IP为127.0.0.1 (2) Master使用的端口号,3306 (3) Master上具有REPLICATION SLAVE权限的用户 (4) 该账号的密码。 在配置Master的时候已经创建了一个具有相关权限的用户,在Slave的控制台运行以下命令: Change Master to Master_host=’127.0.0.1’, Master_port=3306, Master_user=”reply_user”, Master_Password=”xxxx”; 执行完之后,可以通过start Slave命令启动Slave。 这时如果执行show slave status;会输出以下类似内容(注意标红部分): 现在,一个基本的mysql主从已经搭建起来了。我们接着做一些简单的测试,看看复制是否正常。测试步骤如下: 1. 在Master上创建表: CREATE TABLE `web_user2` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL DEFAULT '', `creatime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 2. 插入数据 Insert into web_user2 (`name`) values ('first'),('test'),('showb'),('blood'); Select * from `web_user2`; 3. 进入Slave查看是否同步正常 Show tables; Select * from web_user; 4. 在master的控制台上查看复制的事件-Binlog events Flush logs; Show binlog events; 日志比较长,这里只截取了前两条: htmlhttp://blog.itpub.net/7607759/viewspace-719707/ |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com