Mysql读写分离

Mysql读写分离

1、什么是读写分离?

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。

2、为什么要读写分离?

因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。
但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。

3、什么时候读写分离?

数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用,利用数据库 主从同步 。可以减少数据库压力,提高性能。当然,数据库也有其它优化方案。memcache 或是 表折分,或是搜索引擎。

4、主从复制与读写分离

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于前面我们学习过的rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

环境部署:

Master机:server5(172.25.51.5)
Slave 机: server6(172.25.51.6)
调度器proxy:server4(172.25.51.4)

Mysql读写分离配置:

一、调度器(proxy)

1、server4安装读写分离proxy
[root@server4 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/
[root@server4 ~]# cd /usr/local/
[root@server4 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy

示图:软链接
Mysql读写分离_第1张图片

2、修改读写分离的lua脚本
[root@server4 ~]# cd /usr/local/mysql-proxy/share/doc/mysql-proxy/
[root@server4 mysql-proxy]# vim rw-splitting.lua 
 38 if not proxy.global.config.rwsplit then
 39         proxy.global.config.rwsplit = {
 40                 min_idle_connections = 1,
 41                 max_idle_connections = 2,
 42 
 43                 is_debug = false
 44         }
 45 end

3、编写配置文件
[root@server4 ~]# cd /usr/local/mysql-proxy
[root@server4 mysql-proxy]# mkdir conf
[root@server4 mysql-proxy]# mkdir logs
[root@server4 mysql-proxy]# cd conf/
[root@server4 conf]# pwd
/usr/local/mysql-proxy/conf
[root@server4 conf]# vim mysql-proxy.conf
[mysql-proxy]
user=root
proxy-address=172.25.51.4:3306     ##代理层
proxy-read-only-backend-addresses=172.25.51.6:3306   ##读
proxy-backend-addresses=172.25.51.5:3306             ##写
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
4、修改权限,使权限变小(否则无法启动)
[root@server4 conf]# chmod 660 mysql-proxy.conf 
5、启动mysql-proxy
[root@server4 conf]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf 

示图:mysql-proxy端口3306
在这里插入图片描述

二、测试

1、Master授权远程登陆
mysql> grant select,insert,update on westos.* to wxh@'172.25.51.%' identified by 'Westos#123';
2、Master和Slave安装lsof(list open files)
[root@server5 ~]# yum install -y lsof
[root@server5 ~]# lsof -i :3306           ##列出被进程所打开的文件信息
示图:Master上发现主库只与从库建立连接

在这里插入图片描述

示图:Slave上发现从库只与主库建立连接

在这里插入图片描述

3、读写分离测试
<1>开启一个shell连接
[root@foundation51 ~]# mysql -h 172.25.51.4 -u wxh -p

Mysql读写分离_第2张图片

示图:Master上调度器与主库连接(2个连接)

在这里插入图片描述

示图:Slave上调度区与从库连接

在这里插入图片描述

<2>开启两个shell连接
示图:Master上调度器与主库连接(2个连接)

在这里插入图片描述

示图:Slave上无与调度器连接

在这里插入图片描述

<3>开启三个shell连接(读写分离)
示图:Master上调度器与主库连接(2个连接)在这里插入图片描述在这里插入图片描述综上:三台以上客户端连接,才会实现读写分离

验证读写分离成功:我们在连接Slave的客户端上写入数据,看是否写入到Master,如果写入,表示读写分离成功。

(第3个客户端虽然连接从库,但是写入时,mysql-proxy自动实现主库写入;)

示图:连接Slave的客户端写入数据

Mysql读写分离_第3张图片

示图:Master上可查看到写入的数据,则读写分离成功

Mysql读写分离_第4张图片

你可能感兴趣的:(Linux)