PostgreSQL数据库中未提供数据库的定时备份功能,所以需要结合备份和定时job功能来共同实现。

这里我选取了2种定时job方式,crontab是Linux中的定时job功能,故只能支持Linux系列操作系统;其中pgAgent是基于数据库的定时备份,可适用于各种操作系统。

  • PostgreSQL:
  1. 操作系统:CentOS Linux release 7.3.1611 (Core)
  2. 数据库系统: PostgreSQL 9.5.9
  3. IP 192.168.230.134
  4. port: 5432

业务需求: 
每日按日期执行自动备份,生产dmp的压缩文件。备份文件保存7天

  1. [postgres@localhost ~]$vim backup.sh
  2. #!/bin/bash
  3. cur_time=$(date \'+%Y-%m-%d\')
  4. sevendays_time=$(date -d -7days \'+%Y-%m-%d\')
  5. export PGPASSWORD=oracle
  6. echo "Starting Backup PostgreSQL ..."
  7. rm -rf pgsql-backup.$sevendays_time.tar.gz
  8. pg_dumpall -U postgres -p 5432>"pgsql-backup.$cur_time.dmp"
  9. tar zcvf "/var/lib/pgsql/pgsql-backup.$cur_time.tar.gz" *.dmp
  10. echo "Remove temp file ..."
  11. rm -rf pgsql-backup.*.dmp
  12. echo "Finish Backup ..."
  13. [postgres@localhost ~]$chmod 755 ./backup.sh

此脚本备份并压缩整个数据库,删除7天前的备份

  1. [postgres@localhost ~]$ls
  2. 9.5 backup.sh pgsql-backup.2017-09-04.tar.gz
  3. [postgres@localhost ~]$./backup.sh
  4. Starting Backup PostgreSQL ...
  5. ./backup.sh: line 7: 5432: Bad file descriptor
  6. pgsql-backup.2017-09-11.dmp
  7. Remove temp file ...
  8. Finish Backup ...
  9. [postgres@localhost ~]$ls
  10. 9.5 backup.sh pgsql-backup.2017-09-11.tar.gz

业务需求:每天对整个数据库数据进行热备份,不能影响实际业务

  1. #!/bin/bash
  2. DATE=$(date \'+%Y%m%d\');
  3. PG_ARCHIVE=/var/lib/pgsql/9.5/data/pg_arch
  4. PG_DATA=/var/lib/pgsql/9.5/data
  5. PG_HOME=/var/lib/pgsql
  6. #START BACKUP
  7. echo "START BACKUP..............."
  8. psql postgres -c "select pg_start_backup(\'hot_back\')"
  9. cd $PG_HOME
  10. tar zcvf ${PG_HOME}/pg_hotbackup_$DATE.tar.gz $PG_DATA
  11. psql postgres -c "select pg_stop_backup()"
  12. psql postgres -c "select pg_switch_xlog()"
  13. psql postgres -c "select pg_current_xlog_location()"
  14. echo "BACKUP END"

创建执行计划

业务需求为每天临晨2点自动执行备份脚本

  1. [root@localhost ~]# crontab -e
  2. 0 2 * * * /var/lib/pgsql/backup.sh
  3. no crontab for root - using an empty one
  4. crontab: installing new crontab

详情可参见

http://blog.csdn.net/sunbocong/article/details/77883797

使用pgadmin III 工具连接目标库 
新建作业daily_backup

创建计划daily_backup,设定开始时间

选定时间为每天凌晨2点00分

新建步骤daily_backup,选择批处理

设定其执行之前我们编写的backup.sh脚本

这样我们就设定好了每天凌晨2点00分执行backup.sh脚本的执行计划

详情可参见 
http://blog.csdn.net/sunbocong/article/details/77870205

版权声明:本文为telwanggs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/telwanggs/p/11547370.html