首页/数据/数据库速查/ProxySQL 中间件概念与用途
主从复制与高可用53 条

ProxySQL 中间件概念与用途

高性能 MySQL 代理:读写分离、连接池、查询路由与规则、故障自动摘除;以「后端主机组 + 查询规则」模型工作,配置落在自身库中。

数据库速查数据更新于 2026-10-13

ProxySQL 是什么

ProxySQL 是高性能 MySQL 协议代理,工作在应用与数据库之间。它的模型是「后端主机组 + 查询规则」:把主库与从库分别放进主机组,再用规则决定什么语句去读组、什么语句去写组,从而实现不改应用代码的读写分离,同时提供连接复用、节点健康检查与故障摘除。配置存在它自带的 SQLite 库中,通过管理端口用 SQL 语句修改,改完要显式加载到运行时并保存到磁盘。

基本信息

核心模型hostgroup(写组 / 读组)+ mysql_query_rules 查询规则
管理端口默认 6032,用 mysql 客户端即可登录管理
主要能力读写分离、连接池复用、查询规则路由、后端健康检查、查询缓存(视版本与配置)
配置生效LOAD ... TO RUNTIME 立即生效 + SAVE ... TO DISK 持久化
典型位置应用与后端实例之间,常与主从复制配合

典型使用场景

  • 读写分离:读语句自动路由到只读组,写语句固定发往写组
  • 连接数收敛:前端几百个应用连接被复用到后端少量连接,降低数据库连接压力
  • 故障摘除:后端实例不健康时自动从主机组中移出,避免持续打向坏节点
  • 灰度分流:按库或按用户把部分流量导向新实例做验证
  • SQL 级治理:对特定规则命中后的语句设置超时或路由到专用组

管理接口速览

管理接口速览
-- 用 mysql 客户端连管理端口 6032(不是业务端口)
SELECT * FROM mysql_servers;                    -- 后端实例清单
SELECT * FROM mysql_replication_hostgroups;     -- 写组与读组映射
SELECT * FROM mysql_query_rules WHERE active=1; -- 生效中的路由规则
SELECT hostgroup, srv_host, status FROM runtime_mysql_servers;  -- 运行时状态
-- 规则改完后必须显式生效与持久化
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

常用表读法

表含义注意
mysql_servers磁盘上的后端实例配置改这里只是改配置,不生效
runtime_mysql_servers运行时实际使用的实例status 为 ONLINE 才接流量
mysql_query_rules路由规则定义rule_id 越大越优先,顺序写错会误路由
mysql_users代转发用的数据库账号代理侧账号权限按需最小化
stats_mysql_query_digest按语句模板聚合的统计定位热点语句与路由效果
只改 mysql_* 表不会立即影响线上流量,必须 LOAD 到 runtime 才生效;反过来只 LOAD 不 SAVE,重启后配置回滚,行为突然变化。
代理不解析业务语义,规则匹配靠语句模板与正则。上规则前在测试环境用同一批语句验证命中情况,比在生产上试错安全得多。

易错点

  • 规则写错把写语句路由到只读组:直接报只读错误,接口大面积失败,规则务必先在测试环境验证
  • 只执行 LOAD 不执行 SAVE:实例重启后配置回到旧状态,表现为「上线好的功能突然失效」
  • 把代理当连接池就万事大吉:后端连接数仍受 mysql_servers 里 max_connections 约束,配置过小会出现排队与超时
  • 健康检查阈值过激:后端抖动一次就被摘除,流量瞬间压到剩余节点引发连锁故障
  • 管理端口暴露在公网:6032 里可以直接改后端与规则,必须限制来源并单独设强口令

数据来源与参考

  • ProxySQL 官方文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