postgresql 通过 pg_dump 定时备份、清理备份
1、创建脚本bak.sh
#!/bin/bash
# 设置数据库连接参数
DB_NAME="dbname"
DB_USER="admin"
DB_PASSWORD="password"
DB_HOST="127.0.0.1"
DB_PORT="5432"
BACKUP_DIR="/var/lib/pgsql/bak"
DATE=$(date +%Y%m%d_%H%M)
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$DATE.sql"
# 创建备份目录如果不存在
mkdir -p $BACKUP_DIR
export PGPASSWORD=$DB_PASSWORD
# 执行pg_dump命令进行备份
pg_dump -h $DB_HOST -p $DB_PORT -U $DB_USER $DB_NAME > $BACKUP_FILE
# 检查备份文件是否创建成功
if [ $? -eq 0 ]; then
echo "Backup successful: $BACKUP_FILE"
else
echo "Backup failed!"
fi
# 清理过期备份(保留最近7天的备份)
find $BACKUP_DIR -type f -name "$DB_NAME-*.sql" -mtime +7 -exec rm {} \;
2、执行权限
chmod +x bak.sh
3、配置定时任务
crontab -e
添加一行来安排备份任务,如每天凌晨1点执行:
0 1 * * * sh /var/lib/pgsql/bak.sh
4、手动测试 执行 ./bak.sh
5、因在windows环境编辑脚本,可能会报错 解释器错误:没有那个文件或目录
原因分析:windows下行结尾是\n\r,而linux下则是\n
处理办法:将脚本文件中的行尾\r替换为空白
sed -i 's/\r$//' xxx.sh
6、数据恢复
直接在终端执行命令
psql -h 127.0.0.1 -U postgres -d ceshi -f /var/lib/pgsql/bak/yuehe-20250619_1348.sql

浙公网安备 33010602011771号