您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

mysql5.7使用ProxySQL实现读写分离

时间:2020-05-13 11:15:19  来源:  作者:

mysql5.7使用ProxySQL实现读写分离

 

 

ProxySql是MySQL的一款中间件产品,是灵活强大的mysql代理层,可以实现读写分离,支持query路由功能,支持动态指定某个sql进行缓存,支持动态加载配置。故障切换和一些sql过滤功能。

mysql5.7使用ProxySQL实现读写分离

 

实战演练

环境

centos7.5 mysql5.7

ip:10.106.145.181(从) 10.106.145.182(主) 10.106.145.183(从)

 

注意:另个从库设置为read_only=on

mysql5.7使用ProxySQL实现读写分离

 

我们可以将proxysql单独安装在一台机器上,这里因为机器不够我们就先将它安装在10.106.145.183上,下面我们开始操作

 

1. 安装并配置好mysq主从

从库的配置文件中要加入read_only=1,不然在启动之后查询mysql_servers表会出现从库也会被自动加入写入的组中。proxysql区别主从的唯一方式就是read_only状态值。 如果是测试则先将从库临时设置为只读

vi /etc/my.cnf

添加 read_only=1

临时设置:

set global read_only=on

 

2. 安装ProxySql

vim /etc/yum.repos.d/proxysql.repo

[proxysql_repo]

name= ProxySQL YUM repository

baseurl=http://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/$releasever

gpgcheck=1

gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key

 

3.安装ProxySQL和mariadb客户端(如果有该机器上有mysql客户端则不需要安装mariadb)

ProxySQL内置了一个轻量级的数据库,所以需要有MySQL客户端连上去对其进行配置

yum install proxysql mariadb -y

这里因为该机器上有mysql客户端了,所有我使用指令如下

yum install proxysql -y

4.启动ProxySQL服务

systemctl start proxysql

systemctl status proxysql

设置开机启动

system enable proxysql

mysql5.7使用ProxySQL实现读写分离

 

netstat -anlp| grep proxysql

mysql5.7使用ProxySQL实现读写分离

 

proxysql --version

mysql5.7使用ProxySQL实现读写分离

 

5.连接管理端口

6032是proxysql的管理端口号6033是对外服务的端口,用户名密码都是admin

登录命令

/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032

show databases;

mysql5.7使用ProxySQL实现读写分离

 

6.四个库的说明

main:内存配置数据库,即memory,表里存放后端db实例 用户验证 路由规则等信息,该库信息如 下

 

mysql5.7使用ProxySQL实现读写分离

 

其中主要表

mysql_servers:后端可以连接mysql的服务器列表

mysql_users:后端数据库账户和监控账户

mysql_query_rules: query路由到后端不同服务器的规则列表

disk库:持久化磁盘的配置

stats库:统计信息的汇总

monitor库:一些监控收集的信息,包括数据库的健康状态等

 

7.在主库上配置监控账户和对外访问账户

create user monitor@'10.106.145.%' identified by 'monitor';

grant all privileges on *.* to monitor@'10.106.145.%' with grant option;

create user zsprox@'10.106.145.%' identified by 'zsprox';

grant all privileges on *.* to zsprox@'10.106.145.%' with grant option;

主库的账户会被同步到另外两个从库上,如果屏蔽了则需要分别到从库上创建上面两个账户

8.Proxysql的多层配置系统

proxysql有一套完整的配置系统 ,方便dba对线上操作,整套配置系统分为三层,顶层为runtime,中间层为memory,底层也就是持久层为disk 和config file,配置结构如下

 

mysql5.7使用ProxySQL实现读写分离

 

runtime:代表当前生效的正在使用的配置,无法直接修改这里的配置,必须从下一层load进来

memory:上层连runtime下面连接持久化,这层是可以正常操作proxysql的配置,随便修改,不会影响生产环境,修改这个配置一般是先在memory中完成的,确认正常后在加载到runtime和持久化到磁盘上

disk 和config file:持久化信息,重启后内存的信息会丢失,所有需要持久化

 

9. 添加主从服务器列表

使用超管用户登录

/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032

use main;

