ProxySQL 多业务接口与功能配置指南
ProxySQL 多业务接口配置指南

ProxySQL 是一款功能强大的高性能MySQL代理,它允许用户通过灵活的配置来管理和路由数据库流量。其中一项重要的功能是支持监听多个网络接口和端口,从而为不同的应用或业务场景提供独立的连接接入点。本文将详细介绍如何在ProxySQL中配置和启用多个业务接口。

核心配置参数:mysql-interfaces

ProxySQL通过全局变量 mysql-interfaces 来定义其监听的客户端连接请求的网络接口和端口。这个变量接受一个以分号分隔的字符串列表,每个字符串代表一个 IP地址:端口号 的组合。例如,配置ProxySQL同时监听本地所有IP地址的6033端口和6034端口,可以将 mysql-interfaces 设置为 “0.0.0.0:6033;0.0.0.0:6034″。如果希望监听特定的IP地址,也可以进行相应配置,如 “192.168.1.100:6033;10.0.0.10:6034″。

需要特别注意的是,mysql-interfaces 是少数几个在运行时无法动态修改的全局变量之一。对其进行更改后,必须重启ProxySQL服务才能使新的配置生效。

配置步骤详解

以下步骤将指导您如何通过ProxySQL的管理接口来配置多个业务接口:

  1. 连接到ProxySQL管理接口: 首先,您需要使用MySQL客户端连接到ProxySQL的管理接口。默认情况下,管理接口监听在6032端口。您可以使用类似如下的命令进行连接(请根据您的实际用户名和密码进行替换):

mysql -u admin -padmin_password -h 127.0.0.1 -P 6032 –prompt=’ProxySQLAdmin> ‘

  • 设置 mysql-interfaces 变量: 连接成功后,通过 SET 命令修改 mysql-interfaces 全局变量的值。例如,如果您希望ProxySQL监听在所有网络接口的6033端口和6034端口,可以执行:

SET mysql-interfaces=’0.0.0.0:6033;0.0.0.0:6034′;

或者,如果您只想在特定的IP地址上监听,例如 192.168.0.100 的 3306 和 3307 端口:

SET mysql-interfaces=’192.168.0.100:3306;192.168.0.100:3307′;

  • 保存配置到磁盘: 为了确保ProxySQL重启后配置依然生效,需要将当前的运行时配置保存到磁盘。执行以下命令:

SAVE MYSQL VARIABLES TO DISK;

  • 重启ProxySQL服务: 如前所述,mysql-interfaces 的更改需要重启ProxySQL才能生效。在管理接口中执行:

PROXYSQL RESTART;

或者,您也可以通过操作系统的服务管理工具(如 systemctl restart proxysql)来重启ProxySQL进程。

基于端口的流量路由

配置了多个业务接口后,您可能希望将来自不同端口的连接请求路由到不同的后端MySQL服务器集群(Hostgroups)。这可以通过在 mysql_query_rules 表中定义规则,并利用 proxy_port 字段来实现。

例如,假设您已经配置了两个后端主机组:hostgroup 1 用于写操作,hostgroup 2 用于读操作。现在,您希望所有通过 6033 端口进来的连接都路由到 hostgroup 1,所有通过 6034 端口进来的连接都路由到 hostgroup 2。可以插入如下查询规则:

INSERT INTO mysql_query_rules (rule_id, active, proxy_port, destination_hostgroup, apply) VALUES
(10, 1, 6033, 1, 1),
(20, 1, 6034, 2, 1);

  • rule_id: 规则的唯一标识。
  • active: 设置为1表示启用该规则。
  • proxy_port: 指定该规则应用于哪个ProxySQL监听端口的流量。
  • destination_hostgroup: 指定匹配该规则的流量将被路由到的目标主机组ID。
  • apply: 设置为1表示应用该规则并停止处理后续规则(对于这种明确的端口路由场景)。

插入规则后,需要将规则加载到运行时并保存到磁盘:

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

