一、opengauss 的背景和行业现状
2022 年,七大 openGauss 商业版发布,是基于 openGauss3.0 推出商业发行版
目前海量数据库 Vastbase 表现最佳,一直是 TOP 1
作者认为之所以海量数据库 Vastbase 目前无法被同行超越,和各家研发实力和技术背景有关
众所周知,opengauss 起源于 postgresql,在此基础上做了改良
海量数据库从 postgresql 就已经开始做商业版,一直做到 opengauss,经验最丰富,其他产品例如 MongoDB 是紧随其后 (在此不讨论其存在的意义),目前产品百花齐放,更显锦上添花
Vastbase G100 采用业界证明稳定高效的日志流复制技术实现集群内主备库的数据和状态传输,
并通过一主多备的部署和配置架构实现了多点可读、数据不丢失、异地灾备等关键高可用场景。
二、初始化实验环境
2.1创建几个数据库和用户
openGauss=# create database momo24sw;
openGauss=# create database remo18sw;
openGauss=# create database momo488;
openGauss=# create user momo4le with password 'MoMo@488';
CREATE ROLE
openGauss=# grant all privileges to momo4le;
ALTER ROLE
2.2创建2个表
[omm@momo488 ~]$ gsql -d momo24sw -p 15400 -U momo4le;
Password for user momo4le:
gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:19 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
momo24sw=> create table t1 (x int,y int);
CREATE TABLE
momo24sw=> insert into t1 values (1,1);
INSERT 0 1
momo24sw=> select * from t1;
x | y
---+---
1 | 1
(1 row)
momo24sw=> create table t2 (x int,y int);
CREATE TABLE
[omm@momo488 ~]$ gsql -d remo18sw -p 15400 -U momo4le;
Password for user momo4le:
gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:19 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
remo18sw=> create table t2 (x int,y int);
CREATE TABLE
remo18sw=> insert into t2 values (2,2);
INSERT 0 1
remo18sw=> select * from t2;
x | y
---+---
2 | 2
(1 row)
三、适用场景
3.1逻辑备份与恢复适合于数据量小的场景。
3.2可以备份单表和多表,单database和所有database。
3.3备份后的数据需要使用gsql或者gs_restore工具恢复。
3.4数据量大时,恢复需要较长时间。
四、逻辑备份工具
4.1gs_dump
纯文本格式数据恢复时间长。
归档格式数据恢复时间中等。
gs_dump可以创建四种不同的导出文件格式,通过**[-F或者–format=]**选项指定。
4.2gs_dumpall
数据恢复时间长。
使用gs_dumpall一次导出openGauss的所有数据库
五、gs_dump实践
5.1示例1:执行gs_dump,导出momo24sw数据库全量信息,导出的MoMo488_sl1.sql文件格式为纯文本格式。
[omm@momo488 ~]$ gs_dump -U momo4le -W MoMo@488 -f MoMo488_sl1.sql -p 15400 momo24sw -F p
gs_dump[port='15400'][momo24sw][2023-04-12 09:20:41]: The total objects number is 412.
gs_dump[port='15400'][momo24sw][2023-04-12 09:20:41]: [100.00%] 412 objects have been dumped.
gs_dump[port='15400'][momo24sw][2023-04-12 09:20:41]: dump database momo24sw successfully
gs_dump[port='15400'][momo24sw][2023-04-12 09:20:41]: total time: 2015 ms
[omm@momo488 ~]$ ls
MoMo488_sl1.sql
5.2示例2:执行gs_dump,导出momo24sw数据库全量信息,导出的MoMo488_sl2.tar文件格式为tar格式。
[omm@momo488 ~]$ gs_dump -U momo4le -W MoMo@488 -f MoMo488_sl2.tar -p 15400 momo24sw -F t
gs_dump[port='15400'][momo24sw][2023-04-12 09:21:35]: The total objects number is 412.
gs_dump[port='15400'][momo24sw][2023-04-12 09:21:35]: [100.00%] 412 objects have been dumped.
gs_dump[port='15400'][momo24sw][2023-04-12 09:21:35]: dump database momo24sw successfully
gs_dump[port='15400'][momo24sw][2023-04-12 09:21:35]: total time: 1696 ms
[omm@momo488 ~]$ ll
total 20K
drwx------ 3 omm dbgroup 4.0K Apr 12 08:56 gaussdb_tmp
-rw------- 1 omm dbgroup 2.1K Apr 12 08:55 MoMo488_sl1.sql
-rw------- 1 omm dbgroup 11K Apr 12 09:05 MoMo488_sl2.tar
5.3示例3:执行gs_dump,导出momo24sw数据库全量信息,导出的MoMo488_sl3.dmp文件格式为自定义归档格式。
[omm@momo488 ~]$ gs_dump -U momo4le -W MoMo@488 -f MoMo488_sl3.dmp -p 15400 momo24sw -F c
gs_dump[port='15400'][momo24sw][2023-04-12 09:22:12]: The total objects number is 412.
gs_dump[port='15400'][momo24sw][2023-04-12 09:22:12]: [100.00%] 412 objects have been dumped.
gs_dump[port='15400'][momo24sw][2023-04-12 09:22:12]: dump database momo24sw successfully
gs_dump[port='15400'][momo24sw][2023-04-12 09:22:12]: total time: 1677 ms
[omm@momo488 ~]$ ls
gaussdb_tmp MoMo488_sl1.sql MoMo488_sl2.tar MoMo488_sl3.dmp
5.4示例4:执行gs_dump,导出momo24sw数据库全量信息,导出的MoMo488_sl4文件格式为目录格式。
[omm@momo488 ~]$ gs_dump -U momo4le -W MoMo@488 -f MoMo488_sl4 -p 15400 momo24sw -F d
gs_dump[port='15400'][momo24sw][2023-04-12 09:23:27]: The total objects number is 412.
gs_dump[port='15400'][momo24sw][2023-04-12 09:23:27]: [100.00%] 412 objects have been dumped.
gs_dump[port='15400'][momo24sw][2023-04-12 09:23:27]: dump database momo24sw successfully
gs_dump[port='15400'][momo24sw][2023-04-12 09:23:27]: total time: 1697 ms
[omm@momo488 ~]$ ls -l
total 28
drwx------ 3 omm dbgroup 4096 Apr 12 09:21 gaussdb_tmp
-rw------- 1 omm dbgroup 1225 Apr 12 09:20 MoMo488_sl1.sql
-rw------- 1 omm dbgroup 8704 Apr 12 09:21 MoMo488_sl2.tar
-rw------- 1 omm dbgroup 2144 Apr 12 09:22 MoMo488_sl3.dmp
drwx------ 2 omm dbgroup 4096 Apr 12 09:23 MoMo488_sl4
5.5示例5:执行gs_dump,导出momo24sw数据库信息,但不导出/home/omm/MoMo_temp_sl5.sql中指定的表信息。导出的MoMo488_sl5.sql文件格式为纯文本格式。
[omm@momo488 ~]$ cat /home/omm/MoMo_temp_sl5.sql
t2
[omm@momo488 ~]$ gs_dump -U momo4le -W MoMo@488 -p 15400 momo24sw --exclude-table-file=/home/omm/MoMo_temp_sl5.sql -f MoMo488_sl5.sql
gs_dump[port='15400'][momo24sw][2023-04-12 09:24:36]: The total objects number is 410.
gs_dump[port='15400'][momo24sw][2023-04-12 09:24:36]: [100.00%] 410 objects have been dumped.
gs_dump[port='15400'][momo24sw][2023-04-12 09:24:36]: dump database momo24sw successfully
gs_dump[port='15400'][momo24sw][2023-04-12 09:24:36]: total time: 2005 ms
5.6示例6:执行gs_dump,仅导出依赖于指定表t1的视图信息。然后创建新的t1表,再恢复依赖其上的视图。
[omm@momo488 ~]$ gs_dump -U momo4le -W MoMo@488 -s -p 15400 momo24sw -t PUBLIC.t1 --include-depend-objs --exclude-self -f MoMo488_sl6.sql -F p
gs_dump[port='15400'][momo24sw][2023-04-12 09:28:41]: The total objects number is 399.
gs_dump[port='15400'][momo24sw][2023-04-12 09:28:41]: [100.00%] 399 objects have been dumped.
gs_dump[port='15400'][momo24sw][2023-04-12 09:28:41]: dump database momo24sw successfully
gs_dump[port='15400'][momo24sw][2023-04-12 09:28:41]: total time: 1647 ms
[omm@momo488 ~]$ ls
gaussdb_tmp MoMo488_sl1.sql MoMo488_sl2.tar MoMo488_sl3.dmp MoMo488_sl4 MoMo488_sl5.sql MoMo488_sl6.sql MoMo_temp_sl5.sql
六、gs_dumpall实践
数据恢复时间长。
使用gs_dumpall一次导出openGauss的所有数据库
[omm@momo488 ~]$ gs_dumpall -U momo4le -W MoMo@488 -f momo4all.sql -p 15400
gs_dump[port='15400'][dbname='momo24sw'][2023-04-12 09:31:27]: The total objects number is 412.
gs_dump[port='15400'][dbname='momo24sw'][2023-04-12 09:31:27]: [100.00%] 412 objects have been dumped.
gs_dump[port='15400'][dbname='momo24sw'][2023-04-12 09:31:27]: dump database dbname='momo24sw' successfully
gs_dump[port='15400'][dbname='momo24sw'][2023-04-12 09:31:27]: total time: 1738 ms
gs_dump[port='15400'][dbname='momo488'][2023-04-12 09:31:29]: The total objects number is 408.
gs_dump[port='15400'][dbname='momo488'][2023-04-12 09:31:29]: [100.00%] 408 objects have been dumped.
gs_dump[port='15400'][dbname='momo488'][2023-04-12 09:31:29]: dump database dbname='momo488' successfully
gs_dump[port='15400'][dbname='momo488'][2023-04-12 09:31:29]: total time: 1784 ms
gs_dump[port='15400'][dbname='postgres'][2023-04-12 09:31:31]: The total objects number is 418.
gs_dump[port='15400'][dbname='postgres'][2023-04-12 09:31:31]: [100.00%] 418 objects have been dumped.
gs_dump[port='15400'][dbname='postgres'][2023-04-12 09:31:31]: dump database dbname='postgres' successfully
gs_dump[port='15400'][dbname='postgres'][2023-04-12 09:31:31]: total time: 2174 ms
gs_dump[port='15400'][dbname='remo18sw'][2023-04-12 09:31:34]: The total objects number is 410.
gs_dump[port='15400'][dbname='remo18sw'][2023-04-12 09:31:34]: [100.00%] 410 objects have been dumped.
gs_dump[port='15400'][dbname='remo18sw'][2023-04-12 09:31:34]: dump database dbname='remo18sw' successfully
gs_dump[port='15400'][dbname='remo18sw'][2023-04-12 09:31:34]: total time: 2080 ms
gs_dumpall[port='15400'][2023-04-12 09:31:34]: dumpall operation successful
gs_dumpall[port='15400'][2023-04-12 09:31:34]: total time: 8062 ms
[omm@momo488 ~]$ ls
gaussdb_tmp MoMo488_sl1.sql MoMo488_sl2.tar MoMo488_sl3.dmp MoMo488_sl4 MoMo488_sl5.sql MoMo488_sl6.sql momo4all.sql MoMo_temp_sl5.sql
七、逻辑恢复工具
gs_restore
7.1gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可由gs_dump生成的导出文件进行导入。
7.2gs_restore工具由操作系统用户omm执行。
7.3主要功能包含:
7.3.1导入到数据库
如果连接参数中指定了数据库,则数据将被导入到指定的数据库中。其中,并行导入必须指定连接的密码。导入时生成列会自动更新,并像普通列一样保存。
7.3.2导入到脚本文件
如果未指定导入数据库,则创建包含重建数据库所必须的SQL语句脚本并写入到文件或者标准输出。等效于直接使用gs_dump导出为纯文本格式。
八、gs_restore实践
8.1示例1:执行gs_restore,将导出的MoMo488_sl3.dmp文件(自定义归档格式)导入到momo24sw数据库。
openGauss=> drop database momo24sw;
DROP DATABASE
openGauss=> create database momo24sw;
CREATE DATABASE
[omm@momo488 ~]$ gs_restore -U momo4le -W MoMo@488 MoMo488_sl3.dmp -p 15400 -d momo24sw
start restore operation ...
table t1 complete data imported !
table t2 complete data imported !
Finish reading 10 SQL statements!
end restore operation ...
restore operation successful
total time: 105 ms
8.2示例2:执行gs_restore,将导出的MoMo488_sl2.tar文件(tar格式)导入到momo24sw数据库。
openGauss=> drop database momo24sw;
DROP DATABASE
openGauss=> create database momo24sw;
CREATE DATABASE
[omm@momo488 ~]$ gs_restore -U momo4le MoMo488_sl2.tar -p 15400 -d momo24sw
8.3示例3:执行gs_restore,将导出的MoMo488_sl4文件(目录格式)导入到momo24sw数据库。
openGauss=> drop database momo24sw;
DROP DATABASE
openGauss=> create database momo24sw;
CREATE DATABASE
[omm@momo488 ~]$ gs_restore -U momo4le MoMo488_sl4 -p 15400 -d momo24sw
8.4示例4-1:执行gs_restore,使用自定义归档格式的MoMo488_sl3.dmp文件来进行如下导入操作。只导入PUBLIC模式下表t1的定义。
[omm@momo488 ~]$ gs_restore -U momo4le -W MoMo@488 MoMo488_sl3.dmp -p 15400 -d momo24sw -e -c -s -n public -t t1
start restore operation ...
Finish reading 10 SQL statements!
end restore operation ...
restore operation successful
total time: 31 ms
momo24sw=> \dt
List of relations
Schema | Name | Type | Owner | Storage
--------+------+-------+---------+----------------------------------
public | t1 | table | momo4le | {orientation=row,compression=no}
(1 row)
momo24sw=> select * from t1;
x | y
---+---
(0 rows)
8.5示例4-2:执行gs_restore,使用自定义归档格式的MoMo488_sl3.dmp文件来进行如下导入操作。只导入PUBLIC模式下表t1的数据。
[omm@momo488 ~]$ gs_restore -U momo4le -W MoMo@488 MoMo488_sl3.dmp -p 15400 -d momo24sw -e -a -n public -t t1
start restore operation ...
table t1 complete data imported !
Finish reading 10 SQL statements!
end restore operation ...
restore operation successful
total time: 22 ms
momo24sw=> select * from t1;
x | y
---+---
1 | 1
(1 row)
本文参考官方文档
https://docs.opengauss.org/zh/
https://docs.vastdata.com.cn/zh/