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 |
一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。 |
中型或大型数据库,推荐自定义归档格式。 |
|
目录归档格式 |
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备份的程序解包后,恢复到原位置。