openGauss数据库备份与恢复

时间:2024-02-25 12:03:55

1. 物理备份与恢复:gs_basebackup

【参考】https://opengauss.org/zh/docs/1.0.0/docs/Administratorguide/gs_basebackup.html

       gs_basebackup仅支持数据库全量热备份,不支持增量和压缩备份。数据库需要处于开启状态,gs_basebackup会连接数据,读取各文件路径信息,然后开始文件二进制拷贝工作。

      对于使用绝对路径创建的表空间,不能在同一台机器上进行备份,否则会出现路径冲突报错。若pg_xlog目录为软链接,备份时将不会建立软链接,会直接将数据备份到目的路径的pg_xlog目录下。若打开增量检测点功能且打开双写, gs_basebackup也会备份双写文件。

1.1 命令帮助

  • -D directory,必选项,指定备份文件输出的目录;
  • -c,–checkpoint=fast|spread,设置检查点模式为fast或者spread(默认);
  • -l,–label=LABEL,为备份设置标签;
  • -P,–progress,启用进展报告;

1.2 执行备份

1.2.1 创建备份目录

BACKUP_DIR=/opt/huawei/backup/`date \'+%Y%m%d_%H%M%S\'`

mkdir -p $BACKUP_DIR

1.2.2 检查数据库状态,确认IP和端口号

gs_om -t status –detail

1.2.3 执行备份

gs_basebackup -D $BACKUP_DIR -p 26000 -P -l $BACKUP_DIR

1.3 执行恢复

1.3.1 检查数据库状态

gs_om -t status --detail

1.3.2 关闭数据库

gs_om -t stop

1.3.3 原数据库目录改名

mv /opt/huawei/install/data/db1  /opt/huawei/install/data/db1.old

1.3.4 用备份文件覆盖原数据库目录

cp -r /opt/huawei/backup/20200810_141813 /opt/huawei/install/data/db1

1.3.5 修改软链接,指向新的表空间路径

cd /opt/huawei/install/data/db1/pg_tblspc

ll

ln -snf /opt/huawei/install/data/db1/pg_location/sugon_ts 16389

1.3.6 重启启动数据库

gs_om -t start

1.3.7 其他

    编辑postgresql.conf文件,可修改数据库的端口号;

 

2. 逻辑备份:gs_dump

【参考】:https://opengauss.org/zh/docs/1.0.0/docs/Administratorguide/gs_dump.html

       gs_dump是openGauss用于导出数据库相关信息的工具,用户可以自定义导出一个数据库或是其中的对象(模式、表、视图等)。gs_dump工具在进行数据导出时,其他用户可以访问openGauss数据库(读或写)。

       gs_dump工具支持导出完整一致的数据。例如,T1时刻启动gs_dump导出A数据库,那么导出数据结果将会是T1时刻A数据库的数据状态,T1时刻之后对A数据库的修改不会被导出。

2.1 导出文件格式

       gs_dump可以创建四种不同的导出文件格式,通过[-F或者–format=]选项指定。

格式名称

-F的参数值

说明

建议

对应导入工具

纯文本格式

p

纯文本脚本文件包含SQL语句和命令。命令可以由gsql命令行终端程序执行,用于重新创建数据库对象并加载表数据。

小型数据库,一般推荐纯文本格式。

使用gsql工具恢复数据库对象前,可根据需要使用文本编辑器编辑纯文本导出文件。

自定义归档格式

c

一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。

中型或大型数据库,推荐自定义归档格式。

使用gs_restore可以选择要从自定义归档导出文件中导入相应的数据库对象。

目录归档格式

d

该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和blob对象对应的数据文件。

-

tar归档格式

t

tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单独表大小应小于8GB。

-

       为了保证数据一致性和完整性,gs_dump会对需要转储的表设置共享锁。如果表在别的事务中设置了共享锁,gs_dump会等待锁释放后锁定表。如果无法在指定时间内锁定某个表,转储会失败。用户可以通过指定–lock-wait-timeout选项,自定义等待锁超时时间。

2.2 gs_dump命令

  • -f, --file=FILENAME,导出文件名;
  • -F, --format=c|d|t|p,导出文件的格式,默认为p,机SQL文本;
  • -n, --schema=SCHEMA,只导出某些schema下的对象;
  • -N, --exclude-schema=SCHEMA,不要导出某些schema下的对象;
  • -t, --table=TABLE,指定要导出的表,可以使用通配符;
  • -T, --exclude-table=TABLE,不要导出的表,也可以使用通配符;

    下面以sugon_db下的customer_t1表为例,说明gs_dump备份与恢复。

2.3 -F p,导出与恢复

(1) 导出

