Postgres数据备份&定时备份脚本

postgres数据备份

有三种不同的基本方法来备份PostgreSQL数据:

  • SQL转储
  • 文件系统级备份
  • 连续归档

本次只阐述第一种方法,SQL转储

关于 pg_dump:

  • pg_dump 将表结构及数据以 SQL 语句的形式导出到 sql 文件或其他格式文件,恢复数据时,将导出的文件作为输入,执行其中的 SQL 语句,即可恢复数据。
  • pg_dump 能够对正在使用的 PostgreSQL 数据库进行备份,并且不影响正常业务的读写。
  • pg_dump 是一个客户端工具,可以远程或本地导出逻辑数据,恢复数据至导出时间点。
  • pg_dump 一次只转储一个数据库,并不会转储有关角色或表空间的信息 (因为那些是群集范围而不是每个数据库)。

pg_dump 常用参数

-h host,指定数据库主机名,或者IP

-p port,指定端口号

-U user,指定连接使用的用户名

-W,按提示输入密码

dbname,指定连接的数据库名称,实际上也是要备份的数据库名称。

-a,–data-only,只导出数据,不导出表结构

-c,–clean,是否生成清理该数据库对象的语句,比如drop table

-C,–create,是否输出一条创建数据库语句

-f file,–file=file,输出到指定文件中

-n schema,–schema=schema,只转存匹配schema的模式内容

-N schema,–exclude-schema=schema,不转存匹配schema的模式内容

-O,–no-owner,不设置导出对象的所有权

-s,–schema-only,只导致对象定义模式,不导出数据

-t table,–table=table,只转存匹配到的表,视图,序列,可以使用多个-t匹配多个表

-T table,–exclude-table=table,不转存匹配到的表。

–inserts,使用insert命令形式导出数据,这种方式比默认的copy方式慢很多,但是可用于将数据导入到非PostgreSQL数据库。

–column-inserts,导出的数据,有显式列名

pg_dump 常用示例

1、备份test 数据库
[pgsql@node2 ~]$ pg_dump test >/home/pgsql/test.sql

跟MySQL一样,生成的是sql文件

2、恢复test 数据库

postgres=# create database testbak encoding UTF8;
[pgsql@node2 ~]$ psql test < /home/pgsql/test.sql

pg_dump 备份脚本

1、建立备份目录

[root@localhost /]$ mkdir -p /test/gis/gis-backup

2、编写备份脚本

[root@localhost /]$ vim /test/gis/gis-backup/gis-backup.sh

#!/bin/bash
#postgres备份恢复方式:
#第一步: 删除原先的库 drop database test_gis_lyg;    再创建新的库 create database test_gis_lyg  encoding UTF8;
#第二步: 导入sql: psql test_gis_lyg < ${BACKUP_DIR}/pg.sql
source /etc/profile
DATE=`date '+%Y%m%d-%H%M'`
BACKUP_DIR=/test/gis/gis-backup/$DATE
LOGFILE=/test/gis/gis-backup/$DATE/data_backup.log
 
if [ ! -d $BACKUP_DIR ]
  then
        mkdir -p "$BACKUP_DIR"
fi
 
echo " " >> $LOGFILE
echo " " >> $LOGFILE
echo "-----------------" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "----------------" >> $LOGFILE
 
/test/gis/pgsql-9.5.4/bin/pg_dump test_gis_lyg > ${BACKUP_DIR}/pg.sql
 
if [[ $? == 0 ]]
  then
    echo "Backup Successful!" >> $LOGFILE
else
    echo "Database Backup Fail!" >> $LOGFILE
fi

3、授权postgres 用户权限,备份目录权限,脚本执行权限

[postgres@localhost gis-backup]$  chown -Rf postgres.postgres /test/gis/gis-backup

4、登录postgres 用户下,创建定时任务【每天夜里1点17分备份】

[postgres@localhost gis-backup]$ crontab -e
17 01 * * * bash /test/gis/gis-backup/gis-backup.sh
[postgres@localhost gis-backup]$ crontab -l
17 01 * * * bash /test/gis/gis-backup/gis-backup.sh

4、备份效果

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容