注意事项与最佳实践

  • 适用场景:配置多个业务接口在以下场景中非常有用:
    • 为不同的应用程序或服务提供隔离的数据库接入点。
    • 实现基于端口的读写分离,应用层可以直接连接到不同的端口来区分读写请求。
    • 在迁移过程中,可以逐步将应用切换到新的端口,而旧端口仍然可用。
  • 端口数量管理:虽然ProxySQL支持配置多个监听端口,但过多的端口可能会增加管理的复杂性。在某些情况下,例如需要为大量不同的数据库(schemas)提供路由,可以考虑使用单一监听端口,并结合 mysql_query_rules_fast_routing 表基于 schemaname 进行路由,或者使用更复杂的查询规则来区分流量。这种方式可以简化客户端配置,并将路由逻辑集中在ProxySQL内部。
  • IP地址绑定:使用 0.0.0.0 会使ProxySQL监听在所有可用的网络接口上。如果您的服务器有多个网络接口,而您只想让ProxySQL在特定的接口上提供服务,请明确指定该接口的IP地址。
  • 防火墙配置:确保您的防火墙规则允许外部连接到您在 mysql-interfaces 中配置的所有新端口。
  • 监控与测试:配置完成后,务必从客户端测试连接到所有新配置的业务接口,并验证流量是否按照预期路由到正确的后端主机组。

总结

ProxySQL通过 mysql-interfaces 参数和灵活的查询规则,为用户提供了强大的多业务接口配置能力。通过合理规划和配置,您可以有效地管理不同来源的数据库连接请求,实现流量隔离、读写分离以及更精细化的路由控制。记住,对 mysql-interfaces 的修改需要重启ProxySQL服务,并在配置后进行充分的测试以确保其按预期工作。

ProxySQL 监控故障排查与解决指南

ProxySQL 全面故障排查与解决指南

ProxySQL 作为一款强大的 MySQL 代理工具,在高可用架构中扮演着至关重要的角色。然而,在实际运维过程中,可能会遇到各种问题,如后端服务器状态监控异常、连接池问题、查询路由失效等。本指南提供了一套系统化的 ProxySQL 故障排查方法,帮助您快速定位和解决问题。

排查流程概览

ProxySQL 故障排查应遵循以下基本流程:

  1. 基础状态检查:验证 ProxySQL 进程状态和基本连通性
  2. 后端服务器状态检查:检查 MySQL 服务器在 ProxySQL 中的状态
  3. 监控模块检查:验证健康检查机制是否正常工作
  4. 连接池状态分析:检查连接池使用情况和错误统计
  5. 查询路由与规则检查:验证查询路由规则是否正确应用
  6. 日志分析:检查 ProxySQL 日志和监控日志
  7. 配置一致性检查:确认配置在内存、运行时和磁盘间的一致性
  8. 性能指标分析:检查关键性能指标
  9. 解决方案实施:应用针对性解决方案
  10. 验证与监控:验证解决方案效果并持续监控

1. 基础状态检查

1.1 ProxySQL 进程状态检查

# 检查 ProxySQL 进程是否运行
ps aux | grep proxysql

# 检查 ProxySQL 服务状态(如果使用 systemd)
systemctl status proxysql

# 检查 ProxySQL 监听端口
netstat -tlnp | grep proxysql
# 或
ss -tlnp | grep proxysql

说明:首先确认 ProxySQL 进程是否正常运行。通常,ProxySQL 会监听多个端口:

  • 默认 MySQL 客户端端口:6033
  • 管理接口端口:6032
  • 可能的其他自定义端口

1.2 基本连通性测试

# 测试管理接口连接
mysql -u admin -padmin -h 127.0.0.1 -P 6032 --prompt='ProxySQL Admin> '

# 测试客户端接口连接
mysql -u <用户名> -p<密码> -h 127.0.0.1 -P 6033 --prompt='ProxySQL> '

说明:验证是否能成功连接到 ProxySQL 的管理接口和客户端接口。如果连接失败,可能是 ProxySQL 进程问题、认证问题或网络问题。

2. 后端服务器状态检查

2.1 查看后端服务器配置和状态

-- 在 ProxySQL 管理接口执行
SELECT hostgroup_id, hostname, port, status, weight, max_connections
FROM mysql_servers;

