当前位置: 首页 > news >正文

基于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;

测试读写分离

  1. 登录客户端
mysql -uroot -p'123456' -P6033 -h 127.0.0.1
# 随便执行点sql语句
  1. 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%';
http://www.dtcms.com/a/252560.html

相关文章:

  • 1:9.7p1-7ubuntu4.3 安全加固升级9.9p2-2_SSH
  • SpringBoot 插件化架构的4种实现方案
  • 指针篇(2)- const修饰,野指针,assert断言,指针的使用和传址调用
  • Happy-LLM 第一章 NLP概述
  • Java并发编程实战 Day 25:秒杀系统的并发设计与实现
  • 电路图识图基础知识-卧式万能铣床识图详解(二十九)
  • 获取ip地址安全吗?如何获取静态ip地址隔离ip
  • 小程序还没有上线就提示小程序违规,支付失败
  • C++设计模式与软件工程
  • 【CompletableFuture】CompletionStage、创建子任务、设置的子任务回调钩子(二)
  • 如何使用joomla5缓存来加速网页加载速度
  • 六.架构设计之存储高性能——缓存
  • MySQL知识小结(二)
  • OSPF 配置全攻略:从基础原理到实战演练
  • 湖北理元理律师事务所:债务优化中的法律理性与人文关怀
  • FastAPI:(7)路劲操作配置与JSON编码兼容
  • 基于yolov8的苹果病虫害识别与预警系统【附源码】
  • 视频编码怎么选?H.264、H.265、VP9、AV1全解析
  • [Python] 使用 Python 提取 PPT 中不同 Shape 类型文本的技巧与性能权衡
  • Java八股文——MySQL「事务篇」
  • Spring Boot集成Kafka全攻略:从基础配置到高级实践
  • FlinkCDC-Hudi数据实时入湖原理篇
  • Java Wed应用---商城会员管理
  • 算法 学习 双指针 2025年6月16日11:36:24
  • 【SQLite3】渐进式锁机制
  • Vite的核心概念
  • 汽车总线安全研究系列—CAN(FD)渗透测试指南
  • RGB解码:神经网络如何通过花瓣与叶片的数字基因解锁分类奥秘
  • spring如何解决循环依赖问题
  • 三星内置远程控制怎样用?三星手机如何远程控制其他品牌的手机?