mysql读写分离-mysql-proxy的配置

时间:2021-10-11 04:31:12

 

读写分离介绍

读写分离适合于读特别多的场景,一台只写,一台只读,提高读的效率。

 

实现的思路

前提:

读写分离建立在两台机器上,并且这两台机器是做了主从复制的,主库只写,从库只读,从而实现的。

 

实现:

第一种:

在主库创建一个只写的用户,而从库创建一个只写的用户,让程序去连接不同的服务器可达到读写分离的效果。

第二种:

通过代理软件,这种的好处是程序不需要关心写和读的操作分别连接的哪台服务器,只管往代理机器发即可,代理软件进行判断发往不同的mysql服务器。

通过代理实现的软件有:mysql-proxy,amoeba

 

代理方式的实现

图解:

 mysql读写分离-mysql-proxy的配置

环境:

需要开三台机器。

192.168.101  # 主库-只写

192.168.102  # 从库-只读

192.168.100  # 代理

 

安装lua脚本语言:

# 这个是mysql-proxy需要的

官方下载地址:

http://www.lua.org/ftp/

(1)安装依赖
yum install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make readline-devel -y

(2)下载包
wget http://www.lua.org/ftp/lua-5.3.5.tar.gz -P /opt/

(3)解压包
cd /opt/
tar xf lua-5.3.5.tar.gz

(4)修改Makefile文件
cd /opt/lua-5.3.5/
vi Makefile
# 设置 INSTALL_TOP= /usr/local/lua

(5)编译
make linux && make install

(6)添加环境变量
vim /etc/profile

添加:
export LUA_HOME=/usr/local/lua
export PATH=$PATH:$LUA_HOME/bin

环境变量生效:
source /etc/profile

 

安装mysql-proxy:

(1)    下载mysql-proxy包

wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -P /opt/

 

(2)    解压包和创建软连接

tar xf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy085

 

(3)    创建logs目录

mkdir /opt/mysql-proxy085/logs

 

(4)    添加环境变量

echo "PATH=/opt/mysql-proxy085/bin/:$PATH" >> /etc/profile

source /etc/profile

 

(5)    配置代理文件

vim /etc/mysql-proxy.cnf

配置内容:

[mysql-proxy]
# 运行mysql-proxy用户
user=root
# mysql-proxy连接后端mysql服务器的用户
admin-username=mysql_proxy_user
# mysql-proxy连接后端mysql服务器的密码
admin-password=123456
# 代理的监听地址端口,默认端口4040
proxy-address=0.0.0.0:3307
#指定后端主master写入数据
proxy-backend-addresses=192.168.1.101:3306
#指定后端从slave读取数据
proxy-read-only-backend-addresses=192.168.1.102:3306
#指定读写分离配置文件位置
proxy-lua-script=/opt/mysql-proxy085/share/doc/mysql-proxy/rw-splitting.lua
#日志位置
log-file=/opt/mysql-proxy085/logs/mysql-proxy.log
#定义log日志级别,由高到低分别有(error|warning|info|message|debug)
log-level=debug
#以守护进程方式运行
daemon=true
#mysql-proxy崩溃时,尝试重启
keepalive=true

# 配置参数自行修改

 

(6)    修改配置文件权限

chmod 660 /etc/mysql-proxy.cnf

 

(7)    主库添加授权用户

grant all privileges on *.* to ‘mysql_proxy_user‘@‘192.168.1.%‘ identified by ‘123456‘;

flush privileges;

 

(8)    启动代理

mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

 

(9)    连接通过代理账户连接代理开启的ip及端口

注:前提你连接的这台机器得弄个mysql客户端

# 测试的话:mysql包解压了,添加环境变量即可

# 后端的话:直接通过模块就连接1.100机器3307端口即可

mysql -umysql_proxy_user -p123456 -h192.168.1.100 --port=3307

 

(10) 成功

注:lua是必须要安装的

 mysql读写分离-mysql-proxy的配置

 

 

 

试验结果:

注:写操作,主从两台机器都会操作,因为他们是主从复制的。

想要看出效果需要修改lua脚本,因为它有限制(表示多少连接才开启读写分离):

vim /opt/mysql-proxy085/share/doc/mysql-proxy/rw-splitting.lua

mysql读写分离-mysql-proxy的配置

# min_idle_connnections参数表示最少多少个连接,才开始读写分离

 

查询读写次数的sql语句:

show global status where Variable_name in(‘com_select‘,‘com_insert‘,‘com_delete‘,‘com_update‘);

show global staus like ‘com_select‘;  # 单个的

mysql读写分离-mysql-proxy的配置