说明:此命令显示所有配置的后端 MySQL 服务器及其状态。关注 status 列,可能的值包括:

  • ONLINE:服务器正常,接收流量
  • SHUNNED:服务器暂时被隔离(通常因健康检查失败)
  • OFFLINE_SOFT:服务器软下线,不接收新连接但保持现有连接
  • OFFLINE_HARD:服务器硬下线,不接收新连接且断开现有连接

2.2 检查后端服务器网络连通性

# 从 ProxySQL 服务器测试到后端 MySQL 的网络连通性
ping <mysql_hostname>

# 测试 MySQL 端口连通性
telnet <mysql_hostname> <mysql_port>
# 或
nc -zv <mysql_hostname> <mysql_port>

说明:验证 ProxySQL 服务器是否能够网络层面访问后端 MySQL 服务器。如果网络不通,ProxySQL 的健康检查也会失败。

2.3 直接连接后端 MySQL 服务器

mysql -u <用户名> -p<密码> -h <mysql_hostname> -P <mysql_port>

说明:尝试直接连接后端 MySQL 服务器,验证 MySQL 服务是否正常运行且认证信息正确。

3. 监控模块检查

3.1 检查监控模块配置

-- 查看所有监控相关参数
SELECT variable_name, variable_value
FROM global_variables
WHERE variable_name LIKE 'mysql-monitor_%';

说明:检查监控模块的配置参数。特别关注以下关键参数:

  • mysql-monitor_enabled:监控模块是否启用(应为 1 或 true)
  • mysql-monitor_usernamemysql-monitor_password:用于健康检查的凭证
  • mysql-monitor_connect_intervalmysql-monitor_connect_timeout:连接检查的频率和超时
  • mysql-monitor_ping_intervalmysql-monitor_ping_timeout:PING 检查的频率和超时
  • mysql-monitor_ping_max_failures:将服务器标记为 SHUNNED 前允许的连续 PING 失败次数

3.2 检查连接检查日志

-- 查看最近的连接检查日志
SELECT hostname, port, time_start_us, connect_success_time_us, connect_error
FROM monitor.mysql_server_connect_log
ORDER BY time_start_us DESC
LIMIT 20;

-- 针对特定服务器查看连接检查日志
SELECT hostname, port, time_start_us, connect_success_time_us, connect_error
FROM monitor.mysql_server_connect_log
WHERE hostname = '<mysql_hostname>'
ORDER BY time_start_us DESC
LIMIT 10;

说明:连接检查日志记录了 ProxySQL 尝试连接后端服务器的结果。connect_success_time_us 为 0 且 connect_error 不为 NULL 表示连接失败。如果没有特定服务器的日志记录,可能是监控模块未正确配置或未运行。

3.3 检查 PING 检查日志

-- 查看最近的 PING 检查日志
SELECT hostname, port, time_start_us, ping_success_time_us, ping_error
FROM monitor.mysql_server_ping_log
ORDER BY time_start_us DESC
LIMIT 20;

-- 针对特定服务器查看 PING 检查日志
SELECT hostname, port, time_start_us, ping_success_time_us, ping_error
FROM monitor.mysql_server_ping_log
WHERE hostname = '<mysql_hostname>'
ORDER BY time_start_us DESC
LIMIT 10;

说明:PING 检查日志记录了 ProxySQL 向后端服务器发送 MySQL PING 命令的结果。ping_success_time_us 为 0 且 ping_error 不为 NULL 表示 PING 失败。连续失败达到 mysql-monitor_ping_max_failures 次会触发服务器状态变更。

3.4 检查复制延迟检查日志(如适用)

-- 查看复制延迟检查日志
SELECT hostname, port, time_start_us, success_time_us, repl_lag, error
FROM monitor.mysql_server_replication_lag_log
ORDER BY time_start_us DESC
LIMIT 10;

说明:如果配置了复制延迟监控(max_replication_lag > 0),此日志记录复制延迟检查结果。

3.5 检查只读状态检查日志(如适用)

-- 查看只读状态检查日志
SELECT hostname, port, time_start_us, success_time_us, read_only, error
FROM monitor.mysql_server_read_only_log
ORDER BY time_start_us DESC
LIMIT 10;

