MYSQL 从3.25.15版本开始提供数据库复制功能(replication)。mysql复制是指从一个mysql主服务器(MASTER)将数据复制到另一台或多台mysql从服务器(SLAVE)的过程,将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在从服务器上对这些日志重新执行,从而使从服务器的数据保持同步。在mysql中,复制操作是异步进行的,slave服务器不需要持续的保持连接接收master服务器的数据mysql支持一台主服务器同时向多台从服务器进行复制操作,从服务器同时可以作为其他从服务器的主服务器,如果mysql主服务器访问量大,可以通过复制数据,然后在从服务器上进行查询操作,从而降低主服务器的访问压力(读写分离),同时从服务器作为主服务器的备份,可以避免主服务器因为故障数据丢失的问题。
mysql数据库复制操作大致可以分为三个步骤
1主服务器将数据的改变记录到二进制日志(binlog)中。
2、从服务器将主服务器的binary log events复制到他的中继日志(relay log)中。
3、从服务器做中继日志中的事件,将数据的改变与从服务器保持同步。
首先,主服务器会记录二进制日志,每个事务更新完毕数据之前,主服务器将这些操作的信息记录在二进制日志里面,在事件写入
二进制日志完成后,主服务器 通知存储引擎提交事务。SLAVE上面的I/O进程连接上MASTER,并发出日志请求,MASTER接收到来自SLAVE的I/O进程的请求后,通过负责复制的I/O进程根据请求信息读取指定日志位置之后的日志信息,返回给SLAVE的I/O进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到MASTER端的binlog文件的名称以及binlog的位置SLAVE的I/O进程接收到信息后,将接收到的日志内容依次添加到SLAVE端的relay-log文件的最末端,并将读取到的MASTER端的binlog文件名和位置记录到master-Info文件中。SLAVE的SQL进程检测到relay-log中新增了内容后,会马上解析relay-log的内容成为在master端真实执行时候的那些可执行内容,并在自身执行mysql复制环境,90%以上都是一个master带一个或者多个slave的架构模式。如果master和slave压力不是太大的话,异步复制的延时一般都很少。尤其是slave端的复制方式改成两个进程处理之后,更是减少了slave端的延时
提示:对于数据实时性要求不是特别严格的应用,只需要通过廉价的电脑服务器来扩展slave的数量,将读压力分散到多台slave的机器上面
即可解决数据库端的读压力瓶颈。这在很大程度上解决了目前很多中小型网站的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决
数据库瓶颈问题
Windows环境下的mysql主从复制
复制前的准备工作
在Windows环境下,如果想实现主从复制需要准备的操作环境
角色 ip 端口 操作系统 mysql版本
master 192.168.1.100 3306 Windows7 5.5.20
slave 192.168.1.102 3306 Windows8 5.5.20
Windows环境下实现主从复制
准备好两台安装mysql5.6的计算机,即可实现两台mysql服务器主从复制备份操作。
具体操作步骤如下:
1、在Windows下安装好两台mysql服务器,配置好两台主机的ip地址,实现两台计算机可以网络连通


2、配置master的相关配置信息,在master主机上开启binlog日志,首先,看下datadir的具体路径
?
show variables LIKE '%datadir%'
?

3、此时需要打开在D:\Program Files (x86)\MySQL\MySQL Server 5.5路径下的配置文件my.ini,添加如下代码,开启binlog功能
?
[mysqld] log-bin="D:/MYSQLDataBase/binlog" expire_logs_days=10 max_binlog_size=100M
?
提示:此事我们需要在D盘下面创建MYSQLDATABASE文件夹,binlog日志记录在该文件夹里面,该配置文件中的其他参数如下所示
expire_logs_days:表示二进制日志文件删除的天数
max_binlog_size:表示二进制日志文件最大的大小
4、登录mysql后,可以执行show VARIABLES LIKE '%log_bin%'命令来测试下log_bin是否成功开启
?
show VARIABLES LIKE '%log_bin%';
?


如果log_bin参数是ON的话,那么表示二进制日志文件已经成功开启,如果为OFF的话,那么表示二进制日志文件开启失败
5、在master上配置复制所需要的账户,这里创建一个repl的用户,%表示任何远程地址的repl用户都可以连接master主机
?
GRANT replication slave ON *.*TO repl@'%' IDENTIFIED BY '123'; flush privileges;
?
6、在my.ini配置文件里配置master主机的相关信息
?
[mysqld] log-bin="D:/MYSQLDataBase/binlog" expire_logs_days=10 max_binlog_size=100M server-id=1 binlog-do-db=test binlog-ignore-db=mysql
?
这些配置语句的含义
server-id:表示服务器表示id号,master和slave主机的server-id不能一样
binlog-do-db:表示需要复制的数据库,这里以test库为例
binlog-ignore-db:表示不需要复制的数据库
7、重启master主机上的mysql服务,然后输入show master status命令查询master主机的信息

8、将master主机的数据备份出来,然后导入到slave主机中去,具体执行语句如下
?
mysqldump -u root -p -h 127.0.0.1 test >D:\TEST.TXT
?
TEST库里面的表和数据


innodb_monitor表是没有数据的
dump出来的txt文件内容
?
-- MySQL dump 10.13 Distrib 5.5.20, for Win32 (x86) -- -- Host: 127.0.0.1 Database: test -- ------------------------------------------------------ -- Server version 5.5.20-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD