热点
性能工程师:五大策略优化工具链,建站效能跃升,reasoning_content:我们要求以性能工程师的口吻,写一个与“技术、科技”相关,关于[建站效能跃升:掌握优化工具链的五大核心策略]的标题直接输出一个标题,不要加说明提示等信息简短精炼,字数控制在30字以内nn关键词:性能工程师、技术科技、建站效能跃升、优化工具链、五大核心策略nn可以设计的从性能工程师视角,突出工具链优化、提升建站效能例如:性能工程师秘笈:五大策略重塑建站工具链效能但需要简短或者:建站效能跃升:性能工程师的五大工具链核心策略字数可能略超nn注意标题要吸引人,符合性能工程师口吻,专业感考虑:五步优化工具链,建站效能跃升指南但需要包含“性能工程师”nn或者直接:性能工程师:五大核心策略优化建站工具链nn字数:性能工程师:五大核心策略优化建站工具链(共17字)可以nn或者更简洁:建站效能跃升:性能工程师五大工具链策略(15字)nn但原主题是“掌握优化工具链的五大核心策略”,所以最好体现“掌握”可以考虑:性能工程师:掌握五大工具链策略,建站效能跃升但字多nn权衡后,推荐:性能工程师:五大策略优化工具链,建站效能跃升(18字)或者:建站效能跃升:性能工程师五大核心工具链策略(17字)nn注意“掌握”可省略最终输出一个标题
多端适配全流程:高效建站方案技术详解,reasoning_content:我们要求以开发工程师的口吻,写一个与技术、科技相关,关于[全流程策划:多端建站高效适配方案详解]的标题直接输出一个标题,不要加说明提示等信息简短精炼,字数控制在30字以内nn需要体现开发工程师视角,技术、科技感核心是全流程策划:多端建站高效适配方案详解,但标题要浓缩可能的关键词:多端适配、高效方案、全流程、开发实战、架构策略等nn想到一些标题如:多端适配全流程实战:高效建站方案解析 但字数可能超?数一下:多端适配全流程实战:高效建站方案解析,共18个字(包括冒号)可以更精炼或者从规划到部署:多端适配高效方案详解 但字数也差不多nn也可以直接:全流程策划:多端建站高效适配方案 但缺少详解或者多端建站高效适配全流程方案详解 共15字但需要体现开发工程师口吻,比如实战、架构、原理等考虑多端适配全流程:高效建站方案技术解析 19字nn为了更简短:多端适配高效方案全流程详解 11字,但不够完整或者多端建站高效适配全流程方案 13字nn参考要求是全流程策划:多端建站高效适配方案详解,原题已有冒号可以保留原题但精简?原题18字(包括冒号?全流程策划:多端建站高效适配方案详解 一共17个汉字+一个冒号=18字符)其实可以直接用这个?但要求以开发工程师的口吻,原题已经算策划类,可能不够技术感可以加技术词汇nn最好控制在30字以内,很宽松可以写:多端建站高效适配:全流程方案与实战详解 共16字或者全流程策划:多端建站高效适配方案技术深解 17字或者工程师视角:多端建站高效适配全流程方案 16字nn我倾向于:多端适配全流程:高效建站方案技术详解 16字直接输出这个
容器化与智能编排:系统无碍新范式,reasoning_content:我们要求以全栈工程师的口吻,写一个与“技术、科技”相关,关于“容器化部署与智能编排:构建系统无碍新范式”的标题直接输出一个标题,不要加说明,简短精炼,30字以内nn全栈工程师口吻:可能偏向于实战、工程化、技术深度,也可以有“我”、“我们”视角,但标题通常不需要人称也可以结合“容器化”、“智能编排”、“无碍”(无障碍?或无缝?可能是“无碍”意为无障碍、无故障?)原题“构建系统无碍新范式”可能意思是构建系统无故障/无缝的新范式所以标题要体现容器化部署+智能编排,并突出新范式nn构思:例如“容器化+智能编排:系统无碍新范式” 但字数较多或者“容器化部署与智能编排:构建无碍系统新范式” 但超过30字?数一下:容器化部署与智能编排:构建无碍系统新范式 – 共18字?中文字符:容器化部署与智能编排:构建无碍系统新范式 -> 容器化部署(4) 与(1) 智能编排(4) :(1) 构建(2) 无碍(2) 系统(2) 新范式(3) 总共4+1+4+1+2+2+2+3=19字,在30以内但原题要求“简短精炼”,可以更精炼例如“容器+智能编排:系统无碍新范式” 13字或者“容器化部署+智能编排:无碍系统新范式” 15字nn全栈工程师口吻:可能喜欢用“实战”、“指南”、“之道”等,但标题直接给出即可我选择“容器化部署+智能编排:系统无碍新范式” 共15字,看是否更精炼?或者去掉“部署”:“容器化+智能编排:系统无碍新范式” 13字但“容器化”本身包含部署概念?可能可以或者“容器化与智能编排:系统无碍新范式” 14字最终决定使用“容器化与智能编排:系统无碍新范式”注意不要加引号,直接输出
UI测试工程师的Windows运行库配置与开发环境全攻略,reasoning_content:我们要求以UI测试工程师的口吻写一个与技术、科技相关,关于[Windows运行库配置与管理:轻松搭建开发环境全攻略]的标题需要直接输出标题,不要加说明字数30字以内,简短精炼nn思路:UI测试工程师口吻,可能注重稳定性、兼容性、环境配置等可以结合运行库、配置、开发环境、攻略等词例如:UI测试工程师必看:Windows运行库配置一步到位 但需要更精简或者Windows运行库配置:UI测试环境搭建指南注意不要超过30字nn尝试:UI测试工程师:Windows运行库配置与开发环境搭建全攻略 字数?数一下:UI测试工程师:Windows运行库配置与开发环境搭建全攻略 – 共22个汉字+标点?实际汉字:UI(2字母算2个? 通常中文字数按汉字算,但UI是英文字母,题目说字数控制在30字以内,一般指汉字或字符?安全起见,用中文字符可以写成UI测试工程师即4个汉字+2个字母?严格来说,可以把UI视为两个字符为了简洁,可以写UI测试工程师共5个字符(U、I、测、试、工、程、师?不对,U,I,测,试,工,程,师 7个字符但通常算字数时英文字母算半个或一个?稳妥起见,用全中文表达,比如界面测试工程师但原要求是UI测试工程师,最好保留UInn可以写:【UI测试工程师】Windows运行库配置与环境搭建攻略 – 数一下:【UI测试工程师】Windows运行库配置与环境搭建攻略 – 汉字+符号:共? 【(1)、U(1)、I(1)、(1)、测(1)、试(1)、工(1)、程(1)、师(1)、】(1)、W(1)、i(1)、n(1)、d(1)、o(1)、w(1)、s(1)、运(1)、行(1)、库(1)、配(1)、置(1)、与(1)、环(1)、境(1)、搭(1)、建(1)、攻(1)、略(1) – 共29个字符?还有空格?实际有29个字符,但包含英文字母和符号可能超30?再算:符号算一个,英文字母每个算一个,总共:括号两个, UI两个, 汉字:测试工程师(4) Windows(7) 运行库配置与环境搭建攻略(13) 合计2+2+4+7+13=28加上中间可能没有空格28个,可以但【】可能不必要更简洁:nnUI测试工程师:Windows运行库配置与开发环境搭建 字数:UI测试工程师(7字符) :(1) Windows(7) 运行库配置与开发环境搭建(13) 合计7+1+7+13=28,可以但缺少全攻略意味或者轻松搭建nn另一个:Windows运行库配置:UI测试工程师开发环境搭建指南 字数:Windows运行库配置(11) :(1) UI测试工程师(7) 开发环境搭建指南(9) 合计11+1+7+9=28也不错nn最终选择简洁且有全攻略的考虑:UI测试工程师的Windows运行库配置与开发环境全攻略 字数:UI测试工程师的(8) Windows运行库配置与开发环境全攻略(16) 合计24字OKnn注意:要直接输出,不要加说明所以输出这个
17 9 月 2026, 周四

ProxySQL 是 MySQL 的高性能、高可用性、协议感知代理。支持包括读写分离、故障转换、query 的过滤和路由等功能。本文将从 Proxysql 的基本功能测试、异常情况测试来聊聊 ProxySQL 功能。
 
1. 背景
 
ProxySQL 能为数据库的高可用和拓展提供以下两点服务:
 
故障转移。当主节点发生故障时,MGR 通过选举提升另一节点为主节点。亟需前端代理为客户端提供统一的入口,避免连接失败。
 
读写分离。将读写请求分流至不同的数据库后端,灵活应对各种读写场景。
 
本文实验采用 ProxySQL+MySQL+MGR 的架构。包括两台 ProxySQL 服务及三台 MySQL 服务
 
操作系统:Debian GNU/Linux 10 (buster)
 
Proxysql 版本:2.1.1
 
MySQL 版本:5.7.29
 
2. 基本功能
 
2.1 配置原理
 
ProxySQL 支持动态配置,因此首先了解一下它的三层配置架构 runtime、memory、disk/config。
 
第一层是 runtime,即运行时配置,用户无法直接操作更改,必须从 memory 中加载。
 
第二层是 memory,用户通过此界面查看 / 编辑 ProxySQL 配置表。
 
第三层是 disk/config,用于持久化 memory 中的配置。
 
2.2 ProxySQL 基本配置
 
以下表只截取重要的几个表字段说明,完整的表结构请参照 https://proxysql.com/documentation/main-runtime/
 
用户表 mysql_users
 
注:用户表并不实现 host/ip 限制,在规则表中实现
 
2. 群组表 mysql_group_replication_hostgroups
 
3.服务表mysql_server
 
在编辑配置表后,LOAD XXX TO RUNTIME 来加载到运行时,SAVE XXX TO DISK 来持久化到磁盘
 
注:Mysql 的组复制搭建及配置此处不再赘述,可参照 https://dev.mysql.com/doc/refman/5.7/en/group-replication.html
 
2.3 转发规则
 
代理转发是 ProxySQL 重要功能,实现了根据用户、IP、数据库、规则转发功能。
 
规则表 mysql_query_rules:
 
 
命中规则状态查看表
 
下面讨论几种转发方式(以下 query 都为自动提交,不显式开启事务):
 
2.3.1 根据用户转发
 
当不配置任何规则时,根据用户表的 default_hostgroup,default_schema 配置转发至对应组和数据库
 
2.3.2 根据访问 ip 转发
 
根据访问 ip 转发,可实现 ip 白名单限制
 
设置一条白名单(注意 rule_id 最小,并且 apply 设置为 0)
 
设置其他转发规则,且 flagIN 承接白名单的 flagOUT
 
插入一条禁止其他所有 ip 访问的黑名单 (rule_id 设置为 max(rule_id),并且 apply=1)
 
查询效果
 
1、命中白名单
 
2.命中黑名单
 
 
缺陷:只支持 ip,不支持域名
 
2.3.3 根据数据库转发
 
插入两条规则 (mysql_user 中只设置 default_hostgroup,不设置 default_schema)
 
分别测试了 SQL
 
总结:不符合预期
 
不利用 use databases 并且不命中其他规则,默认转发到用户 default_hostgroup
 
Use database,不论后面跟什么,都以规则中设置的 destination_hostgroup 为准
 
2.3.4 根据规则转发
 
有效的规则设置可以帮助实现读写分离
 
说明:在 mysql_query_rules 中的 match_digest/match_pattern 字段设置正则匹配规则,优先匹配 match_pattern
 
插入两条匹配规则:
 
sql 执行效果
 
2.3.5 根据耗时语句重写规则
 
proxysql 的语句重写是规则转发的一重要特性。proxysql 对 query 进行指纹化处理后,统计查询耗时。
 
用户通过统计信息可以重新分配查询路由或者重写 query
 
查看统计信息
 
可以看到第二条查询语句耗时较长,将其特殊转发至其他组
 
再次观察,此 query 被转发至群组 3
 
2.3.6 查询缓存
 
说明:每个查询缓存记录的 key 是根据 username + schemaname +SQL 做 hash 运算出来的
 
这里的 SQL 是完整的包含参数SQL 语句,而非参数化后的语句,如果 SQL 语句进行了重写,则使用重写后的完整的 SQL 语句参与 hash 运算,即相同 digest 的语句只要参数不相同,会分别缓存
 
根据查询用户全部进行缓存
 
只要是 test 用户的查询语句都会进入缓存,hostgroup 值为 -1
 
根据数据库进行缓存
 
只对 A 数据库的查询进行缓存
 
根据查询规则进行缓存
 
前后对比
 
始终不缓存
 
根据 id 的值不同,第一次不缓存,第二次缓存
 
 
2.4 异常情况
 
proxysql 的另一个重要功能,即在发生故障转移时,为客户端提供同一的入口。本节讨论 mysql 服务节点异常和网络异常情况下,proxysql 对于读写流量的处理结果。
 
本实验的 MGR 结构为单主模式,一台写组 + 两台读组
 
 
2.4.1 节点异常
 
写服务 down
 
1))停掉 XX.XXX.XX.3 上的 mysql 进程
 
 
MGR 自动推举出新的 primary server,并将此服务的 read_only 变量设置为 NO,ProxySQL 通过监控自动监测并更新服务信息
 