说明:如果配置了读写分离(使用 mysql_replication_hostgroups 表),此日志记录只读状态检查结果。

4. 连接池状态分析

4.1 检查连接池统计信息

-- 查看所有连接池状态
SELECT * FROM stats.stats_mysql_connection_pool;

-- 针对特定主机组和服务器查看连接池状态
SELECT * FROM stats.stats_mysql_connection_pool
WHERE hostgroup = <hostgroup_id> AND srv_host = '<mysql_hostname>';

说明:连接池统计信息是诊断 ProxySQL 与后端服务器连接问题的关键。特别关注以下字段:

  • status:连接池状态,可能与 mysql_servers 表中的状态不同,更直接反映实时连接决策
  • ConnUsed:当前使用中的连接数
  • ConnFree:当前空闲的连接数
  • ConnOK:成功建立的连接总数
  • ConnERR:连接错误总数
  • Queries:通过此连接池处理的查询总数

重要stats.stats_mysql_connection_pool 中的 status 可能比 mysql_servers 表中的 status 更快反映服务器的实际状态变化。例如,服务器可能在 stats.stats_mysql_connection_pool 中已标记为 SHUNNED,但在 mysql_servers 表中仍显示为 ONLINE

4.2 检查连接池内存使用情况

-- 查看连接池内存使用情况
SELECT * FROM stats_memory_metrics WHERE variable_name LIKE '%connection_pool%';

说明:检查连接池相关的内存使用情况,有助于诊断内存压力问题。

5. 查询路由与规则检查

5.1 检查查询规则配置

-- 查看所有查询规则
SELECT rule_id, active, match_pattern, destination_hostgroup, apply
FROM mysql_query_rules
ORDER BY rule_id;

说明:检查查询路由规则配置,确认规则是否正确设置且处于激活状态(active=1)。

5.2 检查查询处理器统计信息

-- 查看查询处理器统计信息
SELECT * FROM stats.stats_mysql_query_digest
ORDER BY sum_time DESC
LIMIT 10;

说明:查看哪些查询被处理以及它们的性能指标,有助于诊断查询路由问题。

5.3 检查查询规则应用情况

-- 查看查询规则应用情况
SELECT * FROM stats.stats_mysql_query_rules;

说明:检查各查询规则的匹配和应用次数,验证规则是否按预期工作。

6. 日志分析

6.1 检查 ProxySQL 错误日志

# 查看 ProxySQL 日志文件(位置可能因安装方式而异)
cat /var/lib/proxysql/proxysql.log
# 或
tail -n 100 /var/lib/proxysql/proxysql.log
# 或
journalctl -u proxysql

说明:ProxySQL 日志记录了服务启动、关闭、配置变更和错误等重要事件。日志位置可能因安装方式而异,常见位置包括 /var/lib/proxysql/proxysql.log 或通过 systemd 日志。

6.2 检查系统日志

# 检查系统日志中与 ProxySQL 相关的条目
grep proxysql /var/log/syslog
# 或
journalctl | grep proxysql

说明:系统日志可能包含 ProxySQL 进程启动、崩溃或资源限制相关的信息。

7. 配置一致性检查

7.1 检查配置在不同层次的一致性

ProxySQL 有三层配置:

  • 内存中的配置(修改后的初始状态)
  • 运行时配置(通过 LOAD TO RUNTIME 加载,实际生效)
  • 磁盘配置(通过 SAVE TO DISK 保存,重启后生效)
-- 检查全局变量在内存和运行时的差异
SELECT variable_name, variable_value AS memory_value,
      (SELECT variable_value FROM runtime_global_variables v2
       WHERE v2.variable_name = v1.variable_name) AS runtime_value
FROM global_variables v1
WHERE variable_value <> (SELECT variable_value FROM runtime_global_variables v2
                       WHERE v2.variable_name = v1.variable_name)
ORDER BY variable_name;

-- 检查 mysql_servers 表在内存和运行时的差异
SELECT * FROM mysql_servers
EXCEPT
SELECT * FROM runtime_mysql_servers;

