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 parse、Unknown variable - 修复流程:
- 现象:
# 查看错误日志并定位行
tail -n 200 /var/lib/proxysql/proxysql.log
# 对比配置是否属于当前版本
rpm -qi proxysql | grep Version
grep -n "admin_variables\|mysql_variables" /etc/proxysql.cnf
- 建议:先用最小配置启动,再逐步追加参数。
- 目录权限或不可写
- 现象:
Can't open data file、permission denied
- 现象:
# 修复 datadir 权限
chown -R proxysql:proxysql /var/lib/proxysql
chmod 750 /var/lib/proxysql
# 确保目录存在
mkdir -p /var/lib/proxysql
- 数据文件损坏或版本不匹配
- 现象:
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
- 端口占用冲突
- 现象:
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
- 配置未加载到运行时
- 现象:修改配置后不生效
-- 连接 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
- 排错修复
# 查看日志定位错误
tail -n 50 /var/lib/proxysql/proxysql.log
# 删除错误行并重启
sed -i '/bad_param/d' /etc/proxysql.cnf
systemctl restart proxysql
- 验证恢复
ss -lntp | egrep '6032|6033'