Mysql的主从复制和读写分离

一.主从复制

主从复制的作用:

读写分离

读写分离

具有高可用性

主从复制的工作过程:

主服务器master发生数据变化时,会记录到二进制日志中;从服务器slave会开启io线程请求二进制日志事件;主服务器会为每个io线程开启dump线程并发送二进制日志事件;从服务器会将二进制日志事件保存到中继日志中;从服务器开启sql线程,读取中继日志中的二进制日志事件并解析进行重放;在5.7版本开启半同步复制下,主服务器会用ack collector线程接受从服务器的相应确认消息。

MySQL 读写分离原理:

读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性操作,而从数据库处理 select 查询。

目前较为常见的 MySQL 读写分离分为以下两种:

基于程序代码内部实现:在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。

基于中间代理层实现:代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性程序。

Amoeba该程序由Java语言进行开发,阿里巴巴将其用于生产环境。但是它不支持事务和存储过程。

Mycat是一款流行的基于Java语言编写的数据库中间件,是一个实现了MySql协议的服务器,其核心功能是分库分表。配合数据库的主从模式还可以实现读写分离。

mysql支持的复制类型:

STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

半同步复制什么情况下会转到异步复制?

当半同步复制发生超时(由rpl_semi_sync_master_timeout参数控制,默认为10000ms,即10s),会暂时关闭半同步复制,转而使用异步复制,也就是会自动降为异步工作。
当 master dump 线程发送完一个事务的所有事件之后,如果在 rpl_semi_sync_master_timeout 内,收到了从库的响应, 则主从又重新恢复为半同步复制。
 

二.搭建 MySQL主从复制

我们需要一台做主服务和两台做从服务器进行主从复制。

先检查每个服务器的mysql开启:

Mysql的主从复制和读写分离_第1张图片

Mysql的主从复制和读写分离_第2张图片

配置主服务器test1时间同步:

修改其配置文件:

Mysql的主从复制和读写分离_第3张图片

Mysql的主从复制和读写分离_第4张图片

Mysql的主从复制和读写分离_第5张图片

Mysql的主从复制和读写分离_第6张图片

查看时间:

到从服务器看时间同步:

test2:

Mysql的主从复制和读写分离_第7张图片

Mysql的主从复制和读写分离_第8张图片

添加计划任务:

Mysql的主从复制和读写分离_第9张图片

test3:

Mysql的主从复制和读写分离_第10张图片

配置主服务器:

Mysql的主从复制和读写分离_第11张图片

登录mysql进行给从服务器授权:

Mysql的主从复制和读写分离_第12张图片

Mysql的主从复制和读写分离_第13张图片

配置从服务器:

修改配置文件:

Mysql的主从复制和读写分离_第14张图片

登录数据库配置主从同步:

看下主服务器的状态:

Mysql的主从复制和读写分离_第15张图片

从服务器test2:

Mysql的主从复制和读写分离_第16张图片

开启同步:

查看 Slave 状态:

Mysql的主从复制和读写分离_第17张图片

从服务器test3:

修改配置文件:

Mysql的主从复制和读写分离_第18张图片

登录数据库实现同步:

Mysql的主从复制和读写分离_第19张图片

Mysql的主从复制和读写分离_第20张图片

测试主从复制:

看下主从服务器的库:

Mysql的主从复制和读写分离_第21张图片

Mysql的主从复制和读写分离_第22张图片

Mysql的主从复制和读写分离_第23张图片

给主服务添加创建库:

Mysql的主从复制和读写分离_第24张图片

Mysql的主从复制和读写分离_第25张图片

Mysql的主从复制和读写分离_第26张图片

这样就实现了主从复制。

MySQL主从复制延迟:

通过监控show slave statuslG命令输出的Seconds Behind Master参数的值来判断,是否有发生主从延时。

Mysql的主从复制和读写分离_第27张图片

mysql主从复制延迟原因:

1、master服务器高并发,形成大量事务
2、网络延迟
3、主从硬件设备导致cpu主频、内存io、硬盘io
4、是同步复制、而不是异步复制

如何优化减少主从延迟:

从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。

从库使用SSD磁盘

从库使用高性能主机

网络优化,避免跨机房实现同步

三.搭建mysql读写分离

开启一台服务器,安装java环境:

Mysql的主从复制和读写分离_第28张图片

添加权限:

Mysql的主从复制和读写分离_第29张图片

将amoeba软件包移动过去:

切换到/usr/local/amoeba目录下,解压amoeba:

Mysql的主从复制和读写分离_第30张图片

添加变量:Mysql的主从复制和读写分离_第31张图片

Mysql的主从复制和读写分离_第32张图片

看下当前java版本:


开启amoeba:

到主从服务器添加授权:

Mysql的主从复制和读写分离_第33张图片

Mysql的主从复制和读写分离_第34张图片

Mysql的主从复制和读写分离_第35张图片

配置amoeba的配置文件:

Mysql的主从复制和读写分离_第36张图片

Mysql的主从复制和读写分离_第37张图片

Mysql的主从复制和读写分离_第38张图片

Mysql的主从复制和读写分离_第39张图片

navicat软件测试:

Mysql的主从复制和读写分离_第40张图片

Mysql的主从复制和读写分离_第41张图片

添加数据:

Mysql的主从复制和读写分离_第42张图片

Mysql的主从复制和读写分离_第43张图片

Mysql的主从复制和读写分离_第44张图片

在添加数据:

Mysql的主从复制和读写分离_第45张图片

Mysql的主从复制和读写分离_第46张图片

Mysql的主从复制和读写分离_第47张图片

添加test3数据:

Mysql的主从复制和读写分离_第48张图片

Mysql的主从复制和读写分离_第49张图片

Mysql的主从复制和读写分离_第50张图片

你可能感兴趣的:(mysql,数据库)