14.3.4 管理端口与数据持久化

ProxySQL 默认提供两个端口:业务端口(MySQL 协议,常见 6033)与管理端口(管理与配置,常见 6032)。管理端口仅用于运维配置、监控与调试,应限制在内网访问,并配置最小权限账号与强密码,避免误操作或配置泄露。

文章图片

管理端口连接方式与 MySQL 客户端一致,示例命令如下(含命令解释):

# 连接管理端口
mysql -h 10.0.0.10 -P 6032 -u admin -p
# -h 目标主机
# -P 管理端口
# -u 管理账号
# -p 输入密码

ProxySQL 的配置流转遵循“内存运行态 -> 持久化磁盘 -> 重启加载”的流程。常规操作步骤是:先写内存表,再 LOAD 应用到运行态,最后 SAVE 落盘。以下示例展示新增一个后端 MySQL 节点并持久化的完整流程:

-- 1) 在内存配置表插入后端节点
INSERT INTO mysql_servers(hostgroup_id, hostname, port, weight, max_connections)
VALUES (10, '10.0.0.21', 3306, 100, 200);

-- 2) 应用到运行时(立即生效)
LOAD MYSQL SERVERS TO RUNTIME;

-- 3) 持久化到磁盘(重启不丢失)
SAVE MYSQL SERVERS TO DISK;

-- 4) 验证运行态是否生效
SELECT hostgroup_id, hostname, port, status
FROM runtime_mysql_servers;

数据持久化由内置 SQLite 数据库完成,默认文件为 /var/lib/proxysql/proxysql.db。可通过系统级检查确认文件存在并纳入备份策略:

# 查看数据文件与权限
ls -l /var/lib/proxysql/proxysql.db

# 备份示例(含时间戳)
cp /var/lib/proxysql/proxysql.db /backup/proxysql.db.$(date +%F)

常用持久化命令清单与用途:

-- 用户配置
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;

排错示例:若重启后配置丢失,优先检查是否执行 SAVE 以及磁盘数据库文件是否被覆盖或权限异常。

# 检查 proxysql.db 是否可写
sudo -u proxysql test -w /var/lib/proxysql/proxysql.db && echo "db writable"

# 查看 ProxySQL 日志,确认是否加载磁盘配置
grep -i "Loading SQLite3 database" /var/lib/proxysql/proxysql.log

练习(动手验证持久化):
1) 通过管理端口新增一个用户到 mysql_users,执行 LOADSAVE
2) 重启 ProxySQL 服务后,查询 runtime_mysql_users 是否存在该用户。
3) 删除 proxysql.db 备份文件并恢复,验证配置是否可回滚。