博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql在window下的主从复制
阅读量:4181 次
发布时间:2019-05-26

本文共 2627 字,大约阅读时间需要 8 分钟。

mysql在windows环境下的主从复制原理及测试

一、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主从复制是异步进行的。

转载地址:http://nmrai.baihongyu.com/

你可能感兴趣的文章
Redis网络库源码浅解
查看>>
TCP半连接与全连接队列及accept建立连接
查看>>
TCP连接的关闭
查看>>
系统级 I/O与缓冲机制
查看>>
[Web Server](一)Tiny Web Server分析
查看>>
内存管理之用户空间
查看>>
FastCGI 协议分析与C语言实现实例
查看>>
Muduo网络库源码分析之定时器的实现
查看>>
C++智能指针的分析与使用
查看>>
Muduo网络库源码分析之Acceptor和TcpServer
查看>>
Muduo网络库源码分析之TcpConnection Class
查看>>
编写网络服务程序的常用编程模型
查看>>
复合&继承关系下的构造和析构
查看>>
Linux交换空间(swap space)
查看>>
Redis 通信协议(protocol)
查看>>
Redis 客户端 Hiredis 简介
查看>>
Linux 系统 CPU 使用率简单分析
查看>>
make 出现 OOM???
查看>>
openstack ice版创建实例流程整理(包括wsgi模块间调用解析)
查看>>
openstack ice版文档horizon整理(页面resize)
查看>>