MYSQL数据库的读写分离

一.什么是读写分离
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

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

三.数据库读写分离的配置
(一).在server1和server2上做主从复制
server1是master,server2是slave
(二).在server3上做mysql-proxy(调度器)
1. 解压proxy数据包,并将解压后的目录放在/usr/local下
tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
2.建立目录存放读写分离的配置文件和日志
cd /usr/local/mysql-proxy/
mkdir conf
mkdir logs
4.编辑读写分离的配置文件

vim mysql-proxy.conf  mysql-proxy --help-all   
[mysql-proxy]
user=root                               # proxy运行的用户身份
proxy-address=0.0.0.0:3306              # proxy监听本机所有接口
proxy-backend-addresses=172.25.1.1:3306              # 后端master(读写)主机
proxy-read-only-backend-addresses=172.25.1.2:3306    # 后端slave(读)主机
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua    # lua脚本所在的位置
log-level=debug     
daemon=true
keepalive=true

5.将mysql-proxy的二进制命令放进系统环境变量中

vim ~/.bash_profile
/usr/local/mysql-proxy/bin
source ~/.bash_profile

6.实现读写分离是有lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装

cd /usr/local/mysql-proxy/share/doc/mysql-proxy
vim rw-splitting.lua   # 修改数据库发生读写分离时的最大最小值

这里写图片描述
7.启动mysql-proxy

mysql-proxy --default-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

这里写图片描述
8.在server1(master)上对某个用户授读和插入权限

grant all  on *.* to root@'%' identified by 'Hellojay123+';

9.在另外一台主机上通过调度器server3连接数据库
10.在server1和server2上安装连接查看 yum install lsof lsof -i:3306 (3306是数据库的端口)
server1:
这里写图片描述
server2:
这里写图片描述
12.通过外界连接第三次数据库时发生读写分离,此时插入数据是向master中插入数据,读是在slave上.
第三次连接数据库时发生读写分离,读数据在server2上,写数据在server1上:
这里写图片描述
向数据库中写入数据:
这里写图片描述
在master端可以看到数据的话说明写操作是在server1(master)上,在slave端可以看到数据并不能说明写操作是在server2(slave)端,因为server1和server2本来就是主从复制的关系….

猜你喜欢

转载自blog.csdn.net/jay_youth/article/details/81710271
今日推荐