
ProxySQL 基本排查方法指南
在使用 ProxySQL 的过程中,难免会遇到连接失败、路由异常、性能下降等问题。掌握一套系统的排查方法,能帮你快速定位根因、恢复业务。本文将从日志分析、状态检查、监控诊断三个维度
项值主机192.168.6.98系统CentOS Stream 9(x86_64)SELinuxEnforcing防火墙firewalld(active)安装方式PGDG 官方 yum 源版本PostgreSQL 18.6(18.6-1PGDG.rhel9.8)
目录用途/usr/pgsql-18/二进制、库、工具(rpm 固定位置,不可自定义)/apps/works/data数据目录(PGDATA)/apps/works/server预留目录,本次为空(方案 A 二进制不落这里)
# 1. 建目录
mkdir -p /apps/works/server /apps/works/data
# 2. 加 PGDG 源 + 禁用系统自带 postgresql 模块 + 装 server
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf -qy module disable postgresql
dnf install -y postgresql18-server
# 3. 初始化数据目录(注意:直接指到 /apps/works/data,不是默认的 /var/lib/pgsql/18/data)
chown postgres:postgres /apps/works/data
su - postgres -c "/usr/pgsql-18/bin/initdb -D /apps/works/data -E UTF8 --auth-local=peer --auth-host=scram-sha-256"
# 4. systemd 覆盖默认数据目录
mkdir -p /etc/systemd/system/postgresql-18.service.d
printf "[Service]\nEnvironment=PGDATA=/apps/works/data\n" > /etc/systemd/system/postgresql-18.service.d/override.conf
systemctl daemon-reload
/apps/works/data/postgresql.conf,只改了一处:
listen_addresses = '*'
/apps/works/data/pg_hba.conf,末尾追加两行(对外全开,测试用):
host all all 0.0.0.0/0 scram-sha-256
host all all ::0/0 scram-sha-256
自定义数据目录默认是 default_t,必须改成 postgresql_db_t:
semanage fcontext -a -t postgresql_db_t "/apps/works/data(/.*)?"
restorecon -Rv /apps/works/data
firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reload
systemd 单元:postgresql-18
覆盖文件:/etc/systemd/system/postgresql-18.service.d/override.conf
开机自启:已 enable
systemctl start postgresql-18
systemctl enable postgresql-18
项值用户postgres密码ugDj%sFhymtDvezf认证方式scram-sha-256
连接:psql -h 192.168.6.98 -U postgres -d postgres
# 监听
ss -lntp | grep 5432
# 0.0.0.0:5432 和 [::]:5432 都在监听
# 走 TCP + scram 认证实测
PGPASSWORD='ugDj%sFhymtDvezf' /usr/pgsql-18/bin/psql -h 192.168.6.98 -U postgres -Atc "SELECT version();"
# PostgreSQL 18.6 on x86_64-pc-linux-gnu ...
服务/状态
systemctl status postgresql-18
ss -lntp | grep 5432
ps -ef | grep 'postgres -D'
日志
默认日志走 stderr,被 systemd 接住:
journalctl -u postgresql-18 -f
数据目录里就是配置本体
postgresql.conf、pg_hba.conf、PG_VERSION 都在 /apps/works/data/
改完配置要重载或重启:systemctl reload postgresql-18(部分参数要 restart)
几个容易踩的坑
数据目录是 /apps/works/data,靠的是 systemd override 改的 PGDATA。如果删了 /etc/systemd/system/postgresql-18.service.d/override.conf 再 daemon-reload,服务会回到默认 /var/lib/pgsql/18/data,表现为"起不来的库"或空库。
SELinux 是 Enforcing。以后如果重建/搬数据目录到新路径,得重新跑 semanage fcontext + restorecon,否则 postgres 进程读不了数据文件,journalctl 里是 Permission denied。
密码带特殊字符(% #),shell 里写 psql 命令要用单引号包住或走环境变量 PGPASSWORD,别直接裸写。
版本升级不能靠直接替换数据目录,18 的目录只能用 18 读。跨大版本要 pg_upgrade。
对外是 0.0.0.0/0 全开,测试没问题,上生产前要收窄网段。
# 以 postgres 身份进库(本地 peer 免密)
su - postgres -c psql
# 改密码
su - postgres -c "psql -c \"ALTER USER postgres PASSWORD '新密码';\""
# 备份(pg_dump 单库)
su - postgres -c "/usr/pgsql-18/bin/pg_dump -Fc -f /tmp/db.dump 库名"
# 重启/重载
systemctl restart postgresql-18
systemctl reload postgresql-18
评论 0