MySQL-ProxySQL中间件(一)| ProxySQL基本概念
目录
ProxySQL
安装

连接ProxySQL

ProxySQL 运行机制
RUNTIME
MEMORY
mysql_servers - ProxySQL连接到的后端服务器列表
mysql_users - 连接到ProxySQL的用户及其凭据列表。 请注意,ProxySQL也将使用相同的凭据连接到后端服务器!
mysql_query_rules - 将流量路由到各种后端服务器时评估的查询规则列表。 这些规则还可以重写查询,甚至可以缓存已执行查询的结果。
global_variables - 代理配置使用的全局变量列表,可在运行时调整。
DISK 和 CONFIG FILE

启动过程
配置文件有4个变量,即使存在proxysql.db,也始终会从配置文件里去解析:
1. datadir:
定义了ProxySQL datadir的路径,其中存储了数据库文件,日志和其他文件
2. restart_on_missing_heartbeats(1.4.4中的新增内容):
如果MySQL线程错过了restart_on_missing_heartbeats心跳,则proxysql将引发SIGABRT信号并重新启动。 默认值为10。
详情请见:https://github.com/sysown/proxysql/wiki/Watchdog。
3. execute_on_exit_failure(1.4.4中的新增内容):
如果设置,ProxySQL父进程将在每次ProxySQL崩溃时执行定义的脚本。 建议使用此设置生成警报或记录事件。
请注意,在崩溃的情况下,proxysql能够在几毫秒内重新启动,因此其他监视工具可能无法检测到正常故障。
4. errorlog(2.0.0中的新增内容):
如果设置,ProxySQL将使用定义的文件作为错误日志。 如果未传递此类变量,则errolog将位于datadir / proxysql.log中
初始化启动过程(或--initial)
重新加载启动(或--reload)
如果使用--reload标志执行proxysql,它会尝试将配置文件中的配置与数据库文件的内容合并。 之后,ProxySQL将继续启动程序。
如果配置文件和数据库文件的参数存在冲突,则无法保证ProxySQL将成功管理合并,用户应始终验证合并结果是否符合预期。
核心配置表
mysql> show tables; +-------------------+ | tables | +-------------------+ | mysql_servers | | mysql_users | | mysql_query_rules | | global_variables | | mysql_collations | | debug_levels | +-------------------+
每个这样的表都有明确的定义:
mysql_servers: 包含要连接的ProxySQL的后端服务器列表
mysql_users: 包含ProxySQL将用于向后端服务器进行身份验证的用户列表
mysql_query_rules: 包含用于缓存,路由或重写发送到ProxySQL的SQL查询的规则
global_variables: 包含在服务器初始配置期间定义的MySQL变量和管理变量
debug_levels: 仅用于调试ProxySQL的手动构建
在不同层级间移动配置信息

要重新配置MySQL用户,请执行以下命令之一:
[1] LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME
将MySQL用户从MEMORY加载到RUNTIME数据结构,反之亦然
[2] SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME
将MySQL用户从RUNTIME保存到MEMORY
[3] LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK
将持久化的MySQL用户从磁盘数据库加载到MEMORY
[4] SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK
将MySQL用户从MEMORY中保存到DISK
[5] LOAD MYSQL USERS FROM CONFIG
从配置文件加载用户到MEMORY
常用的命令参考:
LOAD MYSQL USERS TO RUNTIME; SAVE MYSQL USERS TO DISK; LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; LOAD MYSQL QUERY RULES TO RUNTIME; SAVE MYSQL QUERY RULES TO DISK; LOAD MYSQL VARIABLES TO RUNTIME; SAVE MYSQL VARIABLES TO DISK; LOAD ADMIN VARIABLES TO RUNTIME; SAVE ADMIN VARIABLES TO DISK; 注意:关键字MEMORY/RUNTIME 都支持缩写: MEM for MEMORY RUN for RUNTIME
故障排除
常用的一些命令技巧
1. 限制ProxySQL到后端MySQL的连接数通过权重,来控制ProxySQL到后端MySQL的访问量

2. 自动回避复制延迟较大的节点

3. Master Slave,将Master作为Slave的备用读节点
注意:max_replication_lag仅适用于从节点。 如果服务器未启用复制,则Monitor不会执行任何操作。
4. 优雅的禁用后端Server

5. 立即禁用后端Server

6. 重新启用脱机/禁用后端Server

7. 删除后端Server

8. 将明文密码转换成Hash密码,配置到ProxySQL中的mysql_users表

9. 限制User和ProxySQL之间的连接数

10. 同个事务内的SQL,禁止被路由到不同节点上

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战