基于proxysql实现MySQL读写分离
前言
环境:
- 系统版本:CentOS 7
- MySQL版本:5.7.35
MySQL主从配置略过。
安装
# 安装
yum localinstall -y ./proxysql-2.2.0-1-centos7.x86_64.rpm
# 启动
systemctl start proxysql
配置
客户端口号: 6033。代理 mysql 服务的端口,也就是应用连接使用的
管理端口号: 6032。管理 proxysql配置 的端口,只能本地登录
# 1. 登录管理端
mysql -uadmin -padmin -h127.0.0.1 -P6032
# 2. 配置主从库
use main;
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(1,'192.168.0.10',3306,1,'master1');
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(2,'192.168.0.11',3306,1,'slave1');
# 2.2 检查添加结果
select * from main.mysql_servers;
# 2.3 加载配置到RUNTIME
load mysql servers to runtime;
# 2.4 写盘保存
save mysql servers to disk;
# 3. 配置proxysql客户端账户密码。
# 设置所有请求默认到hostgroupid为1的实例然后再根据路由分发
# transaction_persistent为1开启事务支持
insert into mysql_users(username,password,default_hostgroup,transaction_persistent)values('root','123456',1,1);
# 3.2 查询账户添加结果
select * from mysql_users;
# 3.3 保存
load mysql users to runtime;
save mysql users to disk;
# 4. 配置健康检测账号
# 4.1 登录后端master的mysql控制台
GRANT replication client ON *.* TO 'monitor'@'%' IDENTIFIED BY '123456';
flush privileges;
# 4.2 切换回proxy的控制台
set mysql-monitor_username='monitor';
set mysql-monitor_password='123456';
load mysql variables to runtime;
save mysql variables to disk;
# 5. 配置读写分离路由
# 将select语句全部路由至hostgroup_id=2的组,也就是从节点
# select * from tb for update这样的语句是修改数据的,所以需要单独定义,将它路由至hostgroup_id=1的组(也就是主节点)
# 其他没有被规则匹配到的组将会被路由至用户默认的组(mysql_users表中的default_hostgroup)
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,'^SELECT.*FOR UPDATE$',1,1);
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',2,1);
load mysql query rules to runtime;
load admin variables to runtime;
save mysql query rules to disk;
save admin variables to disk;
测试读写分离
- 登录客户端
mysql -uroot -p'123456' -P6033 -h 127.0.0.1
# 随便执行点sql语句
- proxysql有个类似审计的功能,可以看到各类sql的执行情况。在proxysql管理端执行:
select * from stats.stats_mysql_query_digest;
-- 或者 select hostgroup,schemaname,digest_text,count_star,sum_time,min_time,max_time,sum_rows_affected,sum_rows_sent from stats.stats_mysql_query_digest;
其它
- 修改proxysql后台处理MySQL流量的后台线程数。默认为4
set mysql-threads=16;
-- 查看
show variables like '%mysql-threads%';
参考文章
基于proxysql实现MySQL读写分离的更多相关文章
- ProxySQL实现Mysql读写分离 - 部署手册
ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎.ProxySQL是用C++语言开发的,也是percona推的一款中间件,虽然也是一个轻量级产品,但性能很好(据测试,能处理千亿级的数 ...
- mysql中间件proxysql实现mysql读写分离
目录 1. mysql实现读写分离的方式 2. ProxySQL简介 3. ProxySQL安装 4. ProxySQL的Admin管理接口 5. 和admin管理接口相关的变量 5.1 admin- ...
- 基于Atlas实现mysql读写分离
一.实验环境 主机名IP地址 master192.168.200.111 slave192.168.200.112 atlas192.168.200.113 主从复制不再赘述,链接地址:授权Atlas ...
- 基于MYCAT中间件实现MYSQL读写分离
基于mycat实现mysql读写分离 完成主从复制的配置 /* 主节点:192.168.47.101 从节点:192.168.47.102 */ /*mycat为同一网段客户端*/ /* 修改主节点基 ...
- ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录
前面的文章介绍了ProxySQL用法,这里说下ProxySQL中间件针对Mysql组复制模式实现读写分离以及主节点故障时能够自动切换到新的主节点,而应用对此过程无感知的功能.Mysql组复制(MGR) ...
- [记录]MySQL读写分离(Atlas和MySQL-proxy)
MySQL读写分离(Atlas和MySQL-proxy) 一.阿里云使用Atlas从外网访问MySQL(RDS) (同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景) 1.在跳板机 ...
- mysql读写分离总结
随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应用于很多大型网站,这个技 ...
- Mysql读写分离-Amoeba Proxy
参考:http://www.linuxidc.com/Linux/2015-10/124115.htm 一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database pr ...
- 构建高性能web之路------mysql读写分离实战(转)
一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 在本次实战中,应用程序client基于c3p0连接后端的database ...
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
随机推荐
- 2022-11-12:以下rust语言代码中,结构体S实现了crate::T1::T2的方法,如何获取方法列表?以下代码应该返回[“m1“,“m2“,“m5“],顺序不限。m3是S的方法,但并不属于c
2022-11-12:以下rust语言代码中,结构体S实现了crate::T1::T2的方法,如何获取方法列表?以下代码应该返回["m1","m2"," ...
- 2020-06-11-ASP.NET Core Blazor 子组件父组件数据同步的问题
上一篇写数据绑定的文章,写到最后留了一个坑.当子组件绑定父组件的一个字段,并且子组件修改它的时候父组件不能实时进行同步更新UI的问题,最近终于在Blazui作者的指导下搞定了. UserInfo类要实 ...
- Python基础 - 标识符命名规范
标识符是什么? 标识符主要用来给变量名,函数名,方法名,类名起名时要遵循的规范 硬性规则 见名知意(使用中文转译后的英文) 由字母,数字,下划线组成, 并且不能以数字开头, 不能和Python关 ...
- iOS气泡提示工具BubblePopup的使用
在平时的开发中,通常新手引导页或功能提示页会出现气泡弹窗来做提示.如果遇到了这类功能通常需要花费一定的精力来写这么一个工具的,这里写了一个气泡弹窗工具,希望能帮你提升一些开发效率. 使用方法 ...
- 驱动开发:内核LoadLibrary实现DLL注入
远程线程注入是最常用的一种注入技术,在应用层注入是通过CreateRemoteThread这个函数实现的,该函数通过创建线程并调用 LoadLibrary 动态载入指定的DLL来实现注入,而在内核层同 ...
- Hive常见时间日期函数的使用与问题整理
这里整理一下Hive常见的时间函数和日期函数和用法,作为平时数据处理过程的一个检索和记录. 平时在数据处理过程中,如果不经常使用时间函数,一时间遇到一些时间上的处理,难免会想不起来. hive本身提供 ...
- 爆肝万字带你超级详细全面了解Linux命令大全
前言 作者主页:CSDN丨博客园 学习交流:在下周周ovoの社区 对这篇万字博客目录总结如下: 关机命令.重启命令,创建用户.删除用户.修改密码.切换用户.切换到超级用户.禁用/解锁用户账户.修改信息 ...
- Terraform 系列-使用 for-each 对本地 json 进行迭代
系列文章 Terraform 系列文章 Grafana 系列文章 概述 前文 Grafana 系列 - Grafana Terraform Provider 基础 介绍了使用 Grafana Terr ...
- 开发中MongoDB遇到的各种问题
目录 一.安装6版本以下 二.安装6版本及以上 三.安装6版本以下(解压版) 四.配置本地 Windows MongoGB 服务 五.navicat 连接远程mongodb数据库 六.ip不一致问题 ...
- [solved] login to server failed: EOF
问题 frp 报错:login to server failed: EOF 解决方案 客户端配置 common 下 添加 tls_enable = true [common] tls_enable = ...