本次测试针对openGauss版本为2.0.5
gs_dump database_name -U username -p port -F c -s -n schema_name -f schema.sql
database_name:数据库名,要备份的数据库名称
username:用户名,数据库用户
port:数据库端口号
schema_name:schema名称
schema.sql:生成的备份文件,也可以写为绝对路径/xxx/xxx/xxx.sql,文件后缀无具体要求,也可以用txt等可读取文件
-F c:尝试使用 -F c、-F d 或 -F t 来指定备份文件的归档格式。根据您的需求选择适当的格式,可能是定制格式 (c)、目录格式 (d) 或 TAR 格式 (t)
-s:只备份表结构
-n:需要备份的schema
-f:指定备份文件和路径
其他参数可以参考官方文档
gs_restore schema.sql -U username -p port -d database_name -C -c -s -n schema_name
-n schema_name:只导入已列举的模式中的对象。该选项可与-t选项一起用以导入某个指定的表。多次输入-n _schemaname_可以导入多个模式。经测试,当按照上述命令进行备份后,备份文件内含有create schema 语句,若不指定schema,此参数可以省略。
-C:—create
导入到数据库之前先创建数据库。(选择该选项后,-d指定的数据库将被用作发布首个CREATE DATABASE命令。所有数据将被导入到创建的数据库中。)
-c:—clean
在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象。
测试过程:
参数:
database_name:postgres
username:dbmon
port:26000
schema_name:test
schema.sql:test.sql
1.创建用户
CREATE USER username [WITH PASSWORD 'password'];
创建schema:create schema dbmon
2.用户赋权
GRANT privilege_name [, ...] ON object_name TO username [, ...];
其中,privilege_name 是要授予的权限名称,如 SELECT、INSERT、UPDATE 等;object_name 是要授权的对象名称,如表、视图等;username 是要授予权限的用户名。可以使用逗号分隔来指定多个权限、对象和用户
3.登录openGauss
gsql -d datatest -U dbmon -p 26000
4.创建schema
/**
如果需要切换数据库
\c
**/
create schema test;
5.准备数据
openGauss=> set search_path to test;
SET
openGauss=> create table test.a(id int,score int);
CREATE TABLE
openGauss=> create table test.b(id int,num int);
CREATE TABLE
openGauss=> insert into test.a values(1,20),(2,40),(3,50);
INSERT 0 3
openGauss=> insert into test.b values(1,1),(2,2),(3,3);
INSERT 0 3
;
6.开始备份
[omm@cmbcog25 opengauss30]$ gs_dump postgres -U dbmon -p 26000 -F c -s -n test -f test.sql
Password:
gs_dump[port='26000'][postgres][2023-10-10 14:11:24]: The total objects number is 402.
gs_dump[port='26000'][postgres][2023-10-10 14:11:25]: [100.00%] 402 objects have been dumped.
gs_dump[port='26000'][postgres][2023-10-10 14:11:25]: dump database postgres successfully
gs_dump[port='26000'][postgres][2023-10-10 14:11:25]: total time: 7166 ms
7.删除数据
openGauss=> drop schema ad cascade;
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table ad.a
drop cascades to table ad.b
DROP SCHEMA
/**也可以换一台没有数据openGauss进行恢复**/
8.恢复schema和表结构信息
[omm@cmbcog25 opengauss30]$ gs_restore test.sql -U dbmon -p 26000 -d postgres -C -c -s
Password:
start restore operation ...
Finish reading 5 SQL statements!
end restore operation ...
restore operation successful
total time: 2508 ms
9.检查表结构
/**检查schema**/
openGauss=> \dn
List of schemas
Name | Owner
-----------------+-----------
test | dbmon
(1 rows)
/**检查表**/
openGauss=> SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'test';
table_name
------------
a
b
(2 rows)
/**检查表结构**/
openGauss=> select column_name, data_type, character_maximum_length, is_nullable, column_default from information_schema.columns where table_schema='test' ;
column_name | data_type | character_maximum_length | is_nullable | column_default
-------------+-----------+--------------------------+-------------+----------------
num | integer | | YES |
id | integer | | YES |
score | integer | | YES |
id | integer | | YES |
(4 rows)
openGauss=> select column_name, data_type, character_maximum_length, is_nullable, column_default from information_schema.columns where table_schema='test' and table_name='a';
column_name | data_type | character_maximum_length | is_nullable | column_default
-------------+-----------+--------------------------+-------------+----------------
score | integer | | YES |
id | integer | | YES |
(2 rows)
表内无数据,备份恢复成功!