CentOS 上 PGAdmin 自动化运维技巧
一 架构与前提
二 自动化备份与恢复
0 1 * * * /usr/local/bin/pg_backup.sh >> /var/log/pg_backup.log 2>&1
#!/usr/bin/env bash
set -Eeuo pipefail
export PGPASSWORD="${PG_BACKUP_PASS:?}"
BACKUP_DIR="/var/backups/pg"
DATE=$(date +%F_%H%M%S)
mkdir -p "$BACKUP_DIR"
pg_dumpall -U "$PG_BACKUP_USER" -h "$PG_HOST" -p "$PG_PORT" -w -F c -b -v \
-f "$BACKUP_DIR/pg_full_${DATE}.dump"
# 可选:保留最近7天
find "$BACKUP_DIR" -name 'pg_full_*.dump' -mtime +7 -delete
pg_restore -U "$PG_RESTORE_USER" -h "$PG_HOST" -p "$PG_PORT" -d postgres \
-v "/var/backups/pg/pg_full_2025-12-29_010000.dump"
-- 安装扩展(仅需一次)
CREATE EXTENSION IF NOT EXISTS pg_cron;
-- 每周日凌晨 2 点执行 VACUUM FREEZE(库级)
SELECT cron.schedule('0 2 * * 0', $$VACUUM FREEZE$$);
-- 查看任务
SELECT * FROM cron.job;
三 监控与告警
scrape_configs:
- job_name: 'postgresql'
static_configs:
- targets: ['localhost:9187']
#!/usr/bin/env bash
set -Eeuo pipefail
export PGPASSWORD="${PG_MONITOR_PASS:?}"
IDLE=$(psql -U "$PG_MONITOR_USER" -h "$PG_HOST" -p "$PG_PORT" -tAc \
"SELECT COUNT(*) FROM pg_stat_activity WHERE state='idle';")
if [ "$IDLE" -gt 50 ]; then
echo "WARN: Idle connections=$IDLE" | mail -s "PG Idle Alert" "$ALERT_TO"
fi
* * * * * /usr/local/bin/pg_idle_alert.sh >> /var/log/pg_alert.log 2>&1
四 作业调度与 CI/CD 集成
五 安全与运维要点