初始化
This commit is contained in:
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
CREDENTIALS="-h ${PGHOST:-postgres} -U ${PGUSER:-postgres}"
|
||||
BACKUP_DIR=${BACKUP_DIR:-/backup}
|
||||
RETENTION_DAYS=${RETENTION_DAYS:-7}
|
||||
|
||||
backup() {
|
||||
local filename="backup_$(date +%Y%m%d_%H%M%S).sql.gz"
|
||||
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] Starting backup: $filename"
|
||||
pg_dumpall $CREDENTIALS | gzip > "$BACKUP_DIR/$filename"
|
||||
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] Backup complete: $(du -h "$BACKUP_DIR/$filename" | cut -f1)"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
local count=$(find "$BACKUP_DIR" -name "backup_*.sql.gz" -mtime +$RETENTION_DAYS | wc -l)
|
||||
if [ "$count" -gt 0 ]; then
|
||||
find "$BACKUP_DIR" -name "backup_*.sql.gz" -mtime +$RETENTION_DAYS -delete
|
||||
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] Cleaned up $count backup(s) older than $RETENTION_DAYS days"
|
||||
fi
|
||||
}
|
||||
|
||||
# Run immediately on startup
|
||||
backup
|
||||
cleanup
|
||||
|
||||
# Schedule: calculate seconds until next 2:00 AM, then run every 24h
|
||||
while true; do
|
||||
now=$(date +%s)
|
||||
target=$(date -d "tomorrow 02:00" +%s)
|
||||
sleep_seconds=$((target - now))
|
||||
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] Next backup scheduled at $(date -d @$target '+%Y-%m-%d %H:%M:%S')"
|
||||
sleep $sleep_seconds
|
||||
backup
|
||||
cleanup
|
||||
done
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
# 红动未来 - PostgreSQL 主从复制初始化
|
||||
# 在 Host1(主库)上执行一次,为从库复制做准备
|
||||
# 用法:sh deploy/scripts/setup-replication.sh
|
||||
|
||||
POSTGRES_CONTAINER="${POSTGRES_CONTAINER:-postgres}"
|
||||
|
||||
echo "=== 1. 添加 pg_hba 复制规则 ==="
|
||||
docker exec "$POSTGRES_CONTAINER" sh -c 'echo "host replication all 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf'
|
||||
|
||||
echo "=== 2. 重载 PostgreSQL 配置 ==="
|
||||
docker exec "$POSTGRES_CONTAINER" psql -U postgres -c "SELECT pg_reload_conf();"
|
||||
|
||||
echo "=== 3. 创建物理复制槽 ==="
|
||||
docker exec "$POSTGRES_CONTAINER" psql -U postgres -c "SELECT pg_create_physical_replication_slot('replication_slot_slave') WHERE NOT EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'replication_slot_slave');"
|
||||
|
||||
echo "=== 完成 ==="
|
||||
echo "现在可以在从库(Host2)上启动 PostgreSQL 从库:"
|
||||
echo " docker compose -f deploy/docker-compose-infra-slave.yml up -d postgres-standby"
|
||||
Reference in New Issue
Block a user