PolarDB PostgreSQL轻量版支持逻辑备份和物理备份两种核心备份功能。备份过程中支持并行备份,并且对于备份集,能够对接多种存储介质,同时具备备份集本身的压缩能力。
逻辑备份
使用原生PostgreSQL提供的逻辑备份工具pg_dump,将数据导出为SQL文件,通过将该文件导入数据库实现数据恢复。PolarDB PostgreSQL轻量版使用pg_dump
工具包括以下优势:
与PolarDB PostgreSQL轻量版完全兼容。
支持在不同服务器架构间传递数据。例如,将数据文件从32位服务器传递到64位服务器。
在
pg_dump
开始运行时刻创建一个一致性快照,仅读取数据库当前状态,不受后续事务影响。在
pg_dump
运行过程中不会阻塞其他数据库的操作。但是会阻塞需要排它锁的操作,例如ALTER TABLE
。
SQL备份
使用一个由SQL命令组成的文件创建与备份时状态相同的数据库。在集群启动后,您可以通过PolarDB PostgreSQL轻量版中内置的pg_dump
工具导出数据文件。pg_dump
默认安装在/u01/polardb_pg/bin
目录下。
pg_dump dbname > dumpfile
使用说明
pg_dump
支持以其他格式创建文件,同时具备并行处理能力以及对细粒度对象恢复的控制功能。您可以在任何能够访问该集群的远程主机上执行备份操作。但是,
pg_dump
不能在任何特殊权限下运行,必须具备备份表的读取权限。对应地,您可以使用-n schema
或-t table
选项,以备份该数据库中您能够访问的部分。需要使用命令行选项
-h
和-p
指定pg_dump
连接集群地址和端口。如果为空,则使用默认值,其中,-h
为本地主机或PGHOST
环境变量,-p
为默认端口1523。默认情况下,
pg_dump
使用与当前操作系统用户名同名的数据库用户连接集群。如需使用其他数据库用户,请增加选项-U,或设置环境变量PGUSER
。pg_dump
的连接需要通过客户端认证。
通过备份文件恢复数据
前提条件
请提前创建备份文件所需的相关角色,并确认该角色已被授予读取权限。
恢复操作
psql dbname < dumpfile
其中,dbname
为已存在的需要恢复数据的目标数据库,dumpfile
为pg_dump
导出的备份文件。
注意事项
默认情况下,遇到SQL错误时恢复操作会继续执行。对于这种场景您可以增加
ON_ERROR_STOP
变量,在遇到SQL错误时将退出运行并返回当前状态,但是您只能得到一个部分恢复的数据库,请谨慎考虑后使用。psql --set ON_ERROR_STOP=on dbname < dumpfile
可通过增加
-1
或--single-transaction
选项,将整个恢复作为一个单独的事务运行。在这种模式下,即便是微小的错误也可能导致经过数小时运行后的恢复失败,请谨慎考虑后使用。pg_dump
和psql
读写管道的能力支持直接跨主机数据恢复。例如:pg_dump -h host1 dbname | psql -h host2 dbname
pg_dumpall
pg_dump
仅支持备份单个数据库,但不包括角色和表空间信息。对应地,您可以使用pg_dumpall
备份整个数据库集群。
# 备份文件
pg_dumpall > dumpfile
# 使用备份文件恢复数据
psql -f dumpfile postgres
注意事项
使用
pg_dumpall
备份文件恢复数据时,可以指定恢复到任何已存在的数据库。如果备份文件中包含CREATE DATABASE
语句,若该数据库已存在会导致数据冲突。如果需要恢复到空集群建议连接到目标集群的postgres
库。使用
pg_dumpall
备份文件恢复数据时,通常需要以数据库超级用户身份操作,以恢复角色和表空间信息。此外,如备份文件中包含表空间信息,请验证表空间路径在新环境中的有效性。使用pg_dumpall备份文件时,首先发出命令以重建角色、表空间以及空数据库,然后逐一为每个数据库生成备份。虽然每个数据库的备份是自身一致的,但由于每个数据库备份操作是顺序进行的,因此它们在备份时的状态可能不同(即不完全同步)。
常见问题
物理备份
使用原生PostgreSQL提供的物理备份工具pg_basebackup,支持创建整个数据目录的备份。此外,支持将归档的WAL日志与数据备份结合使用,允许在恢复过程中实现按时间点恢复(PITR),可精确到秒级恢复。
语法
pg_basebackup -D /home/polar1/testbackupdir --host=<PolarDB_Endpoint> --port=<PolarDB_Port> -U <user_name> --no-sync --write-recovery-conf --format=tar --gzip -X fetch
其中:
-D
:指定备份存储的目录。--host
:集群地址。--port
:集群端口。-U
:连接集群的用户。--no-sync
:在备份完成后,不强制进行同步写入。该参数可能会提升性能,但在集群发生崩溃时,存在数据丢失的风险。--write-recovery-conf
:在备份完成后,生成一个recovery.conf
文件,使得在恢复时能够自动应用WAL日志进行时间点恢复(PITR)。--format
:备份文件格式。--gzip
:使用gzip
格式压缩。-X fetch
:指定WAL日志文件的处理方式。此处使用fetch
,表示在备份过程中从主服务器获取所需的WAL日志,这可以确保在进行时间点恢复时备份的完整。
基础备份恢复
备份
使用pg_basebackup
命令进行全量备份,并将备份集以gzip
格式压缩,具体命令及示例如下:
pg_basebackup -D /home/polar1/testbackupdir --host=<PolarDB_Endpoint> --port=<PolarDB_Port> -U <user_name> --no-sync --write-recovery-conf --format=tar --gzip -X fetch
恢复
将物理备份文件解压至恢复节点的本地目录。
tar -zxvf /home/polar1/testbackupdir/base.tar.gz -C /home/polar1/testrestoredir
更新
postgresql.conf
配置文件。port = 1525 recovery_target_action = 'promote'
更改解压后备份文件目录权限。
chmod 0700 -R /home/polar1/testbackupdir
启动数据库。
pg_ctl start -D /home/polar1/testbackupdir
日志归档
通过设置archive_mode
和archive_command
参数,将日志归档到指定位置。主备服务器均需进行相应设置,并重启数据库以使配置生效。
postgresql.conf
配置示例
# 打开日志归档功能
archive_mode = on
# 此处将日志压缩并归档到目录/home/polar1/testarchivedir
archive_command = 'gzip < %p > /home/polar1/testarchivedir/%f.gz'
按时间点恢复(PITR)
启用日志归档功能。
数据备份。使用pg_basebackup命令进行全量备份,并将备份集以gzip格式进行压缩。
pg_basebackup -D /home/polar1/testbackupdir --host=<PolarDB_Endpoint> --port=<PolarDB_Port> -U <user_name> --no-sync --write-recovery-conf --format=tar --gzip -X fetch
在数据恢复的目标数据库中构造数据结构。
CREATE TABLE test(id int); INSERT INTO test VALUES(1); INSERT INTO test VALUES(2); SELECT now(); now ------------------------------- 2024-08-26 08:17:34.432277+00 (1 row) INSERT INTO test VALUES(3); INSERT INTO test VALUES(4);
将物理备份文件解压至恢复节点的本地目录。
tar -zxvf /home/polar1/testbackupdir/base.tar.gz -C /home/polar1/testrestoredir
更新
postgresql.conf
配置文件。port = 1525 recovery_target_action = 'promote' restore_command = 'gunzip < /home/polar1/testarchivedir/%f.gz > %p' recovery_target_time = '2024-08-26 08:17:34.432277 UTC' recovery_target_action = 'promote'
更改解压后备份文件目录权限。
chmod 0700 -R /home/polar1/testbackupdir
启动数据库。
pg_ctl start -D /home/polar1/testbackupdir
数据恢复结果验证。
TABLE test;
返回结果如下,数据恢复至目标时间。
id ---- 1 2 (2 rows)
- 本页导读 (1)
- 逻辑备份
- SQL备份
- 通过备份文件恢复数据
- pg_dumpall
- 常见问题
- 物理备份
- 基础备份恢复
- 日志归档
- 按时间点恢复(PITR)