数据库备份pg_dump和pg_store——postgresql定时全量备份

  1. 数据库备份pg_dump和pg_store
    防止数据丢失第一道防线,数据备份。数据备份分逻辑备份和物理备份。
    2.逻辑备份
    pg提高pg_dump和pg_dumpall命令进行逻辑备份。pg_dumpall是正数据集群全部转存到一个脚本文件中,而pg_dumpl可以选择一个数据库或部分表进行备份。
    pg_dump可以在数据库正在使用时进行完整一致备份,它并不阻塞其他用户对数据库的访问(读或写)。
    pg_dump与pg_restore配合使用,从而提供一种灵活的备份和恢复脚本。
    .pg_dump
    运行pg_dump时,应该检查输出,看看是否警告存在
    pg_dump命令格式如下:
    pg_dump [connection_option][option][option_name]
    pg_dump参数如下:
    -h host
    运行服务器的主机名
    -p port
    服务器的TCP端口号
    -U username
    要连接的用户名
    -w
    从不密码提示,如服务器请求密码验证,且密码不能同其他方式(如.pgpass)来获得,则此命令会导致连接失败。
    该选项使用在后台脚本中,因为后台脚本是无密码输入的。
    -W
    强制pg_dump在连接到一个数据库之前提示密码。该选项通常不重要,因为服务器请求密码验证,pg_dump将自动提示一个密码。
    -role

该选项会导致pg_dump在连接到数据库发布一个set role rolename命令。相当于切换到另一个角色。当已验证的用户缺少pg_dump
需要权限时,可以使用这个功能切换到相应的权限角色。
-a
只对存文本格式有意义,只输入数据,不输出数据定义的sql语句。
-b
在转存中是否包含大对象。除非指定了选择性转储的选项-schema、-table、-schema-only开关,否则默认会转储到大对象。
-c
只对纯文本格式有意义,指定输出的脚步中是否生成清理该数据库对象语句,比如drop table
-C (–create)
只对纯文本格式有意义,指定脚步中是否输出一条create database 语句和连接到该数据库语句。一般在备份的源数据库和恢复的目标数据库名称一致时,才会指定该参数。
-E encoding
以指定的字符集编码创建转储
-f file
输出到指定的文件,如果没指定,则输出标准文件中。
-F format
选择输出格式,可以是p、c和t
p是plain,为纯文本sql脚本文件格式,这是默认值,
c是custom,以合适pg_restore使用的自定义格式输出并归档。
t是tar,以合适输入pg_restore的tar输出并归档。该格式允许手动选择并在恢复时重新排序 归档。

-N schema
不转存任何匹配schema的模式内容。匹配规则与-n完全相同,可以指定多个-N,以排除转存多种匹配模式。
如果同时指定了-n和-N,只能转储-n但不匹配-N模式,若出现-N,但不出现-n,则匹配-N的模式将不会被转储。

pg_dump栗子:
在/pgdb/back/中建立back.sh脚本,写入pg_dum命令
/pgsoft/pg10.5/bin/pg_dump -p 5432 -Fc mpm -U postgres -w -v -n public -b -f /pgdb/back/mpm_ ( d a t a + (data+%Y%m%d_%H_%M_%S).dump 1> /pgdb/back/mpm_ (data+(data+%Y%m%d_%H_%M_%S).log 2>&1

执行crontrab/pgdb/back/定时任务
crontab -e
#凌晨2点执行sh脚本
00 2 * * * /pgdb/back/back.s

恢复备份文件
/pgsoft/pg10.5/bin/pg_restore -U postgres -p 5432 -d backdatabase -w -v -n public /pgdb/back/mpm_ ( d a t a + (data+%Y%m%d_%H_%M_%S).dump 1> /pgdb/back/mpm_ (data+(data+%Y%m%d_%H_%M_%S).log 2>&1

期间出现问题;
1.pg_dump:[archiver (db)]query failed:ERROR:permission denied for relation tb_test
pg_dump:[archiver (db)]query was:LOCK TABLE tb_test IN ACCESS SHARE MODE
这是因为pg_dump中-u无权限,用超级用户postgres权限即可以
2.单独执行/pgsoft/pg10.5/bin/pg_dump -p 5432 -Fc mpm -U postgres -w -v -n public -b -f /pgdb/back/mpm.dump 1> /pgdb/back/mpm.log 2>&1可以,但定时任务无反应
定时任务在/var/sqool/cron 或者直接crontab -e

你可能感兴趣的:(postgresql)