欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql的读写分离

程序员文章站 2022-05-02 10:04:31
...

Mysql的读写分离是基于数据的主从复制,所以在配置读写的服务器上分别配置GTID主从复制,具体配置方法可参考上一篇《MySQL的异步、半异步、组复制》一文,这里仅给出测试结果。

server2上检查主从配置:

Mysql的读写分离
图  1 查看server2的配置

下面开始设置读写分离。

我们直接使用官方提供的插件Mysql-proxy。

1、MySQL-proxy简介

mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等。MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。

当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多 个proxy的连接参数即可。

2、安装及配置

下载链接:https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

安装:因为是rmp包,所以可以直接通过yum仓库进行直接安装。

Mysql的读写分离
图 2 解压安装

配置:

因为需要自己编写配置文件,所以创建配置文件的目录以及配置编写配置文件:

####创建配置文件目录
[aaa@qq.com local]# mkdir /usr/local/mysql-proxy/bin/conf

####编写配置文件
[aaa@qq.com local]# /usr/local/mysql-proxy/bin/conf/mysql-proxy.conf
配置文件内容:
....
  1 [mysql-proxy]
  2 proxy-address=0.0.0.0:3306                            ##监听本机端口
  3 proxy-backend-address=192.168.1.110:3306              ##读写数据库
  4 proxy-read-only-backend-address=192.168.1.120:3306     ##只读数据库
  5 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
                                                          ##读写启动配置
  6 pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid   ##pid存储位置
  7 log-file=/usr/local/mysql-proxy/log/mysql-proxy.log   ##日志存储位置
  8 plugins=proxy                                         ##以插件形式启动
  9 log-level=debug                                       ##日志级别
 10 keepalive=true                                        ##检测端口
 11 daemon=true                                           ##以守护进程方式(后台)运行
....

####修改配置文件的权限
[aaa@qq.com local]# chmod 660 /usr/local/mysql-proxy/bin/conf/mysql-proxy.conf

####创建日志目录
[aaa@qq.com local]# mkdir /usr/local/mysql-proxy/log

####编写lua启动脚本
[aaa@qq.com local]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua 
脚本内容:
##编写lua启动脚本:/usr/local/mysql-proxy/share/doc/mysql-proxy/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
....

Mysql的读写分离
图 3 配置流程

 3、启动并测试

启动:启东时需要制定配置文件路径

Mysql的读写分离
图 4 启动

当查看的日志内容为目标主机时,证明启动成功:

Mysql的读写分离
图 5 配置成功后的内容

 在数据库中对权限进行设置:

###在数据库中对用户授权
mysql> GRANT INSERT,UPDATE,SELECT ON *.* TO aaa@qq.com'%' IDENTIFIED BY 'Linux+755';

###刷新授权表
mysql> FLUSH PRIVILEGES;

###创建测试表
mysql> USE test;
Database changed
mysql> CREATE TABLE testtable(
    -> username VARCHAR(10) NOT NULL,
    -> password VARCHAR(15) NOT NULL);
mysql> DESC testtable;
Mysql的读写分离
图 5 用户授权
Mysql的读写分离
图 6 创建表

然后使用客户端远程登录,该用户也装有数据库,对数据库进行远程登录。

Mysql的读写分离
图 7 分别登录

在server3中查看登录时的分配:

Mysql的读写分离
图 8 用户分配

然后在客户端插入数据:

Mysql的读写分离
图 9 插入数据

在server1上查看:

Mysql的读写分离
图 10 在server1上查看

此时在server2上也可以查看到数据,是因为我们设置的半同步,关闭半同步,此时客户端插入的数据只能在server1上查看。
 

相关标签: 项目