说明:这些查询帮助识别配置不一致问题,例如修改了配置但忘记加载到运行时。

7.2 加载和保存配置

-- 加载 MySQL 用户配置到运行时
LOAD MYSQL USERS TO RUNTIME;
-- 保存 MySQL 用户配置到磁盘
SAVE MYSQL USERS TO DISK;

-- 加载 MySQL 服务器配置到运行时
LOAD MYSQL SERVERS TO RUNTIME;
-- 保存 MySQL 服务器配置到磁盘
SAVE MYSQL SERVERS TO DISK;

-- 加载 MySQL 查询规则到运行时
LOAD MYSQL QUERY RULES TO RUNTIME;
-- 保存 MySQL 查询规则到磁盘
SAVE MYSQL QUERY RULES TO DISK;

-- 加载 MySQL 变量到运行时
LOAD MYSQL VARIABLES TO RUNTIME;
-- 保存 MySQL 变量到磁盘
SAVE MYSQL VARIABLES TO DISK;

-- 加载管理变量到运行时
LOAD ADMIN VARIABLES TO RUNTIME;
-- 保存管理变量到磁盘
SAVE ADMIN VARIABLES TO DISK;

说明:这些命令确保配置更改被正确应用到运行时并持久化到磁盘。许多 ProxySQL 问题源于配置更改后未执行这些命令。

8. 性能指标分析

8.1 检查全局统计信息

-- 查看全局计数器
SELECT * FROM stats.stats_mysql_global;

说明:全局计数器提供了 ProxySQL 整体性能和活动的概览。

8.2 检查命令计数器

-- 查看命令计数器
SELECT * FROM stats.stats_mysql_commands_counters;

说明:命令计数器显示各类 MySQL 命令的执行次数和延迟,有助于识别性能瓶颈。

8.3 检查后端服务器延迟

-- 查看后端服务器延迟
SELECT srv_host, Latency_us FROM stats.stats_mysql_connection_pool;

说明:后端服务器延迟是诊断性能问题的重要指标。

9. 解决方案实施

根据前述步骤的诊断结果,以下是常见问题的解决方案:

9.1 监控模块未正常工作

如果监控模块未检测到后端服务器状态变化:

-- 确保监控模块启用
SET mysql-monitor_enabled = true;

-- 验证监控用户凭证
SET mysql-monitor_username = 'monitor';
SET mysql-monitor_password = 'monitor_password';

-- 调整监控参数(示例值,根据实际需求调整)
SET mysql-monitor_connect_interval = 10000;  -- 10秒
SET mysql-monitor_ping_interval = 5000;      -- 5秒
SET mysql-monitor_ping_max_failures = 3;     -- 3次失败后标记为SHUNNED

-- 加载并保存配置
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

-- 重启监控模块(通过临时禁用再启用)
SET mysql-monitor_enabled = false;
LOAD MYSQL VARIABLES TO RUNTIME;
-- 等待几秒
SET mysql-monitor_enabled = true;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

说明:这些步骤确保监控模块正确配置并重新初始化。

9.2 手动更改服务器状态

在紧急情况下,可以手动更改服务器状态:

-- 手动将服务器标记为离线(软)
UPDATE mysql_servers SET status='OFFLINE_SOFT'
WHERE hostname='<mysql_hostname>' AND port=<mysql_port>;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

-- 手动将服务器标记为在线
UPDATE mysql_servers SET status='ONLINE'
WHERE hostname='<mysql_hostname>' AND port=<mysql_port>;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

说明:手动更改状态应作为临时措施,同时应解决根本原因。

9.3 重启 ProxySQL 服务

如果其他方法无效,可以考虑重启 ProxySQL 服务:

# 使用 systemd 重启
systemctl restart proxysql

# 或在 ProxySQL 管理接口中重启
PROXYSQL RESTART;

说明:重启是最后的手段,可能导致短暂的服务中断。确保配置已保存到磁盘,否则重启后更改将丢失。

10. 验证与监控

10.1 验证解决方案效果

应用解决方案后,重复相关检查步骤验证问题是否解决:

-- 再次检查服务器状态
SELECT hostgroup_id, hostname, port, status FROM mysql_servers;