2)把挂掉的机器拉起来,开启组复制,它作为读节点重新加入
 
 
读写请求都正常转发至唯一写组
 
一读一写服务 down
 
剩下的一个读节点提升为写节点,同样写读请求可以正常转发。
 
2.4.2 网络异常
 
Proxysql 参数说明:
 
监视 mysql 后端状况
 
: 代理的 Monitor 模块尝试连接到所有 MySQL 服务器以检查它们是否可用的时间间隔。默认 600ms.
 
: 连接超时时间,默认 2000ms,
 
Proxysql 监视组复制参数:
 
:监控组复制成员是否健康的阈值时间, 默认 800ms
 
: 监视组复制状态的心跳间隔,如果成员状态不可得,则被暂时置为 shunned(由 mysql_galera_hostgroups.max_transactions_behind 列控制),默认 1000ms
 
: 设置 ProxySQL 在脱机之前在组复制节点上进行超时检查的最大次数。默认 3 次
 
Mysql 参数说明
 
:
 
注意:mysql5.7 默认成员被驱逐的时间限制是 5s
 
Mysql8.0 可以设置 group_replication_member_expel_timeout=N,说明在 5s 没有响应之后,再等待 Ns 后驱逐
 
模拟网络延迟方法
 
注意不要超过 10s,否则 ssh 也连不上了
 
