备份与恢复
概述
数据备份是保护数据安全的重要手段之一,为了更好的保护数据安全,openGauss数据库支持三种备份恢复类型,以及多种备份恢复方案,备份和恢复过程中提供数据的可靠性保障机制。
备份与恢复类型可分为逻辑备份与恢复、物理备份与恢复、闪回恢复。
- 逻辑备份与恢复:通过逻辑导出对数据进行备份,逻辑备份只能基于备份时刻进行数据转储,所以恢复时也只能恢复到备份时保存的数据。对于故障点和备份点之间的数据,逻辑备份无能为力,逻辑备份适合备份那些很少变化的数据,当这些数据因误操作被损坏时,可以通过逻辑备份进行快速恢复。如果通过逻辑备份进行全库恢复,通常需要重建数据库,导入备份数据来完成,对于可用性要求很高的数据库,这种恢复时间太长,通常不被采用。由于逻辑备份具有平台无关性,所以更为常见的是,逻辑备份被作为一个数据迁移及移动的主要手段。
- 物理备份与恢复:通过物理文件拷贝的方式对数据库进行备份,以磁盘块为基本单位将数据从主机复制到备机。通过备份的数据文件及归档日志等文件,数据库可以进行完全恢复。物理备份速度快,一般被用作对数据进行备份和恢复,用于全量备份的场景。通过合理规划,可以低成本进行备份与恢复。
- 闪回恢复:利用回收站的闪回恢复删除的表。数据库的回收站功能类似于windows系统的回收站,将删除的表信息保存到回收站中。利用MVCC机制闪回恢复到指定时间点或者CSN点。
以下为openGauss支持的三类数据备份恢复方案,备份方案也决定了当异常发生时该如何恢复。
表 1 三种备份恢复类型对比
| 备份类型 | 应用场景 | 支持的介质 | 工具名称 | 恢复时间 | 优缺点 |
|---|---|---|---|---|---|
| 逻辑备份与恢复 | 适合于数据量小的场景。 可以备份单表和多表,单database和所有database。备份后的数据需要使用gsql或者gs_restore工具恢复。数据量大时,恢复需要较长时间。 | 磁盘 SSD | gs_dump | 纯文本格式数据恢复时间长。归档格式数据恢复时间中等。 | 导出数据库相关信息的工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等)。支持导出的数据库可以是默认数据库postgres,也可以是自定义数据库。导出的格式可选择纯文本格式或者归档格式。纯文本格式的数据只能通过gsql进行恢复,恢复时间较长。归档格式的数据只能通过gs_restore进行恢复,恢复时间较纯文本格式短。 |
| gs_dumpall | 数据恢复时间长。 | 导出所有数据库相关信息工具,它可以导出openGauss数据库的所有数据,包括默认数据库postgres的数据、自定义数据库的数据、以及openGauss所有数据库公共的全局对象。 只能导出纯文本格式的数据,导出的数据只能通过gsql进行恢复,恢复时间较长。 | |||
| 物理备份与恢复 | 适用于数据量大的场景,主要用于全量数据备份恢复,也可对整个数据库中的WAL归档日志和运行日志进行备份。 | gs_backup | 数据量小数据恢复时间快。 | 导出数据库相关信息的OM工具,可以导出数据库参数文件和二进制文件。帮助openGauss备份、恢复重要数据、显示帮助信息和版本号信息。在进行备份时,可以选择备份内容的类型,在进行还原时,需要保证各节点备份目录中存在备份文件。在数据库实例恢复时,通过静态配置文件中的数据库实例信息进行恢复。只恢复参数文件恢复时间较短。 | |
| gs_basebackup | 恢复时可以直接拷贝替换原有的文件, 或者直接在备份的库上启动数据库,恢复时间快。 | 对服务器数据库文件的二进制进行全量拷贝,只能对数据库某一个时间点的时间作备份。结合PITR恢复,可恢复全量备份时间点后的某一时间点。 | |||
| gs_probackup | 恢复时可以直接恢复到某个备份点,在备份的库上启动数据库,恢复时间快。 | gs_probackup是一个用于管理openGauss数据库备份和恢复的工具。它对openGauss 实例进行定期备份。可用于备份单机数据库或者数据库实例主节点,为物理备份。 可备份外部目录的内容,如脚本文件、配置文件、日志文件、dump文件等。 支持增量备份、定期备份和远程备份。增量备份时间相对于全量备份时间比较短,只需要备份修改的文件。当前默认备份是数据目录,如果表空间不在数据目录,需要手动指定备份的表空间目录进行备份。当前只支持在主机上执行备份。 | |||
| 闪回恢复 | 适用于: 1)误删除表的场景; 2)需要将表中的数据恢复到指定时间点或者CSN。 | 无 | 可以将表的状态恢复到指定时间点或者是表结构删除前的状态,恢复时间快。 | 闪回技术能够有选择性的高效撤销一个已提交事务的影响,从人为错误中恢复。在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。 闪回支持两种恢复模式: - 基于MVCC多版本的数据恢复:适用于误删除、误更新、误插入数据的查询和恢复,用户通过配置旧版本保留时间,并执行相应的查询或恢复命令,查询或恢复到指定的时间点或CSN点。 - 基于类似windows系统回收站的恢复:适用于误DROP、误TRUNCATE的表的恢复。用户通过配置回收站开关,并执行相应的恢复命令,可以将误DROP、误TRUNCATE的表找回。 |
当需要进行备份恢复操作时,主要从以下四个方面考虑数据备份方案。
- 备份对业务的影响在可接受范围。
-
数据库恢复效率。
为尽量减小数据库故障的影响,要使恢复时间减到最少,从而使恢复的效率达到最高。 - 数据可恢复程度。
当数据库失效后,要尽量减少数据损失。 - 数据库恢复成本。
在现网选择备份策略时参考的因素比较多,如备份对象、数据大小、网络配置等,表2列出了可用的备份策略和每个备份策略的适用场景。
表 2 备份策略典型场景
| 备份策略 | 关键性能因素 | 典型数据量 | 性能规格 |
|---|---|---|---|
| 数据库实例备份 | - 数据大小 - 网络配置 | 数据:PB级 对象:约100万个 | 备份: - 每个主机80 Mbit/s(NBU/EISOO+磁盘) - 约90%磁盘I/O速率(SSD/HDD) |
| 表备份 | - 表所在模式 - 网络配置(NBU) | 数据:10 TB级 | 备份:基于查询性能速度+I/O速度 说明: 多表备份时,备份耗时计算方式: 1. 总时间 = 表数量 x 起步时间 + 数据总量 / 数据备份速度 其中: - 磁盘起步时间为5s左右,NBU起步时间比DISK长(取决于NBU部署方案)。 - 数据备份速度为单节点50MB/s左右(基于1GB大小的表,物理机备份到本地磁盘得出此速率)。 表越小,备份性能更低。 |
物理备份恢复
gs_backup
背景信息
openGauss部署成功后,在数据库运行的过程中,会遇到各种问题及异常状态。openGauss提供了gs_backup工具帮助openGauss备份、恢复重要数据、显示帮助信息和版本号信息。
前提条件
- 可以正常连接openGauss数据库。
- 在进行还原时,需要保证各节点备份目录中存在备份文件。
- 需以操作系统用户omm执行gs_backup命令。
语法
- 备份数据库主机
1. gs_backup -t backup --backup-dir=BACKUPDIR [-h HOSTNAME] [--parameter] [--binary] [--all] [-l LOGFILE]
- 恢复数据库主机
1. gs_backup -t restore --backup-dir=BACKUPDIR [-h HOSTNAME] [--parameter] [--binary] [--all] [-l LOGFILE] [--force]
- 显示帮助信息
1. gs_backup -? | --help
- 显示版本号信息
1. gs_backup -V | --version
参数说明
gs_backup参数可以分为如下几类:
-
备份数据库主机参数:
-
-h
指定存储备份文件的主机名称。
取值范围:主机名称。如果不指定主机名称,则备份当前数据库实例。 - –backup-dir=BACKUPDIR
备份文件保存路径。 - –parameter
备份参数文件,不指定–parameter、–binary、–all参数时默认只备份参数文件。 - –binary
备份app目录下的二进制文件。 - –all
备份app目录下的二进制文件、pg_hba.conf和postgsql.conf文件。 - -l
指定日志文件及存放路径。
默认值:$GAUSSLOG/om/gs_backup-YYYY-MM-DD_hhmmss.log - 恢复数据库主机参数:
-
-h
指定需要恢复主机的名称。
取值范围:主机名称。如果不指定主机,则恢复对应的备份节点。 - –backup-dir=BACKUPDIR
恢复文件提取路径。 - –parameter
恢复参数文件,不指定–parameter、–binary、–all参数时默认只恢复参数文件。 - –binary
恢复二进制文件。 - –all
恢复二进制和参数文件。 - -l
指定日志文件及存放路径。
默认值:$GAUSSLOG/om/gs_backup-YYYY-MM-DD_hhmmss.log - –force
节点的静态文件丢失后强行restore,仅限–all 或者–binary一起使用时才生效。 - 其他参数:
-
-?, –help
显示帮助信息。 - -V, –version
显示版本号信息。 - -t
指定操作类型。
取值范围:backup 或者 restore。
示例
- 使用gs_backup脚本备份数据库主机。
1. gs_backup -t backup --backup-dir=/opt/software/gaussdb/backup_dir -h plat1 --parameter
2. Backing up openGauss.
3. Parsing configuration files.
4. Successfully parsed the configuration file.
5. Performing remote backup.
6. Remote backup succeeded.
7. Successfully backed up openGauss.
- 使用gs_backup脚本恢复数据库主机。
1. gs_backup -t restore --backup-dir=/opt/software/gaussdb/backup_dir -h plat1 --parameter
2. Restoring openGauss.
3. Parsing the configuration file.
4. Successfully parsed configuration files.
5. Performing remote restoration.
6. Remote restoration succeeded.
7. Successfully restored openGauss.
gs_basebackup
背景信息
openGauss部署成功后,在数据库运行的过程中,会遇到各种问题及异常状态。openGauss提供了gs_basebackup工具做基础的物理备份。gs_basebackup的实现目标是对服务器数据库文件的二进制进行拷贝,其实现原理使用了复制协议。远程执行gs_basebackup时,需要使用系统管理员账户。gs_basebackup当前支持热备份模式和压缩格式备份。
说明:
- gs_basebackup仅支持主机和备机的全量备份,不支持增量。
- gs_basebackup当前支持热备份模式和压缩格式备份。
- gs_basebackup在备份包含绝对路径的表空间时,如果在同一台机器上进行备份,可以通过tablespace-mapping重定向表空间路径,或使用归档模式进行备份。
- 若打开增量检测点功能且打开双写,gs_basebackup也会备份双写文件。
- 若pg_xlog目录为软链接,备份时将不会建立软链接,会直接将数据备份到目的路径的pg_xlog目录下。
- 备份过程中收回用户备份权限,可能导致备份失败或者备份数据不可用。
- 如果因为网络临时故障等原因导致Server端无应答,gs_basebackup将在最长等待120秒后退出。
前提条件
- 可以正常连接openGauss数据库。
- 备份过程中用户权限没有被回收。
- pg_hba.conf中需要配置允许复制链接,且该连接必须由一个系统管理员建立。
- 如果xlog传输模式为stream模式,需要配置max_wal_senders的数量, 至少有一个可用。
- 如果xlog传输模式为fetch模式,有必要把wal_keep_segments参数设置得足够高,这样在备份末尾之前日志不会被移除。
- 在进行还原时,需要保证各节点备份目录中存在备份文件,若备份文件丢失,则需要从其他节点进行拷贝。
语法
- 显示帮助信息
1. gs_basebackup -? | --help
- 显示版本号信息
1. gs_basebackup -V | --version
参数说明
gs_basebackup参数可以分为如下几类:
- -D directory
备份文件输出的目录,必选项。 - 常用参数:
-
-c,–checkpoint=fast|spread
设置检查点模式为fast或者spread(默认)。 - -l,–label=LABEL
为备份设置标签。 - -P,–progress
启用进展报告。 - -v, –verbose
启用冗长模式。 - -V, –version
打印版本后退出。 - -?,–help
显示gs_basebackup命令行参数。 - -T,–tablespace-mapping=olddir=newdir
在备份期间将目录olddir中的表空间重定位到newdir中。为使之有效,olddir必须正好匹配表空间所在的路径(但如果备份中没有包含olddir中的表空间也不是错误)。olddir和newdir必须是绝对路径。如果一个路径凑巧包含了一个=符号,可用反斜线对它转义。对于多个表空间可以多次使用这个选项。 - -F,–format=plain|tar
设置输出格式为plain(默认)或者tar。没有设置该参数的情况下,默认–format=plain。plain格式把输出写成平面文件,使用和当前数据目录和表空间相同的布局。当集簇没有额外表空间时,整个数据库将被放在目标目录中。如果集簇包含额外的表空间,主数据目录将被放置在目标目录中,但是所有其他表空间将被放在它们位于服务器上的相同的绝对路径中。tar模式将输出写成目标目录中的 tar 文件。主数据目录将被写入到一个名为base.tar的文件中,并且其他表空间将被以其 OID 命名。生成的tar包,需要用gs_tar命令解压。 - -X, –xlog-method=fetch|stream
设置xlog传输方式。没有设置该参数的情况下,默认–xlog-method=stream。在备份中包括所需的预写式日志文件(WAL文件)。这包括所有在备份期间产生的预写式日志。fetch方式在备份末尾收集预写式日志文件。因此,有必要把wal_keep_segments参数设置得足够高,这样在备份末尾之前日志不会被移除。如果在要传输日志时它已经被轮转,备份将失败并且是不可用的。stream方式在备份被创建时流传送预写式日志。这将开启一个到服务器的第二连接并且在运行备份时并行开始流传输预写式日志。因此,它将使用最多两个由max_wal_senders参数配置的连接。只要客户端能保持接收预写式日志,使用这种模式不需要在主控机上保存额外的预写式日志。 - -x,
–xlog 使用这个选项等效于和方法fetch一起使用-X。 - -Z –compress=level
启用对 tar 文件输出的 gzip 压缩,并且制定压缩级别(0 到 9,0 是不压缩,9 是最佳压缩)。只有使用 tar 格式时压缩才可用,并且会在所有tar文件名后面自动加上后缀.gz。 - -z
启用对 tar 文件输出的 gzip 压缩,使用默认的压缩级别。只有使用 tar 格式时压缩才可用,并且会在所有tar文件名后面自动加上后缀.gz。 - -t,–rw-timeout
设置备份期间checkpoint的时间限制,默认限制时间为120s。当数据库全量checkpoint耗时较长时,可以适当增大rw-timeout限制时间。 - 连接参数
-
-h, –host=HOSTNAME
指定正在运行服务器的主机名或者Unix域套接字的路径。 - -p,–port=PORT
指定数据库服务器的端口号。
可以通过port参数修改默认端口号。 - -U,–username=USERNAME
指定连接数据库的用户。 - -s, –status-interval=INTERVAL
发送到服务器的状态包的时间(以秒为单位)。 - -w,–no-password
不出现输入密码提示。 - -W, –password
当使用-U参数连接本地数据库或者连接远端数据库时,可通过指定该选项出现输入密码提示。
示例
1. gs_basebackup -D /home/test/trunk/install/data/backup -h 127.0.0.1 -p 21233
2. INFO: The starting position of the xlog copy of the full build is: 0/1B800000. The slot minimum LSN is: 0/1B800000.
从备份文件恢复数据
当数据库发生故障时需要从备份文件进行恢复。因为gs_basebackup是对数据库按二进制进行备份,因此恢复时可以直接拷贝替换原有的文件,或者直接在备份的库上启动数据库。
说明:
- 若当前数据库实例正在运行,直接从备份文件启动数据库可能会存在端口冲突,这时需要修改配置文件的port参数,或者在启动数据库时指定一下端口。
- 若当前备份文件为主备数据库,可能需要修改一下主备之间的复制连接。即配置文件中的postgre.conf中的replconninfo1、 replconninfo2等。
- 若配置文件postgresql.conf的参数data_directory打开且有配置,当使用备份目录启动数据库时候,data_directory和备份目录不同会导致启动失败。可以修改data_directory的值为新的数据目录,或者注释掉该参数。
若要在原库的地方恢复数据库,参考步骤如下:
- 停止数据库服务器, 具体操作请参见《管理员指南》。
- 将原数据库和所有表空间复制到另外一个位置,以备后面需要。
- 清理原库中的所有或部分文件。
- 使用数据库系统用户权限从备份中还原需要的数据库文件。
- 若数据库中存在链接文件,需要修改使其链接到正确的文件。
- 重启数据库服务器,并检查数据库内容,确保数据库已经恢复到所需的状态。
说明:
- 暂不支持备份文件增量恢复。
- 恢复后需要检查数据库中的链接文件是否链接到正确的文件。
PITR恢复
背景信息
当数据库崩溃或希望回退到数据库之前的某一状态时,openGauss的即时恢复功能(Point-In-Time Recovery,简称PITR)可以支持恢复到备份归档数据之后的任意时间点。
说明:
- PITR仅支持恢复到物理备份数据之后的某一时间点。
- 仅主节点可以进行PITR恢复,备机需要进行全量build达成与主机数据同步。
前提条件
- 基于经过物理备份的全量数据文件。
- 基于已归档的WAL日志文件。
PITR恢复流程
- 将物理备份的文件替换目标数据库目录。
- 删除数据库目录下pg_xlog/中的所有文件。
- 将归档的WAL日志文件复制到pg_xlog文件中(此步骤可以省略,通过配置recovery.conf恢复命令文件中的restore_command项替代)。
- 在数据库目录下创建恢复命令文件recovery.conf,指定数据库恢复的程度。
- 启动数据库。
- 连接数据库,查看是否恢复到希望预期的状态。
- 若已经恢复到预期状态,通过pg_xlog_replay_resume()指令使主节点对外提供服务。
recovery.conf文件配置
归档恢复配置
- restore_command = string
这个SHELL命令是获取WAL文件系列中已归档的WAL文件。字符串中的任何一个%f是用归档检索中的文件名替换, 并且%p是用服务器上的复制目的地的路径名替换。 任意一个%r是用包含最新可用重启点的文件名替换。
示例:
1. restore_command = 'cp /mnt/server/archivedir/%f %p'
- archive_cleanup_command = string
这个选项参数声明一个shell命令。在每次重启时会执行这个shell命令。 archive_cleanup_command为清理备库不需要的归档WAL文件提供一个机制。 任何一个%r由包含最新可用重启点的文件名代替。这是最早的文件,因此必须保留以允许恢复能够重新启动,因此所有早于%r的文件可以安全的移除。
示例:
1. archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'
需要注意的是,如果多个备服务器从相同的归档路径恢复时, 需要确保在任何一个备服务器在需要之前,不能删除WAL文件。
- recovery_end_command = string
这个参数是可选的,用于声明一个只在恢复完成时执行的SHELL命令。recovery_end_command是为以后的复制或恢复提供一个清理机制。
恢复目标设置
- recovery_target_name = string
此参数声明命名还原到一个使用pg_create_restore_point()创建的还原点。
示例:
1. recovery_target_name = 'restore_point_1'
- recovery_target_time = timestamp
此参数声明命名还原到一个指定时间戳。
示例:
1. recovery_target_time = '2020-01-01 12:00:00'
- recovery_target_xid = string
这个参数声明还原到一个事务ID。
示例:
1. recovery_target_xid = '3000'
- recovery_target_lsn = string
这个参数声明还原到日志的指定LSN点。
示例:
1. recovery_target_lsn = '0/0FFFFFF'
- recovery_target_inclusive = boolean
声明是否在指定恢复目标(true)之后停止,或在这(false)之前停止。改声明仅支持恢复目标为recovery_target_time、recovery_target_xid和recovery_target_lsn的配置。
示例:
1. recovery_target_inclusive = true
说明:
- recovery_target_name、recovery_target_time、recovery_target_xid、recovery_target_lsn这四个配置项仅同时支持一项。
- 如果不配置任何恢复目标,或配置目标不存在,则默认恢复到最新的WAL日志点。
gs_probackup
背景信息
gs_probackup是一个用于管理openGauss数据库备份和恢复的工具。它对openGauss实例进行定期备份,以便在数据库出现故障时能够恢复服务器。
- 可用于备份单机数据库,也可对主机或者主节点数据库备机进行备份,为物理备份。
- 可备份外部目录的内容,如脚本文件、配置文件、日志文件、dump文件等。
- 支持增量备份、定期备份和远程备份。
- 可设置备份的留存策略。
前提条件
- 可以正常连接openGauss数据库。
- 若要使用PTRACK增量备份,需在postgresql.conf中手动添加参数“enable_cbm_tracking = on”。
- 为了防止xlog在传输结束前被清理,请适当调高postgresql.conf文件中wal_keep_segments的值。
限制说明
- 备份必须由运行数据库服务器的用户执行。
- 备份和恢复的数据库服务器的主版本号必须相同。
- 如果要通过ssh在远程模式下备份数据库,需要在本地和远程主机安装相同主版本的数据库,并通过ssh-copy-id remote_user@remote_host命令设置本地主机备份用户和远程主机数据库用户的无密码ssh连接。
- 远程模式下只能执行add-instance、backup、restore子命令。
- 使用restore子命令前,应先停止gaussdb进程。
- 当存在用户自定义表空间时,备份的时候要加上 –external-dirs 参数,否则,该表空间不会被备份。
- 当备份的规模比较大时,为了防止备份过程中timeout发生,请适当调整postgresql.conf文件的参数 session_timeout、wal_sender_timeout。并且在备份的命令行参数中适当调整参数–rw-timeout的值。
- 恢复时,使用-T选项把备份中的外部目录重定向到新目录时,请同时指定参数–external-mapping。
- 增量备份恢复后,之前创建的逻辑复制槽不可用,需删除重建。
- 当使用远程备份时,请确保远程机器和备份机器的时钟同步,以防止使用–recovery-target-time恢复的场合,启动gaussdb时有可能会失败。
- 当远程备份有效时(remote-proto=ssh),请确保-h和–remote-host指定的是同一台机器。当远程备份无效时,如果指定了-h选项,请确保-h指定的是本机地址或本机主机名。
- 当前暂不支持备份逻辑复制槽。
命令说明
- 打印gs_probackup版本。
1. gs_probackup -V|--version
2. gs_probackup version
- 显示gs_probackup命令的摘要信息。如果指定了gs_probackup的子命令,则显示可用于此子命令的参数的详细信息。
1. gs_probackup -?|--help
2. gs_probackup help [command]
- 初始化备份路径_backup-path_中的备份目录,该目录将存储已备份的内容。如果备份路径_backup-path_已存在,则_backup-path_必须为空目录。
1. gs_probackup init -B backup-path [--help]
- 在备份路径_backup-path_内初始化一个新的备份实例,并生成pg_probackup.conf配置文件,该文件保存了指定数据目录_pgdata-path_的gs_probackup设置。
1. gs_probackup add-instance -B backup-path -D pgdata-path --instance=instance_name
2. [-E external-directories-paths]
3. [remote_options] [dss_options]
4. [--help]
- 在备份路径_backup-path_内删除指定实例相关的备份内容。
1. gs_probackup del-instance -B backup-path --instance=instance_name
2. [--help]
- 将指定的连接、压缩、日志等相关设置添加到pg_probackup.conf配置文件中,或修改已设置的值。不推荐手动编辑pg_probackup.conf配置文件。
1. gs_probackup set-config -B backup-path --instance=instance_name
2. [-D pgdata-path] [-E external-directories-paths] [--archive-timeout=timeout]
3. [--retention-redundancy=retention-redundancy] [--retention-window=retention-window] [--wal-depth=wal-depth]
4. [--compress-algorithm=compress-algorithm] [--compress-level=compress-level]
5. [-d dbname] [-h hostname] [-p port] [-U username]
6. [logging_options] [remote_options] [dss_options]
7. [--help]
- 将备份相关设置添加到backup.control配置文件中,或修改已设置的值。
1. gs_probackup set-backup -B backup-path --instance=instance_name -i backup-id
2. [--note=text] [pinning_options]
3. [--help]
- 显示位于备份目录中的pg_probackup.conf配置文件的内容。可以通过指定–format=json选项,以json格式显示。默认情况下,显示为纯文本格式。
1. gs_probackup show-config -B backup-path --instance=instance_name
2. [--format=plain|json]
3. [--help]
- 显示备份目录的内容。如果指定了instance_name和backup_id,则显示该备份的详细信息。可以通过指定–format=json选项,以json格式显示。默认情况下,备份目录的内容显示为纯文本格式。
1. gs_probackup show -B backup-path
2. [--instance=instance_name [-i backup-id]] [--archive] [--format=plain|json]
3. [--help]
- 创建指定实例的备份。
1. gs_probackup backup -B backup-path --instance=instance_name -b backup-mode
2. [-D pgdata-path] [-C] [-S slot-name] [--temp-slot] [--backup-pg-log] [-j threads_num] [--progress]
3. [--no-validate] [--skip-block-validation] [-E external-directories-paths] [--no-sync] [--note=text]
4. [--archive-timeout=timeout] [-t rwtimeout]
5. [logging_options] [retention_options] [compression_options] [connection_options]
6. [remote_options] [dss_options] [pinning_options][--backup-pg-replslot]
7. [--help]
- 从备份目录_backup-path_中的备份副本恢复指定实例。如果指定了恢复目标选项,gs_probackup将查找最近的备份并将其还原到指定的恢复目标。否则,使用最近一次备份。
1. gs_probackup restore -B backup-path --instance=instance_name
2. [-D pgdata-path] [-i backup_id] [-j threads_num] [--progress] [--force] [--no-sync] [--no-validate] [--skip-block-validation]
3. [--external-mapping=OLDDIR=NEWDIR] [-T OLDDIR=NEWDIR] [--skip-external-dirs] [-I incremental_mode]
4. [recovery_options] [remote_options] [dss_options] [logging_options]
5. [--help]
- 将指定的增量备份与其父完全备份之间的所有增量备份合并到父完全备份。父完全备份将接收所有合并的数据,而已合并的增量备份将作为冗余被删除。
1. gs_probackup merge -B backup-path --instance=instance_name -i backup_id
2. [-j threads_num] [--progress] [logging_options]
3. [--help]
- 删除指定备份,或删除不满足当前保留策略的备份。
1. gs_probackup delete -B backup-path --instance=instance_name
2. [-i backup-id | --delete-expired | --merge-expired | --status=backup_status]
3. [--delete-wal] [-j threads_num] [--progress]
4. [--retention-redundancy=retention-redundancy] [--retention-window=retention-window]
5. [--wal-depth=wal-depth] [--dry-run]
6. [logging_options]
7. [--help]
- 验证恢复数据库所需的所有文件是否存在且未损坏。如果未指定_instance_name_,gs_probackup将验证备份目录中的所有可用备份。如果指定_instance_name_而不指定任何附加选项,gs_probackup将验证此备份实例的所有可用备份。如果指定了_instance_name_并且指定_backup-id_或恢复目标相关选项,gs_probackup将检查是否可以使用这些选项恢复数据库。
1. gs_probackup validate -B backup-path
2. [--instance=instance_name] [-i backup-id]
3. [-j threads_num] [--progress] [--skip-block-validation]
4. [--recovery-target-time=time | --recovery-target-xid=xid | --recovery-target-lsn=lsn | --recovery-target-name=target-name]
5. [--recovery-target-inclusive=boolean]
6. [logging_options]
7. [--help]
参数说明
通用参数
- command
gs_probackup除version和help以外的子命令:init、add-instance、del-instance、set-config、set-backup、show-config、show、backup、restore、merge、delete、validate。 - -?, –help
显示gs_probackup命令行参数的帮助信息,然后退出。
子命令中只能使用–help,不能使用-?。 - -V, –version
打印gs_probackup版本,然后退出。 - -B backup-path, –backup-path=backup-path
备份的路径。
系统环境变量:$BACKUP_PATH - -D pgdata-path, –pgdata=pgdata-path
数据目录的路径。
系统环境变量:$PGDATA - –instance=instance_name
实例名。 - -i backup-id, –backup-id=backup-id
备份的唯一标识。 - –format=format
指定显示备份信息的格式,支持plain和json格式。
默认值:plain - –status=backup_status
删除指定状态的所有备份,包含以下状态:
- OK:备份已完成且有效。
- DONE:备份已完成但未经过验证。
- RUNNING:备份正在进行中。
- MERGING:备份正在合并中。
- DELETING:备份正在删除中。
- CORRUPT:部分备份文件已损坏。
- ERROR:由于意外错误,备份失败。
- ORPHAN:由于其父备份之一已损坏或丢失,备份无效。
- -j threads_num, –threads=threads_num
设置备份、还原、合并进程的并行线程数。 - –archive
显示WAL归档信息。 - –progress
显示进度。 - –note=text
给备份添加note。
dss模式下添加实例相关参数
- –enable-dss
开启dss模式。 - –instance-id
数据库节点id号,因为dss模式只支持主机备份,因此该参数一般为0。 - –vgname
dss模式下数据库使用的卷的卷名。 - –socketpath
dss进程socket文件路径。
备份相关参数
- -b backup-mode, –backup-mode=backup-mode
指定备份模式,支持FULL和PTRACK。
FULL:创建全量备份,全量备份包含所有数据文件。
PTRACK:创建PTRACK增量备份。 - -C, –smooth-checkpoint
将检查点在一段时间内展开。默认情况下,gs_probackup会尝试尽快完成检查点。 - -S slot-name, –slot=slot-name
指定WAL流处理的复制slot。 - –temp-slot
在备份的实例中为WAL流处理创建一个临时物理复制slot,它确保在备份过程中,所有所需的WAL段仍然是可用的。
默认的slot名为pg_probackup_slot,可通过选项–slot/-S更改。 - –backup-pg-log
将日志目录包含到备份中。此目录通常包含日志消息。默认情况下包含日志目录,但不包含日志文件。如果修改了默认的日志路径,需要备份日志文件时可使用-E参数进行备份,使用方法见下文。 - -E external-directories-paths, –external-dirs=external-directories-paths
将指定的目录包含到备份中。此选项对于备份位于数据目录外部的脚本、sql转储和配置文件很有用。如果要备份多个外部目录,请在Unix上用冒号分隔它们的路径。
例如:-E /tmp/dir1:/tmp/dir2 - –skip-block-validation
关闭块级校验,加快备份速度。 - –no-validate
在完成备份后跳过自动验证。 - –no-sync
不将备份文件同步到磁盘。 - –archive-timeout=timeout
以秒为单位设置流式处理的超时时间。
默认值:300 - -t rwtimeout
以秒为单位的连接的超时时间。
默认值: 120
恢复相关参数
- -I, –incremental-mode=none|checksum|lsn
若PGDATA中可用的有效页没有修改,则重新使用它们。
默认值:none - –external-mapping=OLDDIR=NEWDIR
在恢复时,将包含在备份中的外部目录从_OLDDIR_重新定位到_NEWDIR_目录。_OLDDIR_和_NEWDIR_都必须是绝对路径。如果路径中包含“=”,则使用反斜杠转义。此选项可为多个目录多次指定。 - -T OLDDIR=NEWDIR, –tablespace-mapping=OLDDIR=NEWDIR
在恢复时,将表空间从_OLDDIR_重新定位到_NEWDIR_目录。_OLDDIR_和_NEWDIR_必须都是绝对路径。如果路径中包含“=”,则使用反斜杠转义。多个表空间可以多次指定此选项。此选项必须和–external-mapping一起使用。 - –skip-external-dirs
跳过备份中包含的使用–external-dirs选项指定的外部目录。这些目录的内容将不会被恢复。 - –skip-block-validation
跳过块级校验,以加快验证速度。在恢复之前的自动验证期间,将仅做文件级别的校验。 - –no-validate
跳过备份验证。 - –force
允许忽略备份的无效状态。如果出于某种原因需要从损坏的或无效的备份中恢复数据,可以使用此标志。请谨慎使用。
恢复目标相关参数(recovery_options)
说明: 当前不支持配置连续的WAL归档的PITR,因而使用这些参数会有一定限制,具体如下描述。 如果需要使用持续归档的WAL日志进行PITR恢复,请按照下面描述的步骤:
- 将物理备份的文件替换目标数据库目录。
- 删除数据库目录下pg_xlog/中的所有文件。
- 将归档的WAL日志文件复制到pg_xlog文件中(此步骤可以省略,通过配置recovery.conf恢复命令文件中的restore_command项替代)。
- 在数据库目录下创建恢复命令文件recovery.conf,指定数据库恢复的程度。
- 启动数据库。
- 连接数据库,查看是否恢复到希望预期的状态。若已经恢复到预期状态,通过pg_xlog_replay_resume()指令使主节点对外提供服务。
- –recovery-target-lsn=lsn
指定要恢复到的lsn,当前只能指定备份的stop lsn。 - –recovery-target-name=target-name
指定要将数据恢复到的已命名的保存点,保存点可以通过查看备份中recovery-name字段得到。 - –recovery-target-time=time
指定要恢复到的时间,当前只能指定备份中的recovery-time。 - –recovery-target-xid=xid
指定要恢复到的事务ID,当前只能指定备份中的recovery-xid。 - –recovery-target-inclusive=boolean
当该参数指定为true时,恢复目标将包括指定的内容。
当该参数指定为false时,恢复目标将不包括指定的内容。
该参数必须和–recovery-target-name、–recovery-target-time、–recovery-target-lsn或–recovery-target-xid一起使用。
留存相关参数(retention_options)
说明: 可以和backup和delete命令一起使用这些参数。
- –retention-redundancy=retention-redundancy
指定在数据目录中留存的完整备份数。必须为正整数。0表示禁用此设置。
默认值:0 - –retention-window=retention-window
指定留存的天数。必须为正整数。0表示禁用此设置。
默认值:0 - –wal-depth=wal-depth
每个时间轴上必须留存的执行PITR能力的最新有效备份数。必须为正整数。0表示禁用此设置。
默认值:0 - –delete-wal
从任何现有的备份中删除不需要的WAL文件。 - –delete-expired
删除不符合pg_probackup.conf配置文件中定义的留存策略的备份。 - –merge-expired
将满足留存策略要求的最旧的增量备份与其已过期的父备份合并。 - –dry-run
显示所有可用备份的当前状态,不删除或合并过期备份。
固定备份相关参数(pinning_options)
说明: 如果要将某些备份从已建立的留存策略中排除,可以和backup和set-backup命令一起使用这些参数。
- –ttl=interval
指定从恢复时间开始计算,备份要固定的时间量。必须为正整数。0表示取消备份固定。
支持的单位:ms, s, min, h, d(默认为s)。
例如:–ttl=30d。 - –expire-time=time
指定备份固定失效的时间戳。必须是ISO-8601标准的时间戳。
例如:–expire-time=’2020-01-01 00:00:00+03’
日志相关参数(logging_options)
日志级别:verbose、log、info、warning、error和off。
- –log-level-console=log-level-console
设置要发送到控制台的日志级别。每个级别都包含其后的所有级别。级别越高,发送的消息越少。指定off级别表示禁用控制台日志记录。
默认值:info - –log-level-file=log-level-file
设置要发送到日志文件的日志级别。每个级别都包含其后的所有级别。级别越高,发送的消息越少。指定off级别表示禁用日志文件记录。
默认值:off - –log-filename=log-filename
指定要创建的日志文件的文件名。文件名可以使用strftime模式,因此可以使用%-escapes指定随时间变化的文件名。
例如,如果指定了“pg_probackup-%u.log”模式,则pg_probackup为每周的每一天生成单独的日志文件,其中%u替换为相应的十进制数字,即pg_probackup-1.log表示星期一;pg_probackup-2.log表示星期二,以此类推。
如果指定了–log-level-file参数启用日志文件记录,则该参数有效。
默认值:“pg_probackup.log” - –error-log-filename=error-log-filename
指定仅用于error日志的日志文件名。指定方式与–log-filename参数相同。
此参数用于故障排除和监视。 - –log-directory=log-directory
指定创建日志文件的目录。必须是绝对路径。此目录会在写入第一条日志时创建。
默认值:$BACKUP_PATH/log - –log-rotation-size=log-rotation-size
指定单个日志文件的最大大小。如果达到此值,则启动gs_probackup命令后,日志文件将循环,但help和version命令除外。0表示禁用基于文件大小的循环。
支持的单位:KB、MB、GB、TB(默认为KB)。
默认值:0 - –log-rotation-age=log-rotation-age
单个日志文件的最大生命周期。如果达到此值,则启动gs_probackup命令后,日志文件将循环,但help和version命令除外。$BACKUP_PATH/log/log_rotation目录下保存最后一次创建日志文件的时间。0表示禁用基于时间的循环。
支持的单位:ms, s, min, h, d(默认为min)。
默认值:0
连接相关参数(connection_options)
说明: 可以和backup命令一起使用这些参数。
- -d dbname, –pgdatabase=dbname
指定要连接的数据库名称。该连接仅用于管理备份进程,因此您可以连接到任何现有的数据库。如果命令行、PGDATABASE环境变量或pg_probackup.conf配置文件中没有指定此参数,则gs_probackup会尝试从PGUSER环境变量中获取该值。如果未设置PGUSER变量,则从当前用户名获取。
系统环境变量:$PGDATABASE - -h hostname, –pghost=hostname
指定运行服务器的系统的主机名。如果该值以斜杠开头,则被用作到Unix域套接字的路径。
系统环境变量:$PGHOST
默认值:local socket - -p port, –pgport=*p*_ort_
指定服务器正在侦听连接的TCP端口或本地Unix域套接字文件扩展名。
系统环境变量:$PGPORT
默认值:5432 - -U username, –pguser=username
指定所连接主机的用户名。
系统环境变量:$PGUSER - -w, –no-password
不出现输入密码提示。如果主机要求密码认证并且密码没有通过其它形式给出,则连接尝试将会失败。 该选项在批量工作和不存在用户输入密码的脚本中很有帮助。 - -W password, –password=password
指定用户连接的密码。如果主机的认证策略是trust,则不会对系统管理员进行密码验证,即无需输入-W选项;如果没有-W选项,并且不是系统管理员,则会提示用户输入密码。
压缩相关参数(compression_options)
说明: 可以和backup命令一起使用这些参数。
- –compress-algorithm=compress-algorithm
指定用于压缩数据文件的算法。
取值包括zlib、pglz和none。如果设置为zlib或pglz,此选项将启用压缩。默认情况下,压缩功能处于关闭状态。
默认值:none - –compress-level=compress-level
指定压缩级别。取值范围:0~9
- 0表示无压缩。
- 1表示压缩比最小,处理速度最快。
- 9表示压缩比最大,处理速度最慢。
- 可与–compress-algorithm选项一起使用。
默认值:1 - –compress
以–compress-algorithm=zlib和–compress-level=1进行压缩。
远程模式相关参数(remote_options)
说明: 通过SSH远程运行gs_probackup操作的相关参数。可以和add-instance、set-config、backup、restore命令一起使用这些参数。
- –remote-proto=protocol
指定用于远程操作的协议。目前只支持SSH协议。取值包括:
ssh:通过SSH启用远程备份模式。这是默认值。
none:显式禁用远程模式。
如果指定了–remote-host参数,可以省略此参数。 - –remote-host=destination
指定要连接的远程主机的IP地址或主机名。 - –remote-port=port
指定要连接的远程主机的端口号。
默认值:22 - –remote-user=username
指定SSH连接的远程主机用户。如果省略此参数,则使用当前发起SSH连接的用户。
默认值:当前用户 - –remote-path=path
指定gs_probackup在远程系统的安装目录。
默认值:当前路径 - –remote-libpath=libpath
指定gs_probackup在远程系统安装的lib库目录。 - –ssh-options=ssh_options
指定SSH命令行参数的字符串。
例如:–ssh-options=’-c cipher_spec -F configfile’
说明:
- 如果因为网络临时故障等原因导致server端无应答,gs_probackup将在等待archive-timeout(默认300秒)后退出。
-
如果备机lsn与主机有差别时,数据库会不停地刷以下log信息,此时应重新build备机。
1. LOG: walsender thread shut down 2. LOG: walsender thread started 3. LOG: received wal replication command: IDENTIFY_VERSION 4. LOG: received wal replication command: IDENTIFY_MODE 5. LOG: received wal replication command: IDENTIFY_SYSTEM 6. LOG: received wal replication command: IDENTIFY_CONSISTENCE 0/D0002D8 7. LOG: remote request lsn/crc: [xxxxx] local max lsn/crc: [xxxxx]
备份流程
- 初始化备份目录。在指定的目录下创建backups/和wal/子目录,分别用于存放备份文件和WAL文件。
1. gs_probackup init -B backup_dir
2. 添加一个新的备份实例。gs_probackup可以在同一个备份目录下存放多个数据库实例的备份。
1. gs_probackup add-instance -B backup_dir -D data_dir --instance instance_name
3. 创建指定实例的备份。在进行增量备份之前,必须至少创建一次全量备份。
1. gs_probackup backup -B backup_dir --instance instance_name -b backup_mode
4. 从指定实例的备份中恢复数据。
1. gs_probackup restore -B backup_dir --instance instance_name -D pgdata-path -i backup_id
故障处理
| 问题描述 | 原因和解决方案 |
|---|---|
| ERROR: query failed: ERROR: canceling statement due to conflict with recovery (错误:查询失败:由于与恢复操作冲突,正在取消语句命令) | 原因:在备机上执行的操作正在访问存储行,主机上更改或者删除了对应的行,并将xlog在备机上重放,迫使备机上操作取消。 解决方案: 1. 适当增加如下配置参数的值 max_standby_archive_delay max_standby_streaming_delay 2. 增加如下配置 hot_standby_feedback = on |
逻辑备份恢复
gs_dump
背景信息
gs_dump是openGauss用于导出数据库相关信息的工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等),回收站对象除外。支持导出的数据库可以是默认数据库postgres,也可以是自定义数据库。
gs_dump工具由操作系统用户omm执行。
gs_dump工具在进行数据导出时,其他用户可以访问openGauss数据库(读或写)。
gs_dump工具支持导出完整一致的数据。例如,T1时刻启动gs_dump导出A数据库,那么导出数据结果将会是T1时刻A数据库的数据状态,T1时刻之后对A数据库的修改不会被导出。
gs_dump时生成列不会被转储。
gs_dump支持导出兼容v1版本数据库的文本格式文件。
gs_dump支持将数据库信息导出至纯文本格式的SQL脚本文件或其他归档文件中。
- 纯文本格式的SQL脚本文件:包含将数据库恢复为其保存时的状态所需的SQL语句。通过gsql运行该SQL脚本文件,可以恢复数据库。即使在其他主机和其他数据库产品上,只要对SQL脚本文件稍作修改,也可以用来重建数据库。
- 归档格式文件:包含将数据库恢复为其保存时的状态所需的数据,可以是tar格式、目录归档格式或自定义归档格式,详见表1。该导出结果必须与gs_restore配合使用来恢复数据库,gs_restore工具在导入时,系统允许用户选择需要导入的内容,甚至可以在导入之前对等待导入的内容进行排序。
主要功能
gs_dump可以创建四种不同的导出文件格式,通过**[-F或者–format=]**选项指定,具体如表1所示。
表 1 导出文件格式
| 格式名称 | -F的参数值 | 说明 | 建议 | 对应导入工具 |
|---|---|---|---|---|
| 纯文本格式 | p | 纯文本脚本文件包含SQL语句和命令。命令可以由gsql命令行终端程序执行,用于重新创建数据库对象并加载表数据。 | 小型数据库,一般推荐纯文本格式。 | 使用gsql工具恢复数据库对象前,可根据需要使用文本编辑器编辑纯文本导出文件。 |
| 自定义归档格式 | c | 一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。 | 中型或大型数据库,推荐自定义归档格式。 | 使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。 |
| 目录归档格式 | d | 该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和blob对象对应的数据文件。 | - | |
| tar归档格式 | t | tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单独表大小应小于8GB。 | - |
说明:
可以使用gs_dump程序将文件压缩为目录归档或自定义归档导出文件,减少导出文件的大小。生成目录归档或自定义归档导出文件时,默认进行中等级别的压缩。gs_dump程序无法压缩已归档导出文件。
注意事项
- 禁止修改-F c/d/t 格式导出的文件和内容,否则可能无法恢复成功。对于-F p 格式导出的文件,如有需要,可根据需要谨慎编辑导出文件。
- 为了保证数据一致性和完整性,gs_dump会对需要转储的表设置共享锁。如果表在别的事务中设置了共享锁,gs_dump会等待锁释放后锁定表。如果无法在指定时间内锁定某个表,转储会失败。用户可以通过指定–lock-wait-timeout选项,自定义等待锁超时时间。
- 不支持加密导出存储过程和函数。
语法
1. gs_dump [OPTION]... [DBNAME]
说明:
“DBNAME”前面不需要加短或长选项。“DBNAME指定要连接的数据库。 例如: 不需要-d,直接指”DBNAME”。
1. gs_dump -p port_number postgres -f dump1.sql或者
1. export PGDATABASE=postgres
1. gs_dump -p port_number -f dump1.sql环境变量: PGDATABASE
参数说明
通用参数:
- -f, –file=FILENAME
将输出发送至指定文件或目录。如果省略该参数,则使用标准输出。如果输出格式为(-F c/-F d/-F t)时,必须指定-f参数。如果-f的参数值含有目录,要求当前用户对该目录具有读写权限,并且不能指定已有目录。 - -F, –format=c|d|t|p
选择输出格式。格式如下:
- p|plain:输出一个文本SQL脚本文件(默认)。
- c|custom:输出一个自定义格式的归档,并且以目录形式输出,作为gs_restore输入信息。该格式是最灵活的输出格式,因为能手动选择,而且能在恢复过程中将归档项重新排序。该格式默认状态下会被压缩。
- d|directory:该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和blob对象对应的数据文件。
- t|tar:输出一个tar格式的归档形式,作为gs_restore输入信息。tar格式与目录格式兼容;tar格式归档形式在提取过程中会生成一个有效的目录格式归档形式。但是,tar格式不支持压缩且对于单独表有8GB的大小限制。此外,表数据项的相应排序在恢复过程中不能更改。
- -v, –verbose
指定verbose模式。该选项将导致gs_dump向转储文件输出详细的对象注解和启动/停止次数,向标准错误流输出处理信息。 - -V, –version
打印gs_dump版本,然后退出。 - -Z, –compress=0-9
指定使用的压缩比级别。
取值范围:0~9
- 0表示无压缩。
- 1表示压缩比最小,处理速度最快。
- 9表示压缩比最大,处理速度最慢。
针对自定义归档格式,该选项指定单个表数据片段的压缩,默认方式是以中等级别进行压缩。tar归档格式和纯文本格式目前不支持压缩。 - –lock-wait-timeout=TIMEOUT
请勿在转储刚开始时一直等待以获取共享表锁。如果无法在指定时间内锁定某个表,就选择失败。可以以任何符合SET statement_timeout的格式指定超时时间。 - -?, –help
显示gs_dump命令行参数帮助,然后退出。
转储参数:
- -a, –data-only
只输出数据,不输出模式(数据定义)。转储表数据、大对象和序列值。 - -b, –blobs
该参数为扩展预留接口,不建议使用。 - -c, –clean
在将创建数据库对象的指令输出到备份文件之前,先将清理(删除)数据库对象的指令输出到备份文件中。(如果目标数据库中没有任何对象,gs_restore工具可能会输出一些提示性的错误信息)
该选项只对文本格式有意义。针对归档格式,可以调用gs_restore时指定选项。 - -C, –create
备份文件以创建数据库和连接到创建的数据库的命令开始。(如果命令脚本是这种方式执行,可以先指定任意数据库用于执行创建数据库的命令,数据不会恢复到指定的数据库中,而是恢复到创建的数据库中。)
该选项只对文本格式有意义。针对归档格式,可以在调用gs_restore时指定选项。 - -E, –encoding=ENCODING
以指定的字符集编码创建转储。默认情况下,以数据库编码创建转储。(得到相同结果的另一个办法是将环境变量“PGCLIENTENCODING”设置为所需的转储编码。) - -n, –schema=SCHEMA
只转储与模式名称匹配的模式,此选项包括模式本身和所有它包含的对象。如果该选项没有指定,所有在目标数据库中的非系统模式将会被转储。写入多个-n选项来选择多个模式。此外,根据gsql的\d命令所使用的相同规则,模式参数可被理解成一个pattern,所以多个模式也可以通过在该pattern中写入通配符来选择。使用通配符时,注意给pattern打引号,防止shell扩展通配符。
说明:
- 当-n已指定时,gs_dump不会转储已选模式所附着的任何其他数据库对象。因此,无法保证某个指定模式的转储结果能够自行成功地储存到一个空数据库中。
- 当-n指定时,非模式对象不会被转储。
转储支持多个模式的转储。多次输入-n schemaname转储多个模式。
例如:
1. gs_dump -h host_name -p port_number postgres -f backup/bkp_shl2.sql -n sch1 -n sch2
在上面这个例子中,sch1和sch2会被转储。 - -N, –exclude-schema=SCHEMA
不转储任何与模式pattern匹配的模式。pattern将参照针对-n的相同规则来理解。可以通过输入多次-N,不转储与任何pattern匹配的模式。
当同时输入-n和-N时,会转储与至少一个-n选项匹配、与-N选项不匹配的模式。如果有-N没有-n,则不转储常规转储中与-N匹配的模式。
转储过程支持排除多个模式。
在转储过程中,输入-N exclude schema name排除多个模式。
例如:
1. gs_dump -h host_name -p port_number postgres -f backup/bkp_shl2.sql -N sch1 -N sch2
在上面这个例子中,sch1和sch2在转储过程中会被排除。 - -o, –oids
转储每个表的对象标识符(OIDs),作为表的一部分数据。该选项用于应用以某种方式参照了OID列的情况。如果不是以上这种情况,请勿使用该选项。 - -O, –no-owner
不输出设置对象的归属这样的命令,以匹配原始数据库。默认情况下,gs_dump会发出ALTER OWNER或SET SESSION AUTHORIZATION语句设置所创建的数据库对象的归属。如果脚本正在运行,该语句不会执行成功,除非是由系统管理员触发(或是拥有脚本中所有对象的同一个用户)。通过指定-O,编写一个任何用户都能存储的脚本,且该脚本会授予该用户拥有所有对象的权限。
该选项只对文本格式有意义。针对归档格式,可以在调用gs_restore时指定选项。 - -s, –schema-only
只转储对象定义(模式),而非数据。 - -S, –sysadmin=NAME
该参数为扩展预留接口,不建议使用。 - -t, –table=TABLE
指定转储的表(或视图、或序列、或外表)对象列表,可以使用多个-t选项来选择多个表,也可以使用通配符指定多个表对象。
当使用通配符指定多个表对象时,注意给pattern打引号,防止shell扩展通配符。
当使用-t时,-n和-N没有任何效应,这是因为由-t选择的表的转储不受那些选项的影响。
说明:
- -t参数选项个数必须小于等于100。
- 如果-t参数选项个数大于100,建议使用参数–include-table-file来替换。
- 当-t已指定时,gs_dump不会转储已选表所附着的任何其他数据库对象。因此,无法保证某个指定表的转储结果能够自行成功地储存到一个空数据库中。
- -t tablename只转储在默认搜索路径中可见的表。-t *.tablename转储数据库下所有模式下的tablename表。-t schema.table转储特定模式中的表。
- -t tablename不会导出表上的触发器信息。
- 对于表名中包含大写字母的表,在使用-t参数指定导出时需对表名添加”来导出。如对于表”abC”,导出需指定-t “abC”;如对于表schema.“abC”,导出需指定-t schema.”abC”。
例如:
1. gs_dump -h host_name -p port_number postgres -f backup/bkp_shl2.sql -t schema1.table1 -t schema2.table2
在上面这个例子中,schema1.table1和schema2.table2会被转储。 - –include-table-file=FILENAME
指定需要dump的表文件。 - -T, –exclude-table=TABLE
不转储的表(或视图、或序列、或外表)对象列表,可以使用多个-T选项来选择多个表,也可以使用通配符指定多个表对象。
当同时输入-t和-T时,会转储在-t列表中,而不在-T列表中的表对象。
例如:
1. gs_dump -h host_name -p port_number postgres -f backup/bkp_shl2.sql -T table1 -T table2
在上面这个例子中,table1和table2在转储过程中会被排除。 - –exclude-table-file=FILENAME
指定不需要dump的表文件。
说明:
- 同–include-table-file,其内容格式如下:
- schema1.table1
- schema2.table2 -……
- -x, –no-privileges|–no-acl
防止转储访问权限(授权/撤销命令)。 - -q, –target
指定导出兼容其他版本数据库的文本文件,目前支持v1和v5参数。v1参数用于导出v5数据库的数据为兼容v1的文本文件。v5参数用于导出v5数据库的数据为v5格式的文本文件,减少了导入v5时的可能的报错情况。
在使用v1参数时,建议和–exclude-guc=“enable_cluster_resize”,–exclude-function,–exclude-with等选项共用,否则导入到v1时可能报错。 - -g, –exclude-guc
该参数为扩展预留接口,不建议使用。 - –exclude-function
不导出函数和存储过程。 - –exclude-with
导出的表定义,末尾不添加WITH(orientation=row,compression=on)这样的描述。 - –binary-upgrade
该参数为扩展预留接口,不建议使用。 - –binary-upgrade-usermap=“USER1=USER2”
该参数为扩展预留接口,不建议使用。 - –column-inserts|–attribute-inserts
以INSERT命令带列名(INSERT INTO表(列、…)值…)方式导出数据。这会导致恢复缓慢。但是由于该选项会针对每行生成一个独立分开的命令,所以在重新加载某行时出现的错误只会导致那行丢失,而非整个表内容。 - –disable-dollar-quoting
该选项将禁止在函数体前使用美元符号$,并强制使用SQL标准字符串语法对其进行引用。 - –disable-triggers
该参数为扩展预留接口,不建议使用。 - –exclude-table-data=TABLE
指定不转储任何匹配表pattern的表这方面的数据。依照针对-t的相同规则理解该pattern。
可多次输入–exclude-table-data来排除匹配任何pattern的表。当用户需要特定表的定义但不需要其中的数据时,这个选项很有帮助。
排除数据库中所有表的数据,参见–schema-only。 - –inserts
发出INSERT命令(而非COPY命令)转储数据。这会导致恢复缓慢。
但是由于该选项会针对每行生成一个独立分开的命令,所以在重新加载某行时出现的错误只会导致那行丢失,而非整个表内容。注意:如果重排列顺序,可能会导致整个恢复失败。列顺序改变时,–column-inserts选项不受影响,虽然会更慢。 - –no-publications
不转储发布。 - –no-security-labels
该参数为扩展预留接口,不建议使用。 - –no-subscriptions
不转储订阅。 - –no-tablespaces
不输出选择表空间的命令。使用该选项,无论默认表空间是哪个,在恢复过程中所有对象都会被创建。
该选项只对文本格式有意义。针对归档格式,可以在调用gs_restore时指定选项。 - –no-unlogged-table-data
该参数为扩展预留接口,不建议使用。 - –non-lock-table
该参数仅供软件间接口调用。 - –include-alter-table
转储表删除列。该选项会记录列的删除。 - –quote-all-identifiers
强制对所有标识符加引号。为了向后续版本迁移,且其中可能涉及引入额外关键词,在转储相应数据库时该选项会有帮助。 - –section=SECTION
指定已转储的名称区段(pre-data、data和post-data)。 - –serializable-deferrable
转储过程中使用可串行化事务,以确保所使用的快照与之后的数据库状态一致;要实现该操作需要在无异常状况的事务流中等待某个点,因为这样才能保证转储成功,避免引起其他事务出现serialization_failure要重新再做。
但是该选项对于灾难恢复没有益处。对于在原始数据库进行升级的时候,加载一个数据库的拷贝作为报告或其他只读加载共享的转储是有帮助的。没有这个选项,转储会反映一个与任何事务最终提交的序列化执行不一致的状态。
如果当gs_dump启动时,读写事务仍处于非活动状态,即便使用该选项也不会对其产生影响。如果读写事务处于活动状态,转储的开始时间可能会延迟一段不确定的时间。 - –use-set-session-authorization
输出符合SQL标准的SET SESSION AUTHORIZATION命令而不是ALTER OWNER命令来确定对象所有权。这样令转储更加符合标准,但是如果转储文件中的对象的历史有些问题,那么可能不能正确恢复。并且,使用SET SESSION AUTHORIZATION的转储需要数据库系统管理员的权限才能转储成功,而ALTER OWNER需要的权限则低得多。 - –with-encryption=AES128
指定转储数据需用AES128进行加密。 - –with-key=KEY
AES128密钥规则如下:
- 密钥长度为8~16个字符。
- 至少包含大写字母(A-Z)、小写字母(a-z)、数字(0-9)、非字母数字字符(限定为~!@#$%^&*()-_=+|[{}];:,<.>/?)四类字符中的三类字符。
说明:- 使用gs_dump工具进行加密导出时,仅支持plain格式导出。通过-F plain导出的数据,需要通过gsql工具进行导入,且如果以加密方式导入,在通过gsql导入时,需要指定–with-key参数。
- 不支持加密导出存储过程和函数。
- –with-salt=RANDVALUES
gs_dumpall使用此参数传递随机值。 - –include-extensions
在转储中包含扩展。 - –include-depend-objs
备份结果包含依赖于指定对象的对象信息。该参数需要同-t/–include-table-file参数关联使用才会生效。 - –exclude-self
备份结果不包含指定对象自身的信息。该参数需要同-t/–include-table-file参数关联使用才会生效。 - –pipeline
使用管道传输密码,禁止在终端使用。 - –dont-overwrite-file
文本、tar以及自定义格式情况下会重写现有文件。这对目录格式不适用。
例如:
设想这样一种情景,即当前目录下backup.sql已存在。如果在输入命令中输入-f backup.sql选项时,当前目录恰好也生成backup.sql,文件就会被重写。
如果备份文件已存在,且输入–dont-overwrite-file选项,则会报告附带‘转储文件已经存在’信息的错误。
1. gs_dump -p port_number postgres -f backup.sql -F plain --dont-overwrite-file
说明:
- -s/–schema-only和-a/–data-only不能同时使用。
- -c/–clean和-a/–data-only不能同时使用。
- –inserts/–column-inserts和-o/–oids不能同时使用,因为INSERT命令不能设置OIDS。
- –role和–rolepassword必须一起使用。
- –binary-upgrade-usermap和–binary-upgrade必须一起使用。
- –include-depend-objs/–exclude-self需要同-t/–include-table-file参数关联使用才会生效。
- –exclude-self必须同–include-depend-objs一起使用。
连接参数:
- -h, –host=HOSTNAME
指定主机名称。如果数值以斜杠开头,则被用作到Unix域套接字的路径。缺省从PGHOST环境变量中获取(如果已设置),否则,尝试一个Unix域套接字连接。
该参数只针对openGauss外,对openGauss内本机只能用127.0.0.1。
例如:主机名
环境变量:PGHOST - -p, –port=PORT
指定主机端口。在开启线程池情况下,建议使用 pooler port,即主机端口+1。
环境变量:PGPORT - -U, –username=NAME
指定所连接主机的用户名。
不指定连接主机的用户名时,用户默认系统管理员。
环境变量:PGUSER - -w, –no-password
不出现输入密码提示。如果主机要求密码认证并且密码没有通过其它形式给出,则连接尝试将会失败。 该选项在批量工作和不存在用户输入密码的脚本中很有帮助。 - -W, –password=PASSWORD
指定用户连接的密码。如果主机的认证策略是trust,则不会对系统管理员进行密码验证,即无需输入-W选项;如果没有-W选项,并且不是系统管理员,“Dump Restore工具”会提示用户输入密码。 - –role=ROLENAME
指定创建转储使用的角色名。选择该选项,会使gs_dump连接数据库后,发起一个SET ROLE角色名命令。当所授权用户(由-U指定)没有gs_dump要求的权限时,该选项会起到作用,即切换到具备相应权限的角色。某些安装操作规定不允许直接以超系统管理员身份登录,而使用该选项能够在不违反该规定的情况下完成转储。 - –rolepassword=ROLEPASSWORD
指定角色名的密码。
说明
如果openGauss有任何本地数据要添加到template1数据库,请谨慎将gs_dump的输出恢复到一个真正的空数据库中,否则可能会因为被添加对象的定义被复制,出现错误。要创建一个无本地添加的空数据库,需从template0而非template1复制,例如:
1. CREATE DATABASE foo WITH TEMPLATE template0;
tar归档形式的文件大小不得超过8GB(tar文件格式的固有限制)。tar文档整体大小和任何其他输出格式没有限制,操作系统可能对此有要求。
由gs_dump生成的转储文件不包含优化程序用来做执行计划决定的统计数据。因此,最好从某转储文件恢复之后运行ANALYZE以确保最佳效果。转储文件不包含任何ALTER DATABASE…SET命令,这些设置由gs_dumpall转储,还有数据库用户和其他完成安装设置。
示例
使用gs_dump转储数据库为SQL文本文件或其它格式的操作,如下所示。
示例中“Bigdata@123”表示数据库用户密码;“backup/MPPDB_backup.sql”表示导出的文件,其中backup表示相对于当前目录的相对目录;“37300”表示数据库服务器端口;“postgres”表示要访问的数据库名。导出操作时,请确保该目录存在并且当前的操作系统用户对其具有读写权限。
示例1:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.sql文件格式为纯文本格式。
1. gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup.sql -p 37300 postgres -F p
2. gs_dump[port='37300'][postgres][2018-06-27 09:49:17]: The total objects number is 356.
3. gs_dump[port='37300'][postgres][2018-06-27 09:49:17]: [100.00%] 356 objects have been dumped.
4. gs_dump[port='37300'][postgres][2018-06-27 09:49:17]: dump database postgres successfully
5. gs_dump[port='37300'][postgres][2018-06-27 09:49:17]: total time: 1274 ms
使用gsql程序从纯文本导出文件中导入数据。
示例2:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.tar文件格式为tar格式。
1. gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup.tar -p 37300 postgres -F t
2. gs_dump[port='37300'][postgres][2018-06-27 10:02:24]: The total objects number is 1369.
3. gs_dump[port='37300'][postgres][2018-06-27 10:02:53]: [100.00%] 1369 objects have been dumped.
4. gs_dump[port='37300'][postgres][2018-06-27 10:02:53]: dump database postgres successfully
5. gs_dump[port='37300'][postgres][2018-06-27 10:02:53]: total time: 50086 ms
示例3:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.dmp文件格式为自定义归档格式。
1. gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup.dmp -p 37300 postgres -F c
2. gs_dump[port='37300'][postgres][2018-06-27 10:05:40]: The total objects number is 1369.
3. gs_dump[port='37300'][postgres][2018-06-27 10:06:03]: [100.00%] 1369 objects have been dumped.
4. gs_dump[port='37300'][postgres][2018-06-27 10:06:03]: dump database postgres successfully
5. gs_dump[port='37300'][postgres][2018-06-27 10:06:03]: total time: 36620 ms
示例4:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup文件格式为目录格式。
1. gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup -p 37300 postgres -F d
2. gs_dump[port='37300'][postgres][2018-06-27 10:16:04]: The total objects number is 1369.
3. gs_dump[port='37300'][postgres][2018-06-27 10:16:23]: [100.00%] 1369 objects have been dumped.
4. gs_dump[port='37300'][postgres][2018-06-27 10:16:23]: dump database postgres successfully
5. gs_dump[port='37300'][postgres][2018-06-27 10:16:23]: total time: 33977 ms
示例5:执行gs_dump,导出postgres数据库信息,但不导出/home/MPPDB_temp.sql中指定的表信息。导出的MPPDB_backup.sql文件格式为纯文本格式。
1. gs_dump -U omm -W Bigdata@123 -p 37300 postgres --exclude-table-file=/home/MPPDB_temp.sql -f backup/MPPDB_backup.sql
2. gs_dump[port='37300'][postgres][2018-06-27 10:37:01]: The total objects number is 1367.
3. gs_dump[port='37300'][postgres][2018-06-27 10:37:22]: [100.00%] 1367 objects have been dumped.
4. gs_dump[port='37300'][postgres][2018-06-27 10:37:22]: dump database postgres successfully
5. gs_dump[port='37300'][postgres][2018-06-27 10:37:22]: total time: 37017 ms
示例6:执行gs_dump,仅导出依赖于指定表testtable的视图信息。然后创建新的testtable表,再恢复依赖其上的视图。
- 备份仅依赖于testtable的视图。
1. gs_dump -s -p 37300 postgres -t PUBLIC.testtable --include-depend-objs --exclude-self -f backup/MPPDB_backup.sql -F p
2. gs_dump[port='37300'][postgres][2018-06-15 14:12:54]: The total objects number is 331.
3. gs_dump[port='37300'][postgres][2018-06-15 14:12:54]: [100.00%] 331 objects have been dumped.
4. gs_dump[port='37300'][postgres][2018-06-15 14:12:54]: dump database postgres successfully
5. gs_dump[port='37300'][postgres][2018-06-15 14:12:54]: total time: 327 ms
- 修改testtable名称。
1. gsql -p 37300 postgres -r -c "ALTER TABLE PUBLIC.testtable RENAME TO testtable_bak;"
- 创建新的testtable表。
1. CREATE TABLE PUBLIC.testtable(a int, b int, c int);
- 还原依赖于testtable的视图。
1. gsql -p 37300 postgres -r -f backup/MPPDB_backup.sql
gs_dumpall
背景信息
gs_dumpall是openGauss用于导出所有数据库相关信息工具,它可以导出openGauss数据库的所有数据,包括默认数据库postgres的数据、自定义数据库的数据以及openGauss所有数据库公共的全局对象。
gs_dumpall工具由操作系统用户omm执行。
gs_dumpall工具在进行数据导出时,其他用户可以访问openGauss数据库(读或写)。
gs_dumpall工具支持导出完整一致的数据。例如,T1时刻启动gs_dumpall导出openGauss数据库,那么导出数据结果将会是T1时刻该openGauss数据库的数据状态,T1时刻之后对openGauss的修改不会被导出。
gs_dumpall时生成列不会被转储。
gs_dumpall在导出openGauss所有数据库时分为两部分:
- gs_dumpall自身对所有数据库公共的全局对象进行导出,包括有关数据库用户和组、表空间以及属性(例如,适用于数据库整体的访问权限)信息。
- gs_dumpall通过调用gs_dump来完成openGauss中各数据库的SQL脚本文件导出,该脚本文件包含将数据库恢复为其保存时的状态所需要的全部SQL语句。
以上两部分导出的结果为纯文本格式的SQL脚本文件,使用gsql运行该脚本文件可以恢复openGauss数据库。
注意事项
- 禁止修改导出的文件和内容,否则可能无法恢复成功。
- 为了保证数据一致性和完整性,gs_dumpall会对需要转储的表设置共享锁。如果某张表在别的事务中设置了共享锁,gs_dumpall会等待此表的锁释放后锁定此表。如果无法在指定时间内锁定某张表,转储会失败。用户可以通过指定–lock-wait-timeout选项,自定义等待锁超时时间。
- 由于gs_dumpall读取所有数据库中的表,因此必须以openGauss管理员身份进行连接,才能导出完整文件。在使用gsql执行脚本文件导入时,同样需要管理员权限,以便添加用户和组以及创建数据库。
语法
1. gs_dumpall [OPTION]...
参数说明
通用参数:
- -f, –filename=FILENAME
将输出发送至指定文件。如果这里省略,则使用标准输出。 - -v, –verbose
指定verbose模式。该选项将导致gs_dumpall向转储文件输出详细的对象注解和启动/停止次数,向标准错误流输出处理信息。 - -V, –version
打印gs_dumpall版本,然后退出。 - –lock-wait-timeout=TIMEOUT
请勿在转储刚开始时一直等待以获取共享表锁。如果无法在指定时间内锁定某个表,就选择失败。可以以任何符合SET statement_timeout的格式指定超时时间。 - -?, –help
显示gs_dumpall命令行参数帮助,然后退出。
转储参数:
- -a, –data-only
只转储数据,不转储模式(数据定义)。 - -c, –clean
在重新创建数据库之前,执行SQL语句清理(删除)这些数据库。针对角色和表空间的转储命令已添加。 - -g, –globals-only
只转储全局对象(角色和表空间),无数据库。 - -o, –oids
转储每个表的对象标识符(OIDs),作为表的一部分数据。该选项用于应用以某种方式参照了OID列的情况。如果不是以上这种情况,请勿使用该选项。 - -O, –no-owner
不输出设置对象的归属这样的命令,以匹配原始数据库。默认情况下,gs_dumpall会发出ALTER OWNER或SET SESSION AUTHORIZATION语句设置所创建的模式元素的所属。如果脚本正在运行,该语句不会执行成功,除非是由系统管理员触发(或是拥有脚本中所有对象的同一个用户)。通过指定-O,编写一个任何用户都能存储的脚本,且该脚本会授予该用户拥有所有对象的权限。 - -r, –roles-only
只转储角色,不转储数据库或表空间。 - -s, –schema-only
只转储对象定义(模式),而非数据。 - -S, –sysadmin=NAME
该参数为扩展预留接口,不建议使用。。 - -t, –tablespaces-only
只转储表空间,不转储数据库或角色。 - -x, –no-privileges
防止转储访问权限(授权/撤销命令)。 - –column-inserts|–attribute-inserts
以INSERT命令带列名(INSERT INTO表(列、…)值…)方式导出数据。这会导致恢复缓慢。但是由于该选项会针对每行生成一个独立分开的命令,所以在重新加载某行时出现的错误只会导致那行丢失,而非整个
(本文超出站点单文档体积上限,已截断)