-- 检查连接池状态
SELECT * FROM stats.stats_mysql_connection_pool
WHERE srv_host = '<mysql_hostname>';

-- 检查监控日志
SELECT * FROM monitor.mysql_server_ping_log
WHERE hostname = '<mysql_hostname>'
ORDER BY time_start_us DESC LIMIT 5;

10.2 设置持续监控

建立持续监控机制,及早发现潜在问题:

-- 创建监控查询示例(可以通过外部脚本定期执行)
SELECT COUNT(*) AS online_servers
FROM mysql_servers WHERE status = 'ONLINE';

SELECT COUNT(*) AS problem_servers
FROM stats.stats_mysql_connection_pool
WHERE status <> 'ONLINE';

说明:将这些查询集成到监控系统中,设置适当的告警阈值。

常见问题与解决方案

问题 1: 服务器状态不一致

症状mysql_servers 表显示服务器为 ONLINE,但 stats.stats_mysql_connection_pool 显示为 SHUNNED

解决方案

  • 这通常是正常现象,stats.stats_mysql_connection_pool 更直接反映实时状态
  • 等待几个监控周期,状态通常会同步
  • 如需立即同步,可执行 LOAD MYSQL SERVERS FROM RUNTIME; LOAD MYSQL SERVERS TO RUNTIME;

问题 2: 监控日志中没有特定服务器的记录

症状monitor.mysql_server_connect_logmonitor.mysql_server_ping_log 中没有特定服务器的记录。

解决方案

  • 确认服务器正确添加到 mysql_servers
  • 验证 mysql-monitor_enabled = true
  • 执行配置加载命令
  • 临时禁用再启用监控模块重新初始化

问题 3: 连接池耗尽

症状ConnUsed 接近 max_connections,新连接被拒绝。

解决方案

  • 增加 max_connections 参数
  • 检查后端 MySQL 服务器的 max_connections 设置
  • 优化应用程序连接管理,减少长连接或空闲连接

问题 4: 查询路由规则不生效

症状:查询未按预期路由到指定主机组。

解决方案

  • 检查规则优先级和顺序
  • 确认规则已激活 (active=1)
  • 验证匹配模式是否正确
  • 确保执行了 LOAD MYSQL QUERY RULES TO RUNTIME;

结论

本指南提供了一套系统化的 ProxySQL 故障排查方法。通过遵循这些步骤,您可以快速定位和解决 ProxySQL 相关问题,确保数据库代理层的稳定运行。记住,在 ProxySQL 中,配置更改后必须显式加载到运行时并保存到磁盘才能生效,这是许多问题的常见根源。

定期检查监控日志和连接池状态,可以帮助您及早发现潜在问题,避免它们演变成严重故障。

ProxySQL 主机组调整与端口流量路由配置指南

本指南将帮助您完成以下任务:

  1. 将服务器 192.168.117.142 从主机组 1 移动到新的主机组 2
  2. 配置 ProxySQL 使通过 32161 端口连接的流量路由到主机组 2
  3. 确保通过该端口连接的用户具有完整的增删改查权限

步骤 1: 创建新的主机组并调整服务器分配

首先,我们需要将 192.168.117.142 服务器添加到主机组 2。在 ProxySQL 管理界面执行以下命令:

-- 删除服务器在主机组 1 中的记录
DELETE FROM mysql_servers WHERE hostname='192.168.117.142' AND hostgroup_id=1;

-- 将服务器添加到主机组 2
INSERT INTO mysql_servers(hostgroup_id, hostname, port, status, weight, max_connections)
VALUES (2, '192.168.117.142', 3306, 'ONLINE', 1, 1000);

-- 加载配置到运行时并保存到磁盘
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

步骤 2: 配置端口到主机组的路由规则

ProxySQL 2.7.x 版本中,我们需要使用查询规则来根据连接端口路由流量。首先,我们需要确保 32161 端口已经在 mysql_ifaces 中配置:

-- 检查当前的 mysql_ifaces 配置
SELECT variable_value FROM global_variables WHERE variable_name='mysql-mysql_ifaces';