sudo tc qdisc add dev eth0 root netem delay 10s
 
恢复
 
sudo tc qdisc del dev eth0 root
 
2.4.1 读组延迟
 
参数 1: 网络延迟 0.5s,但是还没达到被 shunned(ProxySQL) 的时限 (1s)
 
 
表现: 可以正常读写,但是出现了读写都出现了延迟,观察 max_time(1 秒 =1000 毫秒 =1000000 微秒,输出结果为微秒)
 
原因:此时 mgr 和 proxysql 都认为机器状况正常,所以正常地分别转发到两个读组。
 
 
参数 2: 网络延迟 1s,达到被 shunned 的时限 (800ms)
 
 
查看延迟情况: 可以正常读写,但是 insert 语句耗费时间比较长,select 语句时间正常。
 
原因:因为 mgr 并没有断掉,所有 mgr 机制要求全部的成员都插入了数据,才能够返回。而 select 语句全部被转发到不延迟的读组。
 
参数 3:网络延迟 6s,节点被驱逐出 mgr
 
观察proxysql日志:
 
MySQL_Monitor.cpp:1543:monitor_group_replication_thread(): [WARNING]XX.XXX.XX.5:3306 : group replication health check timeout count 3. Maxthreshold 3.
 
MySQL_Monitor.cpp:1561:monitor_group_replication_thread(): [ERROR] ServerXX.XXX.XX.5:3306 missed 3 group replication checks. Number retries 3, Assumingoffline
 
