作者:李强
Email:[email protected]
版本:1.0 2020-08-10 初稿
【参考】https://opengauss.org/zh/docs/1.0.0/docs/Administratorguide/gs_basebackup.html
gs_basebackup仅支持数据库全量热备份,不支持增量和压缩备份。数据库需要处于开启状态,gs_basebackup会连接数据,读取各文件路径信息,然后开始文件二进制拷贝工作。
对于使用绝对路径创建的表空间,不能在同一台机器上进行备份,否则会出现路径冲突报错。若pg_xlog目录为软链接,备份时将不会建立软链接,会直接将数据备份到目的路径的pg_xlog目录下。若打开增量检测点功能且打开双写, gs_basebackup也会备份双写文件。
BACKUP_DIR=/opt/huawei/backup/`date '+%Y%m%d_%H%M%S'`
mkdir -p $BACKUP_DIR
gs_om -t status –detail
1.2.3 执行备份
gs_basebackup -D $BACKUP_DIR -p 26000 -P -l $BACKUP_DIR
gs_om -t status --detail
gs_om -t stop
mv /opt/huawei/install/data/db1 /opt/huawei/install/data/db1.old
cp -r /opt/huawei/backup/20200810_141813 /opt/huawei/install/data/db1
cd /opt/huawei/install/data/db1/pg_tblspc
ll
ln -snf /opt/huawei/install/data/db1/pg_location/sugon_ts 16389
gs_om -t start
编辑postgresql.conf文件,可修改数据库的端口号;
【参考】: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数据库的修改不会被导出。
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选项,自定义等待锁超时时间。
下面以sugon_db下的customer_t1表为例,说明gs_dump备份与恢复。
(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;
gs_dumpall是openGauss用于导出所有数据库相关信息工具,其内部是在调用gs_dump命令。
gs_dumpall导出的结果为纯文本格式的SQL脚本文件,即gs_dump -F p格式,使用gsql运行该脚本文件可以恢复openGauss数据库。
(1)备份
gs_dumpall -f gsdumpall.sql -p 26000
(2)恢复
--删除原数据库
postgres=# drop database sugon_db;
--利用gsql恢复数据库
gsql -p 26000 -f gsdumpall.sql postgres
--检查数据库
\l
gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可由gs_dump生成的导出文件进行导入。
gs_restore可以将dump文件导入到数据库(-d),也可以生成dump文件对应的sql建库脚本(-f),-f和-d不能一起使用。
gs_restore默认是以追加的方式进行数据导入。为避免多次导入造成数据异常,在进行导入时,建议使用”-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;
(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;
(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;
gs_backup工具可以备份和恢复openGauss数据库软件相关的二进制文件和参数文件,当数据库主机出现故障时,用于恢复openGauss软件环境。
gs_backup -t backup --backup-dir=gs_backup_`date '+%Y%m%d'` --all
(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备份的程序解包后,恢复到原位置。