-- 如果需要,更新 mysql_ifaces 配置(确保包含 32161 端口)
SET mysql-mysql_ifaces="0.0.0.0:6033;0.0.0.0:32161;0.0.0.0:33161";
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

接下来,我们需要创建一个查询规则,将来自 32161 端口的连接路由到主机组 2:

-- 创建查询规则,将 32161 端口的流量路由到主机组 2
INSERT INTO mysql_query_rules (rule_id, active, proxy_port, destination_hostgroup, apply)
VALUES (1, 1, 32161, 2, 1);

-- 加载查询规则到运行时并保存到磁盘
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

步骤 3: 确保用户权限配置

确保连接到 ProxySQL 的用户具有访问主机组 2 的权限:

-- 查看当前用户配置
SELECT * FROM mysql_users;

-- 更新用户配置,确保可以访问主机组 2
-- 假设用户名为 'root',根据您的实际用户名调整
UPDATE mysql_users
SET default_hostgroup=1,
  frontend=1,
  backend=1,
  hostgroup_id='1,2' -- 允许访问主机组 1 和 2
WHERE username='root';

-- 如果需要为特定端口设置默认主机组
INSERT INTO mysql_users (username, password, default_hostgroup, frontend, backend, max_connections)
SELECT username, password, 2, frontend, backend, max_connections
FROM mysql_users
WHERE username='root'
LIMIT 1;

-- 加载用户配置到运行时并保存到磁盘
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

步骤 4: 验证配置

完成上述配置后,您可以通过以下方式验证配置是否生效:

  1. 检查服务器分配:
SELECT * FROM mysql_servers ORDER BY hostgroup_id;
  1. 检查查询规则:
SELECT * FROM mysql_query_rules;
  1. 检查用户配置:
SELECT * FROM mysql_users;
  1. 通过 32161 端口连接并测试:
mysql -u root -p -h 127.0.0.1 -P 32161

连接后,执行一些 SQL 语句测试增删改查权限:

-- 创建测试数据库和表
CREATE DATABASE IF NOT EXISTS test_routing;
USE test_routing;
CREATE TABLE IF NOT EXISTS test_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));

-- 测试插入
INSERT INTO test_table (name) VALUES ('test1'), ('test2');

-- 测试查询
SELECT * FROM test_table;

-- 测试更新
UPDATE test_table SET name='updated' WHERE id=1;

-- 测试删除
DELETE FROM test_table WHERE id=2;

-- 清理(可选)
DROP TABLE test_table;
DROP DATABASE test_routing;

步骤 5: 监控与故障排除

如果配置未按预期工作,可以检查以下内容:

  1. 检查 ProxySQL 监控日志:
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;
SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 10;
  1. 检查连接池状态:
SELECT * FROM stats.stats_mysql_connection_pool WHERE hostgroup IN (1,2);

查看特定主机ping的状态
SELECT hostname, port, time_start_us, ping_success_time_us, ping_error FROM monitor.mysql_server_ping_log WHERE hostname = '192.168.117.142' ORDER BY time_start_us DESC LIMIT 10;
  1. 检查查询路由统计:
SELECT * FROM stats.stats_mysql_query_digest ORDER BY sum_time DESC LIMIT 10;

注意事项

  1. 端口路由限制:在 ProxySQL 2.x 版本中,端口路由功能可能不如 3.x 版本完善。如果遇到问题,考虑升级到 ProxySQL 3.x。
  2. 配置持久化:确保每次修改配置后都执行 LOAD ... TO RUNTIMESAVE ... TO DISK 命令,以确保配置生效并在重启后保留。
  3. 监控服务器状态:定期检查主机组 2 中服务器的状态,确保其保持 ONLINE
  4. 备份配置:在进行重要配置更改前,建议备份 ProxySQL 配置:
proxysql-admin --backup-config

通过以上步骤,您应该能够成功将 192.168.117.142 服务器移动到主机组 2,并配置 32161 端口的流量路由到该主机组,同时保留完整的增删改查权限。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
       赣ICP备2025061060号 |       版权所有 © 2025 鸣乐庐    
      网站访问次数:41,703 次
正在获取您的IP和天气信息...