一、逻辑备份与恢复
- 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 --恢复
- 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
- pg_dump 部分命令说明
- -d:-d后面接的是数据库的名称
- -h:接的是主机名
- -p:接的是端口号
- -U:接的是用户名
- -f:接的是导出表的位置和重命名
- -Fc:自定义格式
- -t:后面接的是具体在哪个模式下的那张表
二、物理备份与恢复
- 开启归档(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
-
关闭数据库,删除/var/postgre/data($PGDATA)下文件
-
恢复
(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();