一、 背景
实现数据库的读写分离,有三种方式,mysql-proxy、Mycat、Amoeba
但是根据官网提供的是mysql-proxy,所以,今天了解mysql-proxy,至于其他两个,我们后续也要有所了解
二、读写分离的介绍和思路
读写分离适合于读特别多的场景,一台只写,一台只读,提高读的效率。
读写分离建立在两台机器上,并且这两台机器是做了主从复制的,主库只写,从库只读,从而实现的。
三、配置读写分离环境
我们所需要的在主机
|server1|主库 | 172.2510.1
|–|--|
| server2 |备库 |172.25.10.2
|server3|代理端 |172.25.10.3
|物理机|客户端(多个)|172.25.20.250
先配置server3代理端
在server3上面:搭建proxy代理服务器(实现客户端写在server1上面、客户端读server2上的数据)
步骤一:在server3代理端
在mysql官网上下载mysql-proxy安装包,并解压
步骤二:为了方便起见,我们做软连接
步骤三:我们查看proxy的相关参数
步骤四:每个服务都有自己相应的配置文件,所以需要新建配置文件目录,创建配置文件,并编辑相关内容
[mysql-proxy]
proxy-address=0.0.0.0:3306 ##mysql-proxy运行的端口
proxy-read-only-backend-addresses=172.25.10.2:3306 ##slave节点:只读
proxy-backend-addresses=172.25.10.1:3306 ##master节点:可读可写
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua ##lua脚本的路径
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid 进程pid的位置
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log ##日志位置
plugins=proxy
log-level=debug ##定义日志级别
keepalive=true ##mysql-proxy崩溃时尝试重启
daemon=true ##打入后台
步骤五:同样的,需要建立日志,当服务出错时,我们可以在自己的日志里面查看错误
步骤六:修改数据库发生读写分离时的最大和最小连接数
步骤七:启动mysql-proxy
在启动时会遇到错误,这是因为权限过大的缘故,我们更改权限即可
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf修改配置文件的权限
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
其实就编辑了一个配置文件和lua文件
步骤八:查看日志,查看我们的代理是否做好
server3配置成功
在server1和server2端进行配置
实验环境是基于gtid的主从复制模式
基于gtid的主从复制的配置
四、测试读写分离
步骤一:
在主库上建立新用户并授权,创建数据库chen以及表,验证一下server1和server2的主从复制是否正常
在往主库所建的表里面添加值时,没有截图,但是不影响实验效果
insert into usertb values (‘user1’,‘123’);
insert into usertb values (‘user2’,‘456’);
insert into usertb values (‘user1’,‘789’);
步骤二:在备库上查看
步骤三:server3安装lsof
步骤四:在自己的物理端查看是否有mysql,如若没有,则需要下载。
在真机上第一次连接数据库代理server3
mysql -h 172.25.10.3 -ucc -pWestos+123
在server3上,lsof -i:3306
真机第二次连接数据库代理server3(也就是重新打开一个bash)
在server3上,lsof -i:3306
在真机上第三次连接数据库代理server3(也就是重新打开一个bash)
在server3上,lsof -i:3306
发现开始读写分离(用户多的时候),我们三次连接,就是三个用户,我们之前在配置文件里面设置了最少连接数)
步骤五:在真机1上面开始对数据库写,在主库和备库上查看
总结:server1(master)上能看到数据说明写操作是在master上
而slave可以查看到数据是因为server1(master)和server2(slave)是主从复制的关系
不能说明server2上可以进行写操作,为了更清楚的验证读写分离,我们做下面的实验
现在关闭slave节点之后,继续在客户端写,但是我们在备库里面不能查看到,只能在主库里面查看到。
真机读的是server2,server2只能读,不能写,因此看不到刚才写进去的东西,server1可以看到
实现了真机对server1的写,对server2的读