mysql在windows环境下的主从复制原理及测试
- 一、mysql主从复制原理
- 二、mysql主从复制的步骤
- 三、测试目标
- 四、测试环境
- 五、测试准备
- 1、master上配置my.ini文件
- 2、slave上配置my.ini文件
- 3、主库操作
- 4、Slave库操作
- 六、开始测试
- 七、总结
- 1、操作过程中出现的错误
- 2、结论
一、mysql主从复制原理
Mysql从3.25.15开始提供数据复制的功能。Mysql复制是指从一个Mysql主服务器(master)将数据复制到另一台或多台从服务器(slaves)上的过程,将主数据库的DDL和DML操作通过二进制日志传到从服务器上,然后在从服务器上对这些日志重新执行,使得主从服务器的数据保持同步。在mysql中,复制操作是异步执行的,slaves服务器不需要持续地保持连续接收master服务器的数据。
二、mysql主从复制的步骤
复制主要分为3步:
(1)主服务器将数据的改变记录到二进制日志(binary log)中。
(2)从服务器将主服务器binary log events复制到它的中继日志(relay log)中。
(3)从服务器重做中继日志中的事件,将数据的改变与主服务器保持同步。
主服务器会记录二进制信息,每个事务更新数据完成前,主服务器都将这些操作的信息记录在二进制文件中,事件写入完成后,主服务器通知存储引擎提交事务。
三、测试目标
将master的demo数据库同步到slave的demo数据库中,验证主从复制操作是异步进行的。
四、测试环境
(1)2台win10环境的电脑,能够实现联网互通。
(2)mysql版本为5.6.21解压版。
(3)IP:主(master):192.168.1.16 从(slave):192.168.1.15
五、测试准备
1、master上配置my.ini文件
在mysql的安装目录中通过配置my.ini文件中开启binlog日志,mysql默认不开启binary log 。
log_bin = “D:\mysql\binlog” (log_bin是二进制保存的位置,需要提前建好,注意没有分号,这些都会导致mysql重启报错。【一些情况下,G盘也报错,我的当初是G盘报错】)
expire_logs_days = 10 (表示二进制文件的保存的天数)
max_binlog_size = 100M (表示单个二进制文件最大的大小)
查看是否成功开启binlog日志,on表名成功开启,off表示未开启。
show variables like ‘%log_bin%’;
配置需要同步的数据库demo,不需要同步的数据库(不指定也行)。
binlog-do-db = demo
binlog-ignore-db = mysql
binlog-ignore-db = test
配置server_id,不能和slave的相同,建议和ip地址的末尾数值保持同步,好记。
server-id=16
配置完my.ini文件后要重启mysql服务。
net stop mysql
net start mysql
2、slave上配置my.ini文件
配置server_id,不能和slave的相同,其他配置采用默认的即可。
server-id=15
3、主库操作
登录mysql,按提示输入密码。
mysql -h localhost -uroot -p
将主库的demo数据库克隆一份到从库(注意是mysqldump 不是mysql)
mysqldump -u root -p -h localhost demo >d:\b.txt
创建授权用户
grant replication slave on . to ‘zxh’@‘192.168.1.15’ identified by ‘123’ ;
说明:zxh是mysql用户名,123是密码,192.168.1.15是从库的IP地址。
刷新权限
flush privileges;
显示master的状态信息,并且找到File 和 Position 的值记录下来,slave连接master时需要这两个变量。
show master status;
4、Slave库操作
登录mysql
mysql -h localhost -uroot -p
将主库的demo数据克隆到从库
mysqldump -u root -p -h localhost demo < d:\b.txt
说明:一定提前在从库建好库,主库导出来的文件里不包含建库语句,手动拷到从库所在的主机上。
主库重新赋权
grant all privileges on . to ‘zxh’@’%’ identified by ‘123’ with grant option;
说明:%表示给了所有用户,测试这样干,不重新授权也可以
slave 与 master 建立连接,进行数据同步。
Stop slave; (连接前先停掉slave)
change master to master_host=‘192.168.1.16’,
master_user=‘zxh’,
master_password=123,
master_log_file=‘log.000004’,
master_log_pos=686;Start slave(重启slave)
说明:slave和master建立连接前必须先停掉slave,建立连接后再开启。
Log.0000004、686和master的file和position保持一致,分别表示实现复制的binary log文件和binary log的偏移量。
查看slave数据库状态
show slave status;
以上两项都为Yes说明配置成功,这是主从复制的核心,表明已经成功建立连接,可以通过I/O流进行复制了。
六、开始测试
(1)在master中的demo中进行任意的DDL和DML操作,然后查看slave是否同步成功。
经测试,成功。
(2)把slave中的mysql服务停掉,对master进行数据更新和插入操作,之后重启slave的mysql服务,数据依然保持一致,说明主从复制的操作是异步进行的。
七、总结
1、操作过程中出现的错误
(1)配置完my.ini都需要重启。
(2)从库配置文件不能出现跳过密码skip-grant-tables,否则授权失败。
(3)区分清楚哪些是在cmd下的操作,哪些在mysql的操作界面。
(4)区分是否加分号,my.ini文件里的配置都不需要分号,不同配置换行即可。
2、结论
mysql主从复制是异步进行的。