postgresql备份恢复讲解

HGDB备份方式主要分为两种:

逻辑备份
pg_dump, pg_dumpall

物理备份
文件系统复制(冷备份)
数据库的 PITR 方法(热备份)

备份方式如何选择?

逻辑备份在恢复时,介于逻辑备份与故障时间点之间的数据难以恢复,故一般不采取逻辑备份方式进行数据库备份,适用于跨平台跨版本的数据迁移;

物理备份包含冷备份和热备份,冷备份需要停数据库,这在正常的业务应用中是不现实的,故一般采用的是物理备份的热备份。

逻辑备份

逻辑备份可通过指令pg_dump, pg_dumpall实现
基本语法:
– pg_dump [option] … [dbname] > bakfile
– pg_dumpall [option] … > bakfile

• -F[c|t|p] 转储成custom|tar|plain text
• -d 导出成insert命令形式
• -D 导出成insert命令形式且带字段名
• -h 主机,-p 端口
• -U 用户名,-W 密码
• -o 把OID也导出来
• -a 仅导数据,-t 仅导表格,-T不导表名

pg_dump只能备份单个数据库,不会导出角色和表空间相关的信息。pg_dumpall可以备份所有数据库,并且备份角色、表空间。

逻辑恢复

用psql dbname -U username< bakfile
或自带的内置恢复工具pg_restore
仅对pg_dump -Fc/-Ft备份文档有用
– pg_restore [option] … [filename]参数与pg_dump对应
– pg_restore -d dbname bakfile

冷备份

使用操作系统支持的各种拷贝命令,把整个 PGDATA 备份。
冷备份前,建议干净的关闭数据库(pg_ctl stop –m fast)。
在同架构同平台同数据库版本的迁移需求中,使用该方式,且极大节省迁移时间,且操作简单,安全性高。
备份示例:tar -jcv -f /backup/filesystem.tar.bz2 $PGDATA
恢复示例:tar -jxv -f /backup/filesystem.tar.bz2 -C /

在线热备份

可以通过以下三种方式实现:
pg_start_backup()和 pg_stop_backup()
pg_basebackup
文件系统快照的备份

pg_start_backup()和 pg_stop_backup()
1)开启归档;
2)以数据库超级用户身份连接数据库,执行命令:
select pg_start_backup(‘lable’);
3)执行备份:使用操作系统工具比如 tar 或 cp -ra 等,或直接把数据目录复制到备份位置。过程中既不需要关闭数据库,也不需要停止数据库的任何操作。
4)再次以数据库超级用户身份连接数据库,然后发出命令:
highgo=# select pg_stop_backup(‘lable’);
这将终止备份模式并自动切换到下一个 WAL 段。
自动切换是为了让在备份间隔中写入的最后一个 WAL 段文件可以立即为下次备份做好准备。
5)拷贝备份过程中产生的 WAL 日志文件。

pg_basebackup
是从postgresql 9.1版本开始提供的一个方便基础备份的工具,它会把整个数据库实例的数据都拷贝出来,而不只是把实例中的部分(如某个数据库或表)单独备份;
使用 replication 协议连接到数据库实例上,所以主数据库中的 pg_hba.conf 必须允许 replication 连接,类似如下:
local replication highgo ident
其中,highgo 是数据库超级用户或者本地的一个有 replication 权限的用户,认证是 ident,表示需要与数据库用户 highgo 存在一个对应的操作系统用户。
在流复制环境中,可以使用 pg_basebackup 搭建流复制备库及流复制级联备库。

下面简单做一下参数说明(可以通过pg_basebackup --help进行查看)
-h 指定连接的数据库的主机名或IP地址,这里就是主库的ip。
-U 指定连接的用户名,此处是我们刚才创建的专门负责流复制的repl用户。
-F 指定了输出的格式,支持p(原样输出)或者t(tar格式输出)。
-x 表示备份开始后,启动另一个流复制连接从主库接收WAL日志。
-P 表示允许在备份过程中实时的打印备份的进度。
-R 表示会在备份结束后自动生成recovery.conf文件,这样也就避免了手动创建。
-D 指定把备份写到哪个目录,这里尤其要注意一点就是做基础备份之前从库的数据目录(/usr/local/postgresql/data)目录需要手动清空。
-l 表示指定一个备份的标识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值