14.3.3 基础配置文件与运行模式
ProxySQL 的基础配置由静态配置文件与运行时数据库(内存)共同决定。静态文件用于“初始加载”,运行时数据库用于“即时生效”。理解这两者的关系是后续连接管理、读写分离与高可用的基础。
1. 基础配置文件结构与示例#
示例配置文件(路径与关键参数明确,具备可运行性):
# /etc/proxysql.cnf
datadir="/var/lib/proxysql"
# 日志
errorlog="/var/log/proxysql/proxysql.log"
logfile="/var/log/proxysql/proxysql.log"
admin_variables=
{
admin_credentials="admin:admin"
mysql_ifaces="0.0.0.0:6032"
}
mysql_variables=
{
interfaces="0.0.0.0:6033"
max_connections=2048
default_query_delay=0
default_query_timeout=36000000
query_cache_size_MB=0
}
mysql_servers=
(
{ address="192.168.10.11" , port=3306 , hostgroup=10 , max_connections=200 }
)
mysql_users=
(
{ username="app" , password="app123" , default_hostgroup=10 , transaction_persistent=1 }
)
mysql_query_rules=
(
{ rule_id=1 , active=1 , match_pattern="^SELECT" , destination_hostgroup=10 , apply=1 }
)
关键字段解释:
- datadir:运行时数据库与持久化数据库文件所在目录。
- admin_variables/mysql_ifaces:管理端口(默认 6032)。
- mysql_variables/interfaces:对外客户端端口(默认 6033)。
- mysql_servers/mysql_users/mysql_query_rules:初始后端、用户和路由规则。
2. 运行模式与常用命令#
运行模式遵循“文件加载 → 运行时修改 → 生效 → 持久化”。
启动与状态检查#
# 启动服务
systemctl start proxysql
# 查看状态
systemctl status proxysql
# 查看监听端口(6032 管理端口、6033 客户端端口)
ss -lntp | grep proxysql
连接管理端并修改运行时配置#
# 连接管理端口(默认 6032)
mysql -uadmin -padmin -h127.0.0.1 -P6032
# 查看运行时配置表
SELECT * FROM runtime_mysql_servers;
SELECT * FROM runtime_mysql_users;
SELECT * FROM runtime_mysql_query_rules;
修改后端与生效流程示例#
-- 1) 修改内存配置(插入一台后端)
INSERT INTO mysql_servers(hostgroup_id, hostname, port, max_connections)
VALUES(10, '192.168.10.12', 3306, 200);
-- 2) 让变更对外生效
LOAD MYSQL SERVERS TO RUNTIME;
-- 3) 持久化到磁盘数据库
SAVE MYSQL SERVERS TO DISK;
修改用户与规则示例#
-- 新增用户
INSERT INTO mysql_users(username, password, default_hostgroup)
VALUES('report', 'report123', 10);
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
-- 新增读路由规则
INSERT INTO mysql_query_rules(rule_id, active, match_pattern, destination_hostgroup, apply)
VALUES(100, 1, '^SELECT', 10, 1);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
3. 配置文件与运行时关系要点#
- 配置文件只在启动时加载,不会自动跟随运行时变化。
- 运行时变更需执行
SAVE ... TO DISK才能持久化。 - 未保存的运行时变更在重启后会丢失。
4. 常见排错与定位#
问题 1:改了配置不生效
-- 确认已 LOAD 到运行时
SHOW TABLES LIKE 'runtime%';
SELECT * FROM runtime_mysql_servers;
解决:执行 LOAD ... TO RUNTIME。
问题 2:重启后配置丢失
# 检查 datadir 内是否有 proxysql.db
ls -l /var/lib/proxysql/
解决:执行 SAVE ... TO DISK,确保 datadir 可写。
问题 3:管理端无法连接
ss -lntp | grep 6032
grep -n "mysql_ifaces" /etc/proxysql.cnf
解决:检查 admin_variables 端口与绑定地址,确认防火墙放行。
5. 练习#
- 在
/etc/proxysql.cnf添加一条mysql_users,重启后验证运行时表是否存在该用户。 - 通过管理端口新增
mysql_servers,执行LOAD与SAVE,重启后验证仍存在。 - 修改
mysql_ifaces为127.0.0.1:6032,验证远程连接被拒绝的效果,并说明原因。