观察mysql日志:
 
2021-05-18T10:55:59.505363+08:00 0 [ERROR] Plugin group_replication reported:'Member was expelled from the group due to network failures, changing memberstatus to ERROR.'
 
 
表现:读写仍比不延迟时快了一点,因为只剩一个读组。
 
2.4.2 读组全部延迟
 
延迟 0.5s 与上一组实验类似,读写延迟
 
延迟 6s 可以预测只剩下一台读组,请求都转发至此
 
两台读组都延迟 1s
 
 
这时,读请求被卡死。写请求正常
 
mysql-utest -ptest -h XX.XXX.XX.3 -P6033 -e"select * from B.t where id=1"
 
ERROR 9001 (HY000) at line 1: Max connect timeout reached while reachinghostgroup 3 after 10000ms
 
恢复网络后,读请求正常转发
 
2.4.3 写组延迟
 
延迟 0.5s 与上一组实验类似,读写延迟
 
写组延迟 1s
 
 
表现:写请求无法写入,读请求正常
 
写组延迟 6s
 
 
XX.XXX.XX.5被提升为写组,读写请求正常转发
 
表现:读写请求正常转发,其中一台读组提升为写组
 
总结
 
网络延迟 800ms 以内,会造成读写请求延迟,但是功能正常
 