insert into mysql_servers(hostgroup_id,hostname,port) values(10,'10.106.145.181',3306);

insert into mysql_servers(hostgroup_id,hostname,port) values(10,'10.106.145.182',3306);

insert into mysql_servers(hostgroup_id,hostname,port) values(10,'10.106.145.183',3306);

load mysql servers to runtime;

save mysql servers to disk;

mysql5.7使用ProxySQL实现读写分离

 

查询状态

select *from mysql_servers;

mysql5.7使用ProxySQL实现读写分离

 

10. 添加监控账户

set mysql-monitor_username='monitor';

set mysql-monitor_password='monitor';

load mysql variables to runtime;

save mysql variables to disk;

验证

select *from monitor.mysql_server_connect_log;

mysql5.7使用ProxySQL实现读写分离

 

监控正常,没有报错信息

11.配置主从分组信息

show create table mysql_replication_hostgroups;

mysql5.7使用ProxySQL实现读写分离

 

里面write_hostgroup 是写入组编号,reader_hostgroup是读取组编号,我们这里使用10 作为写入组,20为读取组编号

insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup,comment) values(10,20,'proxy');

load mysql servers to runtime;

save mysql servers to disk;

select *from mysql_replication_hostgroups;

mysql5.7使用ProxySQL实现读写分离

 

proxysql 会根据server的read_only的取值来将服务器进行分组, 只读的分配到20(读取组),不是只读的分配到10(写入组)

mysql5.7使用ProxySQL实现读写分离

 

12.配置对外访问账户

对方访问账户默认指定主库,并对该用户开启事务持久化保护

mysql_users表中的transaction_persistent 的字段默认是0,建议在创建完用户之后设置为1,避免发生脏读幻读现象,命令如下

insert into mysql_users(username,password,default_hostgroup) values('zsprox','zsprox',10);

update mysql_users set transaction_persistent=1 where username='zsprox';

load mysql users to runtime;

save mysql users to disk;

验证登录的服务器就是主库(这里登录ip就是我们安装proxysql的服务器地址,一般建议单独安装一台 ,不要和mysql集群中的机器使用一台)

/usr/local/mysql/bin/mysql -uzsprox -pzsprox -h 10.106.145.183 -P 6033 -e "select @@hostname"

mysql5.7使用ProxySQL实现读写分离

 

注意对外端口是6033

13 配置读写分离策略

配置读写分离需要使用mysql_query_rules 表,表中的match_pattern字段就是代表设置的规则,destination_hostgroup字段代表默认指定的分组,Apply代表真正执行的应用规则。

把所有以select开头的语句全部分配到20的读组中,其他都分配到写组10中去

 

insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,'^select.*for update$',10,1);

insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,'^select',20,1);

load mysql query rules to runtime;

save mysql query rules to disk;

 

14 测试读写分离

通过创建对外账户zsproxy连接proxysql登录数据库

命令如下

/usr/local/mysql/bin/mysql -u zsprox -p -h 10.106.145.183 -P 6033

查询一个表

select * from test.b

mysql5.7使用ProxySQL实现读写分离

 

在登录管理端口 查询监控状态

/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032

select *from stats_mysql_query_digest;

 

mysql5.7使用ProxySQL实现读写分离

 

 

在6033端口执行插入操作

insert into b values(20);

再次查询状态

mysql5.7使用ProxySQL实现读写分离

 

 

15 调整权重

读写分离成功后,我们可以调整权重,让某台机器承受更多的读操作,在表mysql_servers上进行设置

update mysql_servers set weight=10 where hostname='10.106.145.181';

load mysql servers to runtime;

save mysql servers to disk;

 

到此读写分离正式配置完毕了



Tags:mysql5.7 ProxySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
ProxySql是mysql的一款中间件产品,是灵活强大的mysql代理层,可以实现读写分离,支持query路由功能,支持动态指定某个sql进行缓存,支持动态加载配置。故障切换和一些sql过滤功能...【详细内容】
2020-05-13  Tags: mysql5.7 ProxySQL  点击:(150)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(7)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(18)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(17)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(21)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(28)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条