-
原始脚本
#!/bin/bash
多数据库备份示例
数据库连接配置
export PGPASSWORD="fYhuqwuiooo="
DB_HOST="10.10.88.180"
DB_PORT="5432"
DB_USER="lmzf"要备份的数据库列表
DATABASES=("pg_database1","pg_database2")
BACKUP_DIR="/path/to/backup"
DATE=$(date +"%Y%m%d")for DB_NAME in "{DATABASES[@]}"; do BACKUP_FILE="{BACKUP_DIR}/{DB_NAME}_{DATE}.dump"
echo "(date) - 开始备份数据库: {DB_NAME}" >> ${BACKUP_DIR}/backup.logpg_dump -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} -d ${DB_NAME} -Fc -f ${BACKUP_FILE} if [ $? -eq 0 ]; then echo "$(date) - ${DB_NAME} 备份成功" >> ${BACKUP_DIR}/backup.log else echo "$(date) - ${DB_NAME} 备份失败" >> ${BACKUP_DIR}/backup.log fidone
-
优化后脚本
#!/bin/bash
PostgreSQL多数据库自动备份脚本
功能:备份指定数据库列表,压缩存储,自动清理7天前备份,记录详细日志
数据库连接配置
DB_HOST="localhost"
DB_PORT="5432"
DB_USER="postgres"
export PGPASSWORD="your_password" # 建议使用.pgpass文件更安全备份配置
BACKUP_DIR="/opt/postgresql_backups"
DATE_STAMP=(date +"%Y%m%d_%H%M%S") RETENTION_DAYS=7 LOG_FILE="{BACKUP_DIR}/backup.log"要备份的数据库列表(排除系统数据库)
DATABASES=("db1" "db2" "db3" "production_db")
创建备份目录
mkdir -p ${BACKUP_DIR}
记录备份开始
echo "(date +'%Y-%m-%d %H:%M:%S') - 开始PostgreSQL数据库备份" >> {LOG_FILE}
循环备份每个数据库
for DB_NAME in "{DATABASES[@]}"; do BACKUP_FILE="{BACKUP_DIR}/{DB_NAME}_backup_{DATE_STAMP}.dump"
echo "$(date +'%Y-%m-%d %H:%M:%S') - 正在备份数据库: ${DB_NAME}" >> ${LOG_FILE} # 执行备份命令(使用自定义格式,支持压缩和选择性恢复) pg_dump -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} -d ${DB_NAME} -Fc -v -f ${BACKUP_FILE} >> ${LOG_FILE} 2>&1 # 检查备份是否成功 if [ $? -eq 0 ]; then echo "$(date +'%Y-%m-%d %H:%M:%S') - 数据库 ${DB_NAME} 备份成功: ${BACKUP_FILE}" >> ${LOG_FILE} # 压缩备份文件 gzip ${BACKUP_FILE} if [ $? -eq 0 ]; then echo "$(date +'%Y-%m-%d %H:%M:%S') - 备份文件已压缩: ${BACKUP_FILE}.gz" >> ${LOG_FILE} else echo "$(date +'%Y-%m-%d %H:%M:%S') - 警告: ${DB_NAME} 备份文件压缩失败" >> ${LOG_FILE} fi else echo "$(date +'%Y-%m-%d %H:%M:%S') - 错误: 数据库 ${DB_NAME} 备份失败!" >> ${LOG_FILE} fidone
清理7天前的旧备份文件
echo "(date +'%Y-%m-%d %H:%M:%S') - 开始清理超过{RETENTION_DAYS}天的旧备份" >> {LOG_FILE} find {BACKUP_DIR} -name "*.dump.gz" -type f -mtime +{RETENTION_DAYS} -exec rm -f {} \; if [ ? -eq 0 ]; then
echo "(date +'%Y-%m-%d %H:%M:%S') - 成功清理超过{RETENTION_DAYS}天的旧备份文件" >> {LOG_FILE} else echo "(date +'%Y-%m-%d %H:%M:%S') - 警告: 清理旧备份文件时出错" >> ${LOG_FILE}
fiecho "(date +'%Y-%m-%d %H:%M:%S') - 数据库备份流程完成" >> {LOG_FILE}
Shell脚本一键逻辑备份PostgreSQL数据库多个指定数据库
岚天start2025-11-20 13:57
相关推荐
qianshang2332 小时前
SQL注入学习总结what丶k2 小时前
深入解析Redis数据持久化:RBD机制原理、实操与生产最佳实践瀚高PG实验室3 小时前
通过数据库日志获取数据库中的慢SQLHgfdsaqwr3 小时前
Python在2024年的主要趋势与发展方向invicinble3 小时前
对于Mysql深入理解阳光九叶草LXGZXJ4 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)Hgfdsaqwr4 小时前
掌握Python魔法方法(Magic Methods)s1hiyu4 小时前
使用Scrapy框架构建分布式爬虫2301_763472464 小时前
使用Seaborn绘制统计图形:更美更简单珠海西格4 小时前
“主动预防” vs “事后补救”:分布式光伏防逆流技术的代际革命,西格电力给出标准答案