14.10.1 启动失败与配置加载错误

启动失败与配置加载错误#

  • 导语与目标
  • 本节聚焦 ProxySQL 无法启动、配置加载失败、运行时配置不生效的常见问题。
  • 目标:通过日志、配置、端口、数据文件快速定位,并给出可复现的命令与修复流程。

  • 原理草图:启动与配置加载顺序

文章图片
  • 关键文件与端口
  • 配置文件:/etc/proxysql.cnf
  • 数据文件:/var/lib/proxysql/proxysql.db
  • 日志文件:/var/lib/proxysql/proxysql.log(或 /var/log/proxysql.log
  • 默认端口:Admin 6032,MySQL 代理 6033

  • 安装与最小启动示例(用于排错基线)

# 1) 安装(以 CentOS/RHEL 为例)
yum install -y proxysql

# 2) 准备最小配置文件 /etc/proxysql.cnf
cat >/etc/proxysql.cnf <<'EOF'
datadir="/var/lib/proxysql"
admin_variables=
{
  admin_credentials="admin:admin"
  mysql_ifaces="0.0.0.0:6032"
}
mysql_variables=
{
  threads=4
  max_connections=2048
  default_query_delay=0
  default_query_timeout=36000000
  have_compress=true
  poll_timeout=2000
  interfaces="0.0.0.0:6033"
}
EOF

# 3) 首次初始化启动
proxysql --config /etc/proxysql.cnf --initial

# 4) 验证端口监听
ss -lntp | egrep '6032|6033'
  • 命令解释
  • --initial:首次初始化并创建 proxysql.db,避免使用损坏或旧版本数据。
  • ss -lntp:确认管理端与代理端口是否监听成功。

  • 典型报错与修复步骤(含命令)
    1. 配置语法错误 / 参数不兼容

    • 现象:Failed to parseUnknown variable
    • 修复流程:
# 查看错误日志并定位行
tail -n 200 /var/lib/proxysql/proxysql.log

# 对比配置是否属于当前版本
rpm -qi proxysql | grep Version
grep -n "admin_variables\|mysql_variables" /etc/proxysql.cnf
 - 建议:先用最小配置启动,再逐步追加参数。
  1. 目录权限或不可写
    • 现象:Can't open data filepermission denied
# 修复 datadir 权限
chown -R proxysql:proxysql /var/lib/proxysql
chmod 750 /var/lib/proxysql

# 确保目录存在
mkdir -p /var/lib/proxysql
  1. 数据文件损坏或版本不匹配
    • 现象:sqlite 错误、启动即退出
# 备份并重建
mv /var/lib/proxysql/proxysql.db /var/lib/proxysql/proxysql.db.bak
proxysql --config /etc/proxysql.cnf --initial
 - 若可连接管理端,先导出配置(示例):
# 连接 admin 端口
mysql -uadmin -padmin -h127.0.0.1 -P6032

# 导出配置
SELECT * FROM mysql_servers\G
SELECT * FROM mysql_users\G
  1. 端口占用冲突
    • 现象:Bind failed、端口未监听
# 查看占用
ss -lntp | grep 6032
ss -lntp | grep 6033

# 修改端口示例
sed -i 's/6032/6035/g' /etc/proxysql.cnf
sed -i 's/6033/6036/g' /etc/proxysql.cnf
  1. 配置未加载到运行时
    • 现象:修改配置后不生效
-- 连接 admin 后执行
LOAD MYSQL USERS TO RUNTIME;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
SAVE MYSQL SERVERS TO DISK;
 - 说明:运行时配置以 `proxysql.db` 为准,`proxysql.cnf` 仅用于初始化。
  • 完整排错流程(可执行)
# 1) 查看服务状态
systemctl status proxysql --no-pager

# 2) 查看日志
tail -n 200 /var/lib/proxysql/proxysql.log

# 3) 验证配置关键项
grep -n "datadir\|admin_ifaces\|interfaces" /etc/proxysql.cnf

# 4) 检查数据文件是否存在与权限
ls -l /var/lib/proxysql/

# 5) 端口检查
ss -lntp | egrep '6032|6033'

# 6) 仍失败则重建
mv /var/lib/proxysql/proxysql.db /var/lib/proxysql/proxysql.db.$(date +%F)
proxysql --config /etc/proxysql.cnf --initial
  • 练习:模拟并修复启动失败
    1. 制造错误
# 故意写入错误参数
echo 'bad_param="xxx"' >> /etc/proxysql.cnf
systemctl restart proxysql
  1. 排错修复
# 查看日志定位错误
tail -n 50 /var/lib/proxysql/proxysql.log

# 删除错误行并重启
sed -i '/bad_param/d' /etc/proxysql.cnf
systemctl restart proxysql
  1. 验证恢复
ss -lntp | egrep '6032|6033'