mysql-8.0.12读写分离

Posted 光を追うのCaius

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql-8.0.12读写分离相关的知识,希望对你有一定的参考价值。

安装包下载地址:https://downloads.mysql.com/archives/proxy/

 

环境

proxy:172.16.1.20

master:172.16.1.21

slave1:172.16.1.22

slave2:172.16.1.23

 

本文选用mysql-proxy作为转发中间件, 版本为mysql-proxy-0.8.5-linux-el6-x86-64bit

 

一:在开启主从复制的情况下,在master创建供 proxy连接的账号(这样就等于同时在所有mysql上创建了连接账号)

mysql > create user \'rw\'@\'%\' identified with mysql_native_password by \'tqw961110\';

mysql > grant all on *.* to \'rw\'@\'%\';

 

二:停用slave(所有mysql都执行一遍)

mysql > stop slave;

mysql > reset slave all;

 

三:解压安装包并进入

cd  /tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/

mkdir  lua     创建存放lua脚本的目录

mkdir  logs   创建存放日志的目录

cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件

cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

vim /etc/mysql-proxy.cnf #创建配置文件

[mysql-proxy]
user=root
admin-username=rw                              #proxy的连接账号(主从都要有)
admin-password=tqw961110                  #密码
proxy-address=172.16.1.20:4040          #proxy运行的地址
proxy-read-only-backend-addresses=172.16.1.22,172.16.1.23               #只读服务池
proxy-backend-addresses=172.16.1.21                                                   #写服务池
proxy-lua-script=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/lua/rw-splitting.lua                  #读写脚本存放位置
admin-lua-script=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/lua/admin-sql.lua                   #管理脚本存放位置
log-file=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/logs/mysql.log                                       #日志存放位置
log-level=info                        #定义log日志级别,由高到低分别有(error|warning|info|message|debug)

daemon=true                         #以守护进程的方式运行
keepalive=true                       #mysql-proxy崩溃时,尝试重启。

 

四:修改读写脚本

if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,          #默认超过4个连接时才开始读写分离,这里修改为1.
max_idle_connections = 1,         #默认8,改为1。

is_debug = false
}
end

 

启动proxy

/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/bin/mysql-proxy    --defaults-file=/etc/mysql-proxy.cnf

 

查看日志

已经将后端mysql加进连接池

 

查看端口

netstat -atunlp | grep 4040

tcp        0      0 172.16.1.20:4040        0.0.0.0:*               LISTEN      33297/mysql-proxy

 

测试读写性能

在proxy服务器上登陆mysql(proxy服务器需要有mysql命令。可以yum -y install mysql)

mysql  -h  172.16.1.20  -urw -ptqw961110  --port=4040

 

分别在主从数据库插入数据

create  database test;

use test;

create table test(id int(10),name varchar(20));

insert into t values(1,\'this_is_master\'); !!!!在slave上则是执行 insert into t values(1,\'this_is_slave\');

 

此时master与slave中的test库test表的内容是不同的。

 

在proxy服务器上

use test;

select * from test;

 

显示的是slave的内容

 

再在proxy服务器上插入数据试试

insert into t values(1,\'this_is_proxy\');

select * from test;

 

显示的依旧是slave的内容

 

但是在master服务器上查看内容

select * from test;

已经可以看到从proxy插入的数据

 

经测试,写操作只会在master上进行,而读操作只会在slave上进行。

至此,mysql读写分离成功。

 

若想关闭proxy

killall  -9  mysql-proxy

 

 

以上是关于mysql-8.0.12读写分离的主要内容,如果未能解决你的问题,请参考以下文章

MySQL读写分离

为啥我不能从 FragmentPagerAdapter 分离片段?

Zend Framework中如何实现MySQL的读写分离 - PHP框架开发

基于mybatis读写分离插件

mysql读写分离

mysql中间件proxysql实现mysql读写分离