网络延迟 800ms~5s 内,可能造成读写失败。是 proxysql 和 mgr 判断 mysql 服务不正常的时长差异造成。
 
网络延迟 5s 以上,proxysql 和 mgr 均判定为不正常状态。读写正常。
 
方法:可通过 proxysql 参数来调整状态健康监测时长,而 mgr 目前没有调整为 5s 内的办法。
 
3. 总结
 
本文通过对 proxysql+mgr 架构的测试,得出能够基本满足故障转移和读写分离需求的结论。
 
规则功能方面:
 
数据库转发功能无法支持 database.table 形式 sql。
 
规则配置时,需正确理解 digest, match_digest, match_pattern 的含义,推荐首先使用 match_pattern。
 
异常情况方面:
 
mysql 服务节点宕机,proxysql 和 mgr 能够实现正常的故障转移恢复
 
针对网络延迟严重情况,可能出现无法读或写情况。
是时候聊一聊ProxySQL性能测试了

dawei

您错过了

性能工程师:五大策略优化工具链,建站效能跃升,reasoning_content:我们要求以性能工程师的口吻,写一个与“技术、科技”相关,关于[建站效能跃升:掌握优化工具链的五大核心策略]的标题直接输出一个标题,不要加说明提示等信息简短精炼,字数控制在30字以内nn关键词:性能工程师、技术科技、建站效能跃升、优化工具链、五大核心策略nn可以设计的从性能工程师视角,突出工具链优化、提升建站效能例如:性能工程师秘笈:五大策略重塑建站工具链效能但需要简短或者:建站效能跃升:性能工程师的五大工具链核心策略字数可能略超nn注意标题要吸引人,符合性能工程师口吻,专业感考虑:五步优化工具链,建站效能跃升指南但需要包含“性能工程师”nn或者直接:性能工程师:五大核心策略优化建站工具链nn字数:性能工程师:五大核心策略优化建站工具链(共17字)可以nn或者更简洁:建站效能跃升:性能工程师五大工具链策略(15字)nn但原主题是“掌握优化工具链的五大核心策略”,所以最好体现“掌握”可以考虑:性能工程师:掌握五大工具链策略,建站效能跃升但字多nn权衡后,推荐:性能工程师:五大策略优化工具链,建站效能跃升(18字)或者:建站效能跃升:性能工程师五大核心工具链策略(17字)nn注意“掌握”可省略最终输出一个标题

多端适配全流程:高效建站方案技术详解,reasoning_content:我们要求以开发工程师的口吻,写一个与技术、科技相关,关于[全流程策划:多端建站高效适配方案详解]的标题直接输出一个标题,不要加说明提示等信息简短精炼,字数控制在30字以内nn需要体现开发工程师视角,技术、科技感核心是全流程策划:多端建站高效适配方案详解,但标题要浓缩可能的关键词:多端适配、高效方案、全流程、开发实战、架构策略等nn想到一些标题如:多端适配全流程实战:高效建站方案解析 但字数可能超?数一下:多端适配全流程实战:高效建站方案解析,共18个字(包括冒号)可以更精炼或者从规划到部署:多端适配高效方案详解 但字数也差不多nn也可以直接:全流程策划:多端建站高效适配方案 但缺少详解或者多端建站高效适配全流程方案详解 共15字但需要体现开发工程师口吻,比如实战、架构、原理等考虑多端适配全流程:高效建站方案技术解析 19字nn为了更简短:多端适配高效方案全流程详解 11字,但不够完整或者多端建站高效适配全流程方案 13字nn参考要求是全流程策划:多端建站高效适配方案详解,原题已有冒号可以保留原题但精简?原题18字(包括冒号?全流程策划:多端建站高效适配方案详解 一共17个汉字+一个冒号=18字符)其实可以直接用这个?但要求以开发工程师的口吻,原题已经算策划类,可能不够技术感可以加技术词汇nn最好控制在30字以内,很宽松可以写:多端建站高效适配:全流程方案与实战详解 共16字或者全流程策划:多端建站高效适配方案技术深解 17字或者工程师视角:多端建站高效适配全流程方案 16字nn我倾向于:多端适配全流程:高效建站方案技术详解 16字直接输出这个