这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave,没有任何的热机备份和多slave),该主从结构的基本拓扑图以下所示:html
创建基本的主从复制能够总结为如下三个基本步骤:mysql
在配置完成以后,咱们会作一个简单的测试,测试复制是否正常。web
本文所涉及的master和slave服务器均位于同一台单机上,使用不一样的端口号区分,基本的环境为:Window 7 旗舰版 32位,MySQL的版本为5.6.21 。上一篇笔记(Windows环境下压缩版MySQL安装)中,已经介绍了压缩版mysql配置的基本过程,这里须要复制一份,并解压缩到另一个目录(例如D:/Mysql_slave目录中)。为了区分master和slave,咱们分别使用不一样的端口号:master使用3306,slave使用3307端口号。sql
将服务器配置为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
其中:spa
(1) server-id=1用于配置服务器ID,是mysql主从集群中的一个惟一区分号。全部的服务器都应该有本身的惟一ID,若是一个Slave链接到Master,可是和Master有相同的ID,则会产生Master和Slave ID相同的错误.net
(2) binlog-do-db :指定主从复制的数据库。命令行
(3) log-bin字段给出了二进制日志所产生的全部文件的基本名,二进制文件能够包含多个文件,以下图所示:
(4) log-bin-index.这实际上是指定了一个索引文件(纯文本,内容为文件列表),该索引文件中包含全部二进制文件的列表。若是没有为log-bin-index设置默认值,则会使用机器的hostname产生log-bin-index文件,这样,在服务器的hostname改变后,可能会出现没法找到索引文件,从而认为二进制文件列表为空,致使没法正确的生成二进制bin-log。因此,推荐应该使用机器无关的名字做为bin-log-index的文件名.
配置完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的过程和配置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,须要知道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;
日志比较长,这里只截取了前两条:
从binlog的内容来看,复制已经配置成功了。
下一步,将会继续探索二进制日志的相关东西。
参考文献: