postgresql备份恢复

一、逻辑备份与恢复

  1. pg_dump 和 psql
pg_dump -d test > /tmp/test.sql -p 5433   --备份test这个数据库
psql -p 5433 < /tmp/test.sql   --恢复

pg_dump > /tmp/full.sql -p 5433  --备份整库
psql </tmp/full.sql  -p 5433  --恢复
  1. pg_dump 和 pg_restore
pg_dump -h 127.0.0.1 -p 5432 -U postgres -d work_face  -Fc -f /tmp/work_face.dmp 

pg_restore -h 127.0.0.1 -U postgres -d work_face /tmp/work_face.dmp

# 命令运行后,输入数据库密码,即可执行。
# 如果命令窗口,已经执行过登录命令,可以只执行:

pg_restore  -d shiliang  /tmp/database.dmp

  1. pg_dump 部分命令说明
  • -d:-d后面接的是数据库的名称
  • -h:接的是主机名
  • -p:接的是端口号
  • -U:接的是用户名
  • -f:接的是导出表的位置和重命名
  • -Fc:自定义格式
  • -t:后面接的是具体在哪个模式下的那张表

二、物理备份与恢复

  1. 开启归档(postgresql.conf文件配置)
wal_level = replica
archive_mode = on  
archive_command = 'test ! -f /var/postgre/archive/%f && cp %p /var/postgre/archive/%f'

(/var/postgre/archive目录是存放归档日志的路径,需要提前建好)

2.备份

pg_basebackup -D /var/postgre/backup/ -Ft -Pv -U postgres -p 5432 -R 或
pg_basebackup -D /var/postgre/backup/ -Ft -Pv(简单的备份语句)
  • -D, --pgdata=DIRECTORY receive base backup into directory
  • -F, --format=p|t output format (plain (default), tar)
  • -P, --progress show progress information
  • -v, --verbose output verbose messages
  • -U, --username=NAME connect as specified database user
  • -h, --host=HOSTNAME database server host or socket directory
  • -p, --port=PORT database server port number
  • -R, --write-recovery-conf write configuration for replication
  1. 关闭数据库,删除/var/postgre/data($PGDATA)下文件

  2. 恢复

(1)postgresql.conf文件配置

restore_command = 'cp /var/postgre/archive/%f %p'
recovery_target = 'immediate'

(2)在/var/postgre/data($PGDATA)文件下新建recovery.signal文件

(3)备份文件解压

tar -xvf  base.tar  -C  /var/postgre/data
tar -xvf pg_wal.tar -c /var/postgre/archive

(4)启动数据库

pg_ctl start -D $PGDATA

此时的数据库是只读的数据库 可以用pg_controldata命令查看数据库簇状态 可以用pg_ctl promote切换数据库状态为读写状态 或者执行select pg_wal_replay_resume();