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  

posted @ 2025-06-19 13:48  Sんí丶頭  阅读(79)  评论(0)    收藏  举报