PostgreSQL 数据库备份脚本「终于解决」

PostgreSQL 数据库备份脚本「终于解决」PostgreSQL 数据库备份脚本 #!/bin/bash # PG家目录(/opt/postgresql/pg96/) PG_HOME=${PGHOME} # pg数据库连接信息 PG_HOST=

PostgreSQL 数据库备份脚本

PostgreSQL 数据库备份脚本

#!/bin/bash


# PG家目录(/opt/postgresql/pg96/)
PG_HOME=${PGHOME}
# pg数据库连接信息
PG_HOST="127.0.0.1"
PG_PORT="5432"
PG_USER="postgres"
# PG_PASSWD="pg@123456"

# 时间格式化,如 20211216
DATE="`date +%Y%m%d`"
# 备份文件目录
DIR_BACKUP="${HOME}/data/pg-backup"
# 日志目录: ${HOME}/data/pg-backup/logs
DIR_LOG="${DIR_BACKUP}/logs"
# 日志文件: ${HOME}/data/pg-backup/logs/db_backup.INFO.2021-12-30.log
FILE_LOG="${DIR_LOG}/db_backup.INFO.`date +%F`.log"

# 文件保留天数
DAY=7
DAY_LOG="`expr ${DAY} + 7`"
# 备份数据库名, 多数据间空格分隔
DATABASES=("db1" "db2" "db3")


# 测试目录, 目录不存在则自动创建
test -d ${DIR_LOG} || mkdir -p ${DIR_LOG}
test -d ${DIR_BACKUP}/${PG_USER}-${DATE} || mkdir -p ${DIR_BACKUP}/${PG_USER}-${DATE}
# ------------------- 2021-12-16_17:40:48 Start -------------------
echo -e "
----------------- $(date +%F %T) Start -----------------"
echo -e "
================= $(date +%F %T) Start =================" >> ${FILE_LOG}

# 遍历数据库名
for database in "${DATABASES[@]}"; do 
    echo "---------- Current backup database: [ ${database} ] ----------"
    echo "----------- Backed-up database: [ ${database} ] -----------" >> ${FILE_LOG}
    # 执行备份命令
    ${PG_HOME}/bin/pg_dump -h ${PG_HOST} -p ${PG_PORT} -U ${PG_USER} -w -d ${database} > ${DIR_BACKUP}/${PG_USER}-${DATE}/db_${database}_${DATE}.sql
done

# 压缩备份文件
cd ${DIR_BACKUP}
tar -czf ${PG_USER}-${DATE}.tar.gz ${PG_USER}-${DATE}/
echo "---------- Backup file created: [ ${PG_USER}-${DATE}.tar.gz ]"
echo "Backup file created: ${DIR_BACKUP}/${PG_USER}-${DATE}.tar.gz" >> ${FILE_LOG}

# 压缩后, 删除压缩前的备份文件和目录
rm -f ${DIR_BACKUP}/${PG_USER}-${DATE}/*
rmdir ${DIR_BACKUP}/${PG_USER}-${DATE}/


# ---------------------------------------------------------------------------------
# 至此, 备份已完成, 下面是清理备份的旧文件, 释放磁盘空间


# 方式一:清理旧文件
# 查找 7天前的文件
OLD_BACKUP="`find ${DIR_BACKUP} -type f -mtime +${DAY} -iname ${PG_USER}-*.gz`"
OLD_LOGS="`find ${DIR_LOG} -type f -mtime +${DAY_LOG} -iname db_backup.INFO.*.log`"

# 遍历旧备份文件
for bak in "${OLD_BACKUP[@]}"; do 
    # 删除旧备份
    rm -f ${bak}
    echo "------------------- Deleted old bak files -------------------" >> ${FILE_LOG}
    echo "${bak}" >> ${FILE_LOG}
done
# 遍历旧日志
for log in "${OLD_LOGS[@]}"; do 
    # 删除旧日志
    rm -f ${log}
    echo "------------------- Deleted old log files -------------------" >> ${FILE_LOG}
    echo "${log}" >> ${FILE_LOG}
done


# 方式二:清理旧文件
# echo "--------------------- Deleted old files ---------------------" >> ${FILE_LOG}
# echo "`find ${DIR_BACKUP} -type f -mtime +${DAY} -iname ${PG_USER}-*.gz`" >> ${FILE_LOG}
# echo "`find ${DIR_LOG} -type f -mtime +${DAY_LOG} -iname db_backup.INFO.*.log`" >> ${FILE_LOG}
# find ${DIR_BACKUP} -type f -mtime +${DAY} -iname ${PG_USER}-*.gz -exec rm -f {} ;
# find ${DIR_LOG} -type f -mtime +${DAY_LOG} -iname db_backup.INFO.*.log -exec rm -f {} ;


echo -e "------------------ $(date +%F %T) End ------------------
"
echo -e "================== $(date +%F %T) End ==================
" >> ${FILE_LOG}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5567.html

(0)
上一篇 2023-05-04
下一篇 2023-05-04

相关推荐

  • Python Semaphore实现多线程同步

    Python Semaphore实现多线程同步Python是一门强大的编程语言,而且它支持多线程编程,这意味着可以利用计算机资源,提高代码的执行效率。在多线程编程中,如何解决线程安全问题是非常关键的。在本文中,我们将介绍Python Semaphore库如何实现多线程同步。

    2024-05-23
    67
  • mysql数据库事务及隔离级别「建议收藏」

    mysql数据库事务及隔离级别「建议收藏」事务的四大特性: 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔…

    2023-02-26
    137
  • DBA入职指南学习笔记3[通俗易懂]

    DBA入职指南学习笔记3[通俗易懂]1、数据库启动 加载参数文件(spfile、pfile)—->nomount状态 加载控制文件(*.ctl) —->mount状态 加载数据文件、Redo log日志文件 ——>op…

    2023-03-29
    167
  • 大规模数据如何实现数据的高效追溯?[亲测有效]

    大规模数据如何实现数据的高效追溯?[亲测有效]摘要: “一分钟,我要这个人的全部信息”,霸道总裁拍了拍你,并提出这个要求。 本文分享自华为云社区《大规模数据如何实现数据的高效追溯》,作者: DevAI。 “一分钟,我要这个人的全部信息”

    2023-06-03
    141
  • 第六章关系数据理论_数据库关系数据理论范式

    第六章关系数据理论_数据库关系数据理论范式本章的目的:如何构造一个好的数据库模式 6.1 问题的提出: 关系模式的表示: 关系模式由五部分组成,是一个五元组:R(U,D,DOM,F) R表示关系模式名 U表示一组属性 D表示U的取值范围,如S

    2023-06-14
    135
  • 使用Float或Real数据类型的危险

    使用Float或Real数据类型的危险SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读–当开发者不大熟悉脚本时尤其有用。SQL Prompt安装即可使用,能大幅…

    2023-02-20
    151
  • Python实现按钮制作功能

    Python实现按钮制作功能按钮是一种常见的交互元素,可以在图形用户界面(GUI)中使用。在 Python 中,我们可以使用多种库来创建不同类型的按钮。本文将介绍一些常见的 Python 按钮制作库,并为您提供每种库的代码示例。让我们一起来看看吧!

    2024-03-21
    76
  • 解决动态库的符号冲突的方法_动态库加载失败

    解决动态库的符号冲突的方法_动态库加载失败一次debug遇到的疑惑 某天发现一个程序有点问题。祭上print大法,在关键的 lib_func() 函数里添加 print 调试信息,重新编译运行。 期望 print 出的信息一点都没有,但是程序

    2023-04-16
    152

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注