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. 练习#

  1. /etc/proxysql.cnf 添加一条 mysql_users,重启后验证运行时表是否存在该用户。
  2. 通过管理端口新增 mysql_servers,执行 LOADSAVE,重启后验证仍存在。
  3. 修改 mysql_ifaces127.0.0.1:6032,验证远程连接被拒绝的效果,并说明原因。