gs_dump -f gsdump_f.sql -p 26000 sugon_db -t customer_t1

(2) 恢复

--删除原表

sugon_db=# drop table customer_t1 cascade;

--利用gsql导入数据

gsql -d sugon_db -p 26000 -f gsdump_f.sql

--检查数据

\d

select count(*) from customer_t1;

 

3. 逻辑备份与恢复:gs_dumpall/gsql

        gs_dumpall是openGauss用于导出所有数据库相关信息工具,其内部是在调用gs_dump命令。

        gs_dumpall导出的结果为纯文本格式的SQL脚本文件,即gs_dump -F p格式,使用gsql运行该脚本文件可以恢复openGauss数据库。

3.1 gs_dumpall命令

  • -f, –filename=FILENAME,将输出发送至指定文件;
  • -c, –clean,在重新创建数据库之前,执行SQL语句清理(删除)这些数据库;
  • -a, –data-only,只转储数据,不转储模式(数据定义);
  • -s, –schema-only,只转储对象定义(模式),而非数据。

3.2 备份与恢复

(1)备份

gs_dumpall -f gsdumpall.sql -p 26000

(2)恢复

--删除原数据库

postgres=# drop database sugon_db;

--利用gsql恢复数据库

gsql -p 26000 -f gsdumpall.sql postgres

--检查数据库

\l

 

4. 逻辑恢复:gs_restore

        gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可由gs_dump生成的导出文件进行导入。

        gs_restore可以将dump文件导入到数据库(-d),也可以生成dump文件对应的sql建库脚本(-f),-f和-d不能一起使用。

        gs_restore默认是以追加的方式进行数据导入。为避免多次导入造成数据异常,在进行导入时,建议使用”-c” 参数,在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象。

4.1 gs_restore命令

  • -d, –dbname=NAME,连接数据库dbname并直接导入到该数据库中;
  • -f, –file=FILENAME,指定生成脚本的输出文件;
  • -a, -data-only,只导入数据,不导入模式(数据定义);
  • -c, –clean,在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象。
  • -C, –create,导入到数据库之前先创建数据库;
  • -n, –schema=NAME,只导入已列举的模式中的对象;
  • -t, –table=NAME,只导入已列举的表定义、数据或定义和数据;

4.2 -F c,导出与恢复

(1) 导出

gs_dump -f gsdump_c.dmp -p 26000 sugon_db -t customer_t1 -F c

(2) 恢复

--删除原表

sugon_db=# drop table customer_t1 cascade;

--利用gs_restore导入数据

gs_restore -d sugon_db -p 26000 -t customer_t1 gsdump_c.dmp

--检查数据

\d

select count(*) from customer_t1;

 

4.3 -F d,导出与恢复

(1)导出

gs_dump -f gsdump_d -p 26000 sugon_db -t customer_t1 -F d

(2) 恢复

--删除原表

sugon_db=# drop table customer_t1 cascade;

--利用gs_restore导入数据

gs_restore -d sugon_db -p 26000 -t customer_t1 gsdump_d

--检查数据

\d

select count(*) from customer_t1;

 

4.4 -F t,导出与恢复

(1) 导出

gs_dump -f gsdump_t.tar -p 26000 sugon_db -t customer_t1 -F t

(2) 恢复

--删除原表

sugon_db=# drop table customer_t1 cascade;

--利用gs_restore导入数据

gs_restore -d sugon_db -p 26000 -t customer_t1 gsdump_t.tar

--检查数据

\d

select count(*) from customer_t1;

 

 

5. 数据库主机备份与恢复:gs_backup

        gs_backup工具可以备份和恢复openGauss数据库软件相关的二进制文件和参数文件,当数据库主机出现故障时,用于恢复openGauss软件环境。

5.1 gs_backup命令

  • -t,backup | restore,指定操作类型,备份还是恢复;
  • -h,指定存储备份文件的主机名;
  • -backup-dir=BACKUPDIR,备份文件保存路径;
  • -all,备份二进制和参数文件;
  • -parameter,备份参数文件;
  • -binary,备份二进制文件;
  • -l,指定日志文件路径;

5.2 gs_backup软件备份

gs_backup -t backup --backup-dir=gs_backup_`date \'+%Y%m%d\'` --all

 

5.3 gs_backup软件恢复

(1) 破坏部分数据库程序

rm `which gsql`

rm /opt/huawei/install/data/db1/{pg_hba.conf,postgresql.conf}

(2)恢复程序

gs_backup -t restore --backup-dir=gs_backup_20200811 --all

(3) 全部破坏

当/opt/huawei/install/app下的文件完全丢失时,可将gs_backup备份的程序解包后,恢复到原位置。