暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openguass 导入导出学习

是赐赐啊!🦄 2024-10-30
197

openguass 导入导出

一、表级COPY命令

1.1功能描述

通过COPY命令实现在表和文件之间拷贝数据。

COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据拷贝到一个文件。

该命令导出方式,兼容各种数据库。

1.2操作示例

1.2.1、导出

将sbtest1表中的数据拷贝到/home/omm/dir_dw文件中。

先创建目录

[omm@eb62246 ~]$ mkdir -p /home/omm/dir_dw

1.2.1.1、通过超级用户omm执行copy导出

[omm@eb62246 ~]$ gsql -p 15400 -W 1cmszx#YZSSY -r -U omm -d yxfdb
gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:37:13 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

yxfdb=# select * from sbtest1 ;
id | k | c |
pad
----+---+--------------------------------------------------------------------------------------------------------------------------+----------
----------------------------------------------------
1 | 2 | 31451373586-15688153734-79729593694-96509299839-83724898275-86711833539-78981337422-35049690573-51724173961-87474696253 | 989966216
24-36689827414-04092488557-09587706818-65008859162
2 | 2 | 21472970079-70972780322-70018558993-71769650003-09270326047-32417012031-10768856803-14235120402-93989080412-18690312264 | 047768266
83-45880822084-77922711547-29057964468-76514263618
3 | 2 | 49376827441-24903985029-56844662308-79012577859-40518387141-60588419212-24399130405-42612257832-29494881732-71506024440 | 268430358
07-96849339132-53943793991-69741192222-48634174017
4 | 1 | 85762858421-36258200885-10758669419-44272723583-12529521893-95630803635-53907705724-07005352902-43001596772-53048338959 | 379794242
84-37912826784-31868864947-42903702727-96097885121
5 | 1 | 39629182538-02480546617-58524552861-79463588264-94630521692-52863783258-10322448958-16888371172-79549156168-39196968147 | 212022277
77-41928895955-25555646807-61419229042-65545767251
(5 rows)

yxfdb=# COPY sbtest1 TO '/home/omm/dir_dw/sbtest1.dat' using delimiters '|';
COPY 5

##XXX.dat文件后缀可以自命名,如dat、unl等

1.2.1.2、采用普通用户执行copy导出时

[omm@eb62246 ~]$ gsql -p 15400 -W 1cmszx#YZSSY -r -U yxf -d yxfdb
gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:37:13 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

yxfdb=> select * from sbtest2 ;
id | k | c |
pad
----+---+--------------------------------------------------------------------------------------------------------------------------+----------
----------------------------------------------------
1 | 5 | 43033802100-77764610845-39799112869-39522082157-29991343351-03104546403-44218055411-44753886367-06713013651-11339959167 | 959800757
36-25797396575-06969310132-10655251718-72185519249
2 | 5 | 76306723138-65475533272-75387439533-24814990765-46240013424-33025575802-49383130113-39076862901-68733582344-28627130698 | 967302613
34-40420286195-59727642680-29068251337-21208591100
3 | 1 | 95511505952-67827527851-32245183764-01321888676-12935581940-38116431620-03035069779-75393323033-78637090354-02871993622 | 607876756
34-88696102862-47382723687-55751123510-43680810947
4 | 3 | 29809736103-16529959810-65200056077-19343258676-06720943729-58794656758-41876592996-88989304768-22811351512-24357747909 | 794271262
68-47716046154-81221957414-39631154222-60675776555
5 | 2 | 45113989335-46151443595-40835740688-44993769723-02062225671-30269019391-54797492502-98917542019-19046584053-40538811195 | 341188493
35-49886505072-43443607778-30350124188-52030134488
(5 rows)

yxfdb=> COPY sbtest2 TO '/home/omm/dir_dw/sbtest2.dat' using delimiters '|';
ERROR: COPY to or from a file is prohibited for security concerns
HINT: Anyone can COPY to stdout or from stdin. gsql's \copy command also works for anyone.

上述采用普通用户yxf执行时,报安全错误。

查看enable_copy_server_files 是off。

yxfdb=> show enable_copy_server_files;
enable_copy_server_files
--------------------------
off
(1 row)

openGauss=# alter system set enable_copy_server_files=on;
ALTER SYSTEM SET

需采用超级用户omm来更改参数配置,降低安全管控。

[omm@eb62246 ~]$ gsql -d yxfdb -U omm -p 15400
gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:37:13 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

yxfdb=# show enable_copy_server_files;
enable_copy_server_files
--------------------------
off
(1 row)

yxfdb=# alter system set enable_copy_server_files=on;
ALTER SYSTEM SET
yxfdb=# show enable_copy_server_files;
enable_copy_server_files
--------------------------
on
(1 row)

再次通过yxf用户接入yxfdb,查看enable_copy_server_files为on,执行copy命令正常。

yxfdb=> show enable_copy_server_files;
enable_copy_server_files
--------------------------
on
(1 row)

yxfdb=> COPY sbtest2 TO '/home/omm/dir_dw/sbtest2.dat' using delimiters '|';
COPY 5

查看导出文件

[omm@eb62246 dir_dw]$ cat sbtest1.dat
1|2|31451373586-15688153734-79729593694-96509299839-83724898275-86711833539-78981337422-35049690573-51724173961-87474696253 |98996621624-36689827414-04092488557-09587706818-65008859162
2|2|21472970079-70972780322-70018558993-71769650003-09270326047-32417012031-10768856803-14235120402-93989080412-18690312264 |04776826683-45880822084-77922711547-29057964468-76514263618
3|2|49376827441-24903985029-56844662308-79012577859-40518387141-60588419212-24399130405-42612257832-29494881732-71506024440 |26843035807-96849339132-53943793991-69741192222-48634174017
4|1|85762858421-36258200885-10758669419-44272723583-12529521893-95630803635-53907705724-07005352902-43001596772-53048338959 |37979424284-37912826784-31868864947-42903702727-96097885121
5|1|39629182538-02480546617-58524552861-79463588264-94630521692-52863783258-10322448958-16888371172-79549156168-39196968147 |21202227777-41928895955-25555646807-61419229042-65545767251

备注:

当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行,但默认禁止对数据库配置文件、密钥文件、证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。

1.2.2、导入

从/home/omm/dir_dw/sbtest1.dat文件拷贝数据到表sbtest1-new。

ps,此处注意建表语句(like sbtest1),需要括号。

yxfdb=# create table sbtest1new (like sbtest1);
NOTICE: CREATE TABLE will create implicit sequence "sbtest1new_id_seq" for serial column "sbtest1new.id"
CREATE TABLE
yxfdb=# select * from sbtest1new;
id | k | c | pad
----+---+---+-----
(0 rows)

yxfdb=# COPY sbtest1new FROM '/home/omm/dir_dw/sbtest1.dat' using delimiters '|';
COPY 5
yxfdb=# select * from sbtest1new;
id | k | c |
pad
----+---+--------------------------------------------------------------------------------------------------------------------------+----------
----------------------------------------------------
1 | 2 | 31451373586-15688153734-79729593694-96509299839-83724898275-86711833539-78981337422-35049690573-51724173961-87474696253 | 989966216
24-36689827414-04092488557-09587706818-65008859162
2 | 2 | 21472970079-70972780322-70018558993-71769650003-09270326047-32417012031-10768856803-14235120402-93989080412-18690312264 | 047768266
83-45880822084-77922711547-29057964468-76514263618
3 | 2 | 49376827441-24903985029-56844662308-79012577859-40518387141-60588419212-24399130405-42612257832-29494881732-71506024440 | 268430358
07-96849339132-53943793991-69741192222-48634174017
4 | 1 | 85762858421-36258200885-10758669419-44272723583-12529521893-95630803635-53907705724-07005352902-43001596772-53048338959 | 379794242
84-37912826784-31868864947-42903702727-96097885121
5 | 1 | 39629182538-02480546617-58524552861-79463588264-94630521692-52863783258-10322448958-16888371172-79549156168-39196968147 | 212022277
77-41928895955-25555646807-61419229042-65545767251
(5 rows)

1.2.3、附加测试:

根据sbtest2.dat数据文件,修改为t1.dat,修改内容在每行尾部加|

[omm@eb62246 dir_dw]$ sed "s/$/&|/g" sbtest2.dat >sbtest2.unl
[omm@eb62246 dir_dw]$ cat sbtest2.unl
1|5|43033802100-77764610845-39799112869-39522082157-29991343351-03104546403-44218055411-44753886367-06713013651-11339959167 |95980075736-25797396575-06969310132-10655251718-72185519249 |
2|5|76306723138-65475533272-75387439533-24814990765-46240013424-33025575802-49383130113-39076862901-68733582344-28627130698 |96730261334-40420286195-59727642680-29068251337-21208591100 |
3|1|95511505952-67827527851-32245183764-01321888676-12935581940-38116431620-03035069779-75393323033-78637090354-02871993622 |60787675634-88696102862-47382723687-55751123510-43680810947 |
4|3|29809736103-16529959810-65200056077-19343258676-06720943729-58794656758-41876592996-88989304768-22811351512-24357747909 |79427126268-47716046154-81221957414-39631154222-60675776555 |
5|2|45113989335-46151443595-40835740688-44993769723-02062225671-30269019391-54797492502-98917542019-19046584053-40538811195 |34118849335-49886505072-43443607778-30350124188-52030134488 |
[omm@eb62246 dir_dw]$

执行下面的COPY FROM命令报错ERROR: extra data after last expected column,数据文件比表结构多字段

yxfdb=# create table sbtest2new (like sbtest2);
NOTICE: CREATE TABLE will create implicit sequence "sbtest2new_id_seq" for serial column "sbtest2new.id"
CREATE TABLE
yxfdb=# COPY sbtest2new FROM '/home/omm/dir_dw/sbtest2.unl' using delimiters '|';
ERROR: extra data after last expected column
CONTEXT: COPY sbtest2new, line 1: "1|5|43033802100-77764610845-39799112869-39522082157-29991343351-03104546403-44218055411-44753886367-06713013651-11339959167 |95980075736-25797396575-06969310132-10655251718-72185519249 |"

小结,informix和mysql导出的以"|"分割的数据,需要去掉最后一列的"|",进行导入。

1.3、注意事项

  • 当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行,但默认禁止对数据库配置文件、密钥文件、证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。
  • COPY只能用于表,不能用于视图。
  • COPY TO需要读取的表的select权限,copy from需要插入的表的insert权限。
  • 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。
  • 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(.)表示输入结束。
  • 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。
  • 数据的结束可以用一个只包含反斜杠和句点(.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。
  • COPY FROM中\N为空字符串,如果要输入实际数据值\N ,使用\N。
  • COPY FROM不支持在导入过程中对数据做预处理(比如说表达式运算、填充指定默认值等)。如果需要在导入过程中对数据做预处理,用户需先把数据导入到临时表中,然后执行SQL语句通过运算插入到表中,但此方法会导致I/O膨胀,降低导入性能。
  • COPY FROM在遇到数据格式错误时会回滚事务,但没有足够的错误信息,不方便用户从大量的原始数据中定位错误数据。
  • COPY FROM/TO适合低并发,本地小数据量导入导出。
  • 目标表存在trigger,支持COPY操作。
  • COPY命令中,生成列不能出现在指定列的列表中。使用COPY… TO导出数据时,如果没有指定列的列表,则该表的所有列除了生成列都会被导出。COPY… FROM导入数据时,生成列会自动更新,并像普通列一样保存。

详细说明:

https://docs.opengauss.org/zh/docs/5.0.0/docs/SQLReference/COPY.html

二、gs_dump库级导出

2.1、功能描述

gs_dump是openGauss用于导出单个数据库相关信息的工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等),回收站对象除外。支持导出的数据库可以是默认数据库postgres,也可以是自定义数据库。

类似mysql数据库的mysqldump命令。

2.2、操作示例

2.2.1、导出sfdb数据库全量信息,三种导出文件格式如下。

2.2.1.1导出文件格式为sql文本格式。该格式可更改,gsql可以调用执行。

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb.sql -p 15400 yxfdb -F p -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-02 15:08:29]: The total objects number is 492.
gs_dump[port='15400'][yxfdb][2023-08-02 15:08:29]: [100.00%] 492 objects have been dumped.
gs_dump[port='15400'][yxfdb][2023-08-02 15:08:29]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-02 15:08:29]: total time: 2352 ms

-rw------- 1 omm dbgrp 15744 Aug 2 15:08 yxfdb.sql

2.2.1.2导出文件格式为自定义归档模式。无法更改文件,压缩比高,gs_restore可采用导入

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb.dmp -p 15400 yxfdb -F c -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-02 15:10:02]: The total objects number is 492.
gs_dump[port='15400'][yxfdb][2023-08-02 15:10:02]: [100.00%] 492 objects have been dumped.
gs_dump[port='15400'][yxfdb][2023-08-02 15:10:02]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-02 15:10:02]: total time: 2398 ms

-rw------- 1 omm dbgrp 17166 Aug 2 15:10 yxfdb.dmp

2.2.1.3导出文件格式为tar归档模式。

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb.tar -p 15400 yxfdb -F t -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-02 15:10:52]: The total objects number is 492.
gs_dump[port='15400'][yxfdb][2023-08-02 15:10:52]: [100.00%] 492 objects have been dumped.
gs_dump[port='15400'][yxfdb][2023-08-02 15:10:52]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-02 15:10:52]: total time: 2353 ms

-rw------- 1 omm dbgrp 38912 Aug 2 15:10 yxfdb.tar
tar归档格式不支持压缩且对于单独表大小应小于8GB。

总结:数据库备份,建议采用自定义归档模式,压缩比高。

2.2.2、导出定义信息,建议采用文本格式,可更改,gsql可调用执行。

2.2.2.1导出特定数据库所有对象的定义信息,导出文件格式为sql文本格式。

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_create.sql -p 15400 yxfdb -s -F p -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-02 15:12:07]: The total objects number is 478.
gs_dump[port='15400'][yxfdb][2023-08-02 15:12:07]: [100.00%] 478 objects have been dumped.
gs_dump[port='15400'][yxfdb][2023-08-02 15:12:07]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-02 15:12:07]: total time: 2317 ms

-rw------- 1 omm dbgrp 8318 Aug 2 15:12 yxfdb_create.sql

2.2.2.2 导出特定表定义信息,导出格式为sql文本格式。

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_sbtest_create.sql -p 15400 yxfdb -t sbtest1 -t sbtest2 -s -F p -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-02 15:12:56]: The total objects number is 437.
gs_dump[port='15400'][yxfdb][2023-08-02 15:12:56]: [100.00%] 437 objects have been dumped.
gs_dump[port='15400'][yxfdb][2023-08-02 15:12:56]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-02 15:12:56]: total time: 2255 ms

-rw------- 1 omm dbgrp 2786 Aug 2 15:12 yxfdb_sbtest_create.sql

2.2.2.3导出所有表定义信息,导出格式为自定义归档或tar归档

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_create.dmp -p 15400 yxfdb -t -s -F c -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-03 10:10:50]: The total objects number is 478.
gs_dump[port='15400'][yxfdb][2023-08-03 10:10:50]: [100.00%] 478 objects have been dumped.
gs_dump[port='15400'][yxfdb][2023-08-03 10:10:50]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-03 10:10:50]: total time: 2359 ms

-rw------- 1 omm dbgrp 11497 Aug 3 10:10 yxfdb_create.dmp

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_create.tar -p 15400 yxfdb -s -F t -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-03 10:11:38]: The total objects number is 478.
gs_dump[port='15400'][yxfdb][2023-08-03 10:11:38]: [100.00%] 478 objects have been dumped.
gs_dump[port='15400'][yxfdb][2023-08-03 10:11:38]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-03 10:11:38]: total time: 2352 ms

-rw------- 1 omm dbgrp 24064 Aug 3 10:11 yxfdb_create.tar

2.2.2.4导出指定表定义信息,导出格式为自定义归档或tar归档

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_create.dmp -p 15400 yxfdb -t sbtest1 -t sbtest2 -s -F c -W 1cmszx#YZSSY

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_create.tar -p 15400 yxfdb -t sbtest1 -t sbtest2 -s -F t -W 1cmszx#YZSSY

2.2.3、仅导出数据,导出文件格式建议选择自定义归档格式。

2.2.3.1导出yxfdb数据库的sbtest1、sbtest2表全量信息,导出格式为文本格式。

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_sbtest_data.sql -p 15400 yxfdb -t sbtest1 -t sbtest2 -a -F p -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-02 15:14:01]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-02 15:14:01]: total time: 2352 ms

-rw------- 1 omm dbgrp 2720 Aug 2 15:14 yxfdb_sbtest_data.sql

查看导出文件,数据格式如下,采用的copy from stdin方式。

--

COPY sbtest1 (id, k, c, pad) FROM stdin;
1 2 31451373586-15688153734-79729593694-96509299839-83724898275-86711833539-78981337422-35049690573-51724173961-87474696253 98996621624-36689827414-04092488557-09587706818-65008859162
2 2 21472970079-70972780322-70018558993-71769650003-09270326047-32417012031-10768856803-14235120402-93989080412-18690312264 04776826683-45880822084-77922711547-29057964468-76514263618
3 2 49376827441-24903985029-56844662308-79012577859-40518387141-60588419212-24399130405-42612257832-29494881732-71506024440 26843035807-96849339132-53943793991-69741192222-48634174017
4 1 85762858421-36258200885-10758669419-44272723583-12529521893-95630803635-53907705724-07005352902-43001596772-53048338959 37979424284-37912826784-31868864947-42903702727-96097885121
5 1 39629182538-02480546617-58524552861-79463588264-94630521692-52863783258-10322448958-16888371172-79549156168-39196968147 21202227777-41928895955-25555646807-61419229042-65545767251
\.
;

--

--
COPY sbtest2 (id, k, c, pad) FROM stdin;
1 5 43033802100-77764610845-39799112869-39522082157-29991343351-03104546403-44218055411-44753886367-06713013651-11339959167 95980075736-25797396575-06969310132-10655251718-72185519249
2 5 76306723138-65475533272-75387439533-24814990765-46240013424-33025575802-49383130113-39076862901-68733582344-28627130698 96730261334-40420286195-59727642680-29068251337-21208591100
3 1 95511505952-67827527851-32245183764-01321888676-12935581940-38116431620-03035069779-75393323033-78637090354-02871993622 60787675634-88696102862-47382723687-55751123510-43680810947
4 3 29809736103-16529959810-65200056077-19343258676-06720943729-58794656758-41876592996-88989304768-22811351512-24357747909 79427126268-47716046154-81221957414-39631154222-60675776555
5 2 45113989335-46151443595-40835740688-44993769723-02062225671-30269019391-54797492502-98917542019-19046584053-40538811195 34118849335-49886505072-43443607778-30350124188-52030134488
\.
;

--

2.2.3.2导出yxfdb数据库中的所有数据,不包含数据库对象定义,导出文件格式为文本模式。

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_data.sql -p 15400 yxfdb -a -F p -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-03 10:13:04]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-03 10:13:04]: total time: 2265 ms

-rw------- 1 omm dbgrp 7766 Aug 3 10:13 yxfdb_data.sql

2.2.3.3导出yxfdb数据库中的所有数据,不包含数据库对象定义,导出文件格式为自定义归档格式或者tar模式。

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_data.dmp -p 15400 yxfdb -a -F c -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-02 15:15:37]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-02 15:15:37]: total time: 2310 ms

-rw------- 1 omm dbgrp 6048 Aug 2 15:15 yxfdb_data.dmp

[omm@eb62246 backup]$ gs_dump -U yxf -f /home/omm/backup/yxfdb_data.tar -p 15400 yxfdb -a -F t -W 1cmszx#YZSSY
gs_dump[port='15400'][yxfdb][2023-08-03 10:16:25]: dump database yxfdb successfully
gs_dump[port='15400'][yxfdb][2023-08-03 10:16:25]: total time: 2314 ms

-rw------- 1 omm dbgrp 18432 Aug 3 10:16 yxfdb_data.tar

自定义归档格式,压缩比较高。建议采用。

2.3、使用说明

gs_dump是openGauss用于导出数据库相关信息的工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等),回收站对象除外。支持导出的数据库可以是默认数据库postgres,也可以是自定义数据库。

gs_dump工具由安装openGauss数据库的操作系统用户执行。

gs_dump工具在进行数据导出时,其他用户可以访问openGauss数据库(读或写)。

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

gs_dump工具在进行数据导出时生成的列不会被转储。

gs_dump支持导出兼容v1版本数据库的文本格式文件。

gs_dump支持将数据库信息导出至纯文本格式的SQL脚本文件或其他归档文件中。

  • 纯文本格式的SQL脚本文件:包含将数据库恢复为其保存时的状态所需的SQL语句。通过gsql运行该SQL脚本文件,可以恢复数据库。即使在其他主机和其他数据库产品上,只要对SQL脚本文件稍作修改,也可以用来重建数据库。
  • 归档格式文件:包含将数据库恢复为其保存时的状态所需的数据,可以是tar格式、目录归档格式或自定义归档格式,该导出结果必须与gs_restore配合使用来恢复数据库,gs_restore工具在导入时,系统允许用户选择需要导入的内容,甚至可以在导入之前对等待导入的内容进行排序。

2.4、导出文件格式说明

gs_dump可以创建四种不同的导出文件格式,通过“-F”或者“--format=”选项指定,具体如下

格式名称

-F的参数值

说明

建议

对应导入工具

纯文本格式

p

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

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

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

自定义归档格式

c

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

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

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

目录归档格式

d

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

-

tar归档格式

t

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

-

说明: 可以使用gs_dump程序将文件压缩为目录归档或自定义归档导出文件,减少导出文件的大小。生成目录归档或自定义归档导出文件时,默认进行中等级别的压缩。gs_dump程序无法压缩已归档导出文件。

2.5、注意事项

  • 禁止修改-F c/d/t 格式导出的文件和内容,否则可能无法恢复成功。对于-F p 格式导出的文件,如有需要,可根据需要谨慎编辑导出文件。
  • 为了保证数据一致性和完整性,gs_dump会对需要转储的表设置共享锁。如果表在别的事务中设置了共享锁,gs_dump会等待锁释放后锁定表。如果无法在指定时间内锁定某个表,转储会失败。用户可以通过指定--lock-wait-timeout选项,自定义等待锁超时时间。
  • 不支持加密导出存储过程和函数。

2.6、常用参数说明

[omm@eb62246 backup]$ gs_dump --help
gs_dump dumps a database as a text file or to other formats.

Usage:
gs_dump [OPTION]... [DBNAME]

General options:
-f, --file=FILENAME output file or directory name
-F, --format=c|d|t|p output file format (custom, directory, tar,
plain text (default))
-v, --verbose verbose mode
-V, --version output version information, then exit
-Z, --compress=0-9 compression level for compressed formats
--lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock
-?, --help show this help, then exit

Options controlling the output content:
-a, --data-only dump only the data, not the schema
-b, --blobs include large objects in dump
-c, --clean clean (drop) database objects before recreating
-C, --create include commands to create database in dump
-E, --encoding=ENCODING dump the data in encoding ENCODING
-g, --exclude-guc=GUC_PARAM do NOT dump the GUC_PARAM set
-n, --schema=SCHEMA dump the named schema(s) only
-N, --exclude-schema=SCHEMA do NOT dump the named schema(s)
-o, --oids include OIDs in dump
-O, --no-owner skip restoration of object ownership in
plain-text format
-s, --schema-only dump only the schema, no data
-q, --target=VERSION dump data format can compatible Gaussdb version (v1 or ..)
-S, --sysadmin=NAME system admin user name to use in plain-text format
-t, --table=TABLE dump the named table(s) only
-T, --exclude-table=TABLE do NOT dump the named table(s)
--include-table-file=FileName dump the named table(s) only
--exclude-table-file=FileName do NOT dump the named table(s)
--pipeline use pipeline to pass the password,
forbidden to use in terminal
-x, --no-privileges/--no-acl do not dump privileges (grant/revoke)
--column-inserts/--attribute-inserts dump data as INSERT commands with column names
--disable-dollar-quoting disable dollar quoting, use SQL standard quoting
--disable-triggers disable triggers during data-only restore
--exclude-table-data=TABLE do NOT dump data for the named table(s)
--exclude-with do NOT dump WITH() of table(s)
--inserts dump data as INSERT commands, rather than COPY
--no-publications do not dump publications
--no-security-labels do not dump security label assignments
--no-subscriptions do not dump subscriptions
--no-tablespaces do not dump tablespace assignments
--no-unlogged-table-data do not dump unlogged table data
--include-alter-table dump the table delete column
--quote-all-identifiers quote all identifiers, even if not key words
--section=SECTION dump named section (pre-data, data, or post-data)
--serializable-deferrable wait until the dump can run without anomalies
--dont-overwrite-file do not overwrite the existing file in case of plain, tar and custom format
--use-set-session-authorization
use SET SESSION AUTHORIZATION commands instead of
ALTER OWNER commands to set ownership
--exclude-function do not dump function and procedure
--with-encryption=AES128 dump data is encrypted using AES128
--with-key=KEY AES128 encryption key, must be 16 bytes in length
--with-salt=RANDVALUES used by gs_dumpall, pass rand value array
--include-extensions include extensions in dump
--binary-upgrade for use by upgrade utilities only
--binary-upgrade-usermap="USER1=USER2" to be used only by upgrade utility for mapping usernames
--non-lock-table for use by OM tools utilities only
--include-depend-objs dump the object which depends on the input object
--exclude-self do not dump the input object

Connection options:
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port number
-U, --username=NAME connect as specified database user
-w, --no-password never prompt for password
-W, --password=PASSWORD the password of specified database user
--role=ROLENAME do SET ROLE before dump
--rolepassword=ROLEPASSWORD the password for role

If no database name is supplied, then the PGDATABASE environment
variable value is used.

  • -h, --host=HOSTNAME
  • 指定主机名称。如果数值以斜杠开头,则被用作到Unix域套接字的路径。缺省从PGHOST环境变量中获取(如果已设置),否则,尝试一个Unix域套接字连接。
  • 该参数只针对openGauss外,对openGauss内本机只能用127.0.0.1。
  • 例如:主机名
  • 环境变量:PGHOST
  • -p, --port=PORT
  • 指定主机端口。在开启线程池情况下,建议使用 pooler port,即主机端口+1。
  • 环境变量:PGPORT
  • -U, --username=NAME
  • 指定所连接主机的用户名。
  • 不指定连接主机的用户名时,用户默认系统管理员。
  • 环境变量:PGUSER
  • -W, --password=PASSWORD
  • 指定用户连接的密码。如果主机的认证策略是trust,则不会对系统管理员进行密码验证,即无需输入-W选项;如果没有-W选项,并且不是系统管理员,“Dump Restore工具”会提示用户输入密码。
  • -f, --file=FILENAME
  • 将输出发送至指定文件或目录。如果省略该参数,则使用标准输出。如果输出格式为(-F c/-F d/-F t)时,必须指定-f参数。如果-f的参数值含有目录,要求当前用户对该目录具有读写权限,并且不能指定已有目录。
  • -F, --format=c|d|t|p
  • 选择输出格式。格式如下:
    • p|plain:输出一个文本SQL脚本文件(默认)。
    • c|custom:输出一个自定义格式的归档,并且以目录形式输出,作为gs_restore输入信息。该格式是最灵活的输出格式,因为能手动选择,而且能在恢复过程中将归档项重新排序。该格式默认状态下会被压缩。
    • d|directory:该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和blob对象对应的数据文件。
    • t|tar:输出一个tar格式的归档形式,作为gs_restore输入信息。tar格式与目录格式兼容;tar格式归档形式在提取过程中会生成一个有效的目录格式归档形式。但是,tar格式不支持压缩且对于单独表有8GB的大小限制。此外,表数据项的相应排序在恢复过程中不能更改。
  • -?, --help
  • 显示gs_dump命令行参数帮助,然后退出。
  • -a, --data-only
  • 只输出数据,不输出模式(数据定义)。转储表数据、大对象和序列值。
  • -n, --schema=SCHEMA
  • 只导出与模式名称匹配的模式,此选项包括模式本身和所有它包含的对象。
    • 单个模式:-n schemaname
    • 多个模式:多次输入-n schemaname
  • -t, --table=TABLE
  • 指定导出的表(或视图、序列、外表),可以使用多个-t选项来选择多个表,也可以使用通配符指定多个表对象。当使用通配符指定多个表对象时,注意给pattern打引号,防止shell扩展通配符。
    • 单个表:-t schema.table
    • 多个表:多次输入-t schema.table
  • -T,--exclude-table=TABLE
  • 指定不导出的表,具体同-t。
  • -s, --schema-only
  • 只转储对象定义(模式),而非数据。

三、gsql导入

操作示例 gs_dump导出文本格式 gsql 导入

openGauss=# create database yxfdb2 owner yxf;
CREATE DATABASE

[omm@eb62246 backup]$ gsql -U yxf -d yxfdb2 -p 15400 -f ./yxfdb_create.sql -W 1cmszx#YZSSY
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
REVOKE
REVOKE
GRANT
GRANT
total time: 63 ms

[omm@eb62246 backup]$ gsql -U yxf -d yxfdb2 -p 15400 -f yxfdb_sbtest_data.sql -W 1cmszx#YZSSY
SET
SET
SET
SET
SET
SET
SET
SET
setval
--------
5
(1 row)

setval
--------
5
(1 row)

total time: 4 ms

四、gs_restore 导入

4.1、功能描述

gs_restore是openGauss数据库提供的与gs_dump配套的导入工具。通过该工具,可将gs_dump导出的文件导入至数据库。gs_restore支持导入的文件格式包含自定义归档格式、目录归档格式和tar归档格式。

4.2、操作示例

创建备份库

openGauss=> create database backupdb owner yxf DBCOMPATIBILITY ='A';
CREATE DATABASE

##DBCOMPATIBILITY ='A'可以不设置

执行gs_restore,导入指定yxfdb.dmp文件(自定义归档格式)中yxfdb数据库的全量信息。

4.2.1、使用-c配置的话,先导入定义信息,再导入全量信息或者全量数据

不导定义信息,直接导入会报错
[omm@eb62246 backup]$ gs_restore -U omm /home/omm/backup/yxfdb.dmp -p 15400 -d backupdb -c -e -W 1cmszx#YZSSY
Error while PROCESSING TOC:
Error from TOC entry 4241; 2606 33211 CONSTRAINT sbtest5_pkey yxf
could not execute query: ERROR: relation "public.sbtest5" does not exist
Command was: ALTER TABLE public.sbtest5 DROP CONSTRAINT sbtest5_pkey;

[omm@eb62246 backup]$ gsql -U yxf -d backupdb -p 15400 -f yxfdb_create.sql -W 1cmszx#YZSSY
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER SEQUENCE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
REVOKE
REVOKE
GRANT
GRANT
total time: 62 ms

4.2.1.1数据导入

[omm@eb62246 backup]$ gs_restore -U yxf /home/omm/backup/yxfdb_data.dmp -p 15400 -d backupdb -e -W 1cmszx#YZSSY
start restore operation ...
table sbtest1 complete data imported !
table sbtest1new complete data imported !
table sbtest2 complete data imported !
table sbtest2new complete data imported !
table sbtest3 complete data imported !
table sbtest4 complete data imported !
table sbtest5 complete data imported !
Finish reading 16 SQL statements!
end restore operation ...
restore operation successful
total time: 49 ms

4.2.1.2全库导入

[omm@eb62246 backup]$ gs_restore -U yxf /home/omm/backup/yxfdb.dmp -p 15400 -d backupdb -c -e -W 1cmszx#YZSSY
start restore operation ...
table sbtest1 complete data imported !
table sbtest1new complete data imported !
table sbtest2 complete data imported !
table sbtest2new complete data imported !
table sbtest3 complete data imported !
table sbtest4 complete data imported !
table sbtest5 complete data imported !
Finish reading 56 SQL statements!
end restore operation ...
restore operation successful
total time: 196 ms

backupdb=> \d
List of relations
Schema | Name | Type | Owner | Storage
--------+-------------------+----------+-------+----------------------------------
public | sbtest1 | table | yxf | {orientation=row,compression=no}
public | sbtest1_id_seq | sequence | yxf |
public | sbtest1new | table | omm | {orientation=row,compression=no}
public | sbtest1new_id_seq | sequence | omm |
public | sbtest2 | table | yxf | {orientation=row,compression=no}
public | sbtest2_id_seq | sequence | yxf |
public | sbtest2new | table | omm | {orientation=row,compression=no}
public | sbtest2new_id_seq | sequence | omm |
public | sbtest3 | table | yxf | {orientation=row,compression=no}
public | sbtest3_id_seq | sequence | yxf |
public | sbtest4 | table | yxf | {orientation=row,compression=no}
public | sbtest4_id_seq | sequence | yxf |
public | sbtest5 | table | yxf | {orientation=row,compression=no}
public | sbtest5_id_seq | sequence | yxf |
(14 rows)

4.2.2、不使用-c配置的话,直接导入全量信息(建议使用此方法)

[omm@eb62246 backup]$ gs_restore -U yxf /home/omm/backup/yxfdb.dmp -p 15400 -d backupdb -e -W 1cmszx#YZSSY
start restore operation ...
table sbtest1 complete data imported !
table sbtest1new complete data imported !
table sbtest2 complete data imported !
table sbtest2new complete data imported !
table sbtest3 complete data imported !
table sbtest4 complete data imported !
table sbtest5 complete data imported !
Finish reading 56 SQL statements!
end restore operation ...
restore operation successful
total time: 105 ms

4.3、常用参数说明

[omm@eb62246 backup]$ gs_restore --help
gs_restore restores an openGauss database from an archive created by gs_dump.

Usage:
gs_restore [OPTION]... FILE

General options:
-d, --dbname=NAME connect to database name
-f, --file=FILENAME output file name
-F, --format=c|d|t backup file format (should be automatic)
-l, --list print summarized TOC of the archive
-v, --verbose verbose mode
-V, --version output version information, then exit
-?, --help show this help, then exit

Options controlling the restore:
-a, --data-only restore only the data, no schema
-c, --clean clean (drop) database objects before recreating
-C, --create create the target database
-e, --exit-on-error exit on error, default is to continue
-I, --index=NAME restore named index(s)
-j, --jobs=NUM use this many parallel jobs to restore
-L, --use-list=FILENAME use table of contents from this file for
selecting/ordering output
-n, --schema=NAME restore only objects in this schema(s)
-O, --no-owner skip restoration of object ownership
-P, --function=NAME(args) restore named function(s)
-s, --schema-only restore only the schema, no data
-S, --sysadmin=NAME system admin user name to use for disabling triggers
-t, --table=NAME restore named table(s)
-T, --trigger=NAME restore named trigger(s)
-x, --no-privileges/--no-acl skip restoration of access privileges (grant/revoke)
-1, --single-transaction restore as a single transaction
--disable-triggers disable triggers during data-only restore
--no-data-for-failed-tables do not restore data of tables that could not be
created
--no-publications do not restore publications
--no-security-labels do not restore security labels
--no-subscriptions do not restore subscriptions
--no-tablespaces do not restore tablespace assignments
--section=SECTION restore named section (pre-data, data, or post-data)
--use-set-session-authorization use SET SESSION AUTHORIZATION commands instead of
ALTER OWNER commands to set ownership
--pipeline use pipeline to pass the password,
forbidden to use in terminal

Connection options:
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port number
-U, --username=NAME connect as specified database user
-w, --no-password never prompt for password
-W, --password=PASSWORD the password of specified database user
--role=ROLENAME do SET ROLE before restore
--rolepassword=ROLEPASSWORD the password for role

  • -h, --host=HOSTNAME
  • 指定的主机名称。如果取值是以斜线开头,他将用作Unix域套接字的目录。默认值取自PGHOST环境变量;如果没有设置,将启动某个Unix域套接字建立连接。
  • 该参数只针对openGauss外,对openGauss内本机只能用127.0.0.1。
  • 环境变量:PGHOST
  • -p, --port=PORT
  • 指定服务器所侦听的TCP端口或本地Unix域套接字后缀,以确保连接。默认值设置为PGPORT环境变量。
  • 在开启线程池情况下,建议使用 pooler port,即侦听端口+1。
  • 环境变量:PGPORT
  • -U, --username=NAME
  • 所连接的用户名。
  • 环境变量:PGUESR
  • -W, --password=PASSWORD
  • 指定用户连接的密码。如果主机的认证策略是trust,则不会对系统管理员进行密码验证,即无需输入-W参数;如果没有-W参数,并且不是系统管理员,“gs_restore”会提示用户输入密码。
  • -d, --dbname=NAME
  • 连接数据库dbname并直接导入到该数据库中。
  • -a, --data-only
  • 只导入数据,不导入模式(数据定义)。gs_restore的导入是以追加方式进行的。
  • -c, --clean
  • 在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象。
  • -C, --create
  • 导入到数据库之前会先使用CREATE DATABASE创建数据库(指定该选项后,-d指定的数据库仅用以执行CREATE DATABASE命令,所有数据将被导入到创建的数据库中)。
  • -n, --schema=NAME
  • 只导入已列举的模式中的对象。
  • 该选项可与-t选项一起用以导入某个指定的表。
  • 多次输入-n schemaname可以导入多个模式。
  • -e, --exit-on-error
  • 当发送SQL语句到数据库时如果出现错误,请退出。默认状态下会继续,且在导入后会显示一系列错误信息。
  • -t, --table=NAME
  • 只导入已列举的表定义、数据或定义和数据。该选项与-n选项同时使用时,用来指定某个模式下的表对象。-n参数不输入时,默认为PUBLIC模式。多次输入-n -t 可以导入指定模式下的多个表。
  • -s, --schema-only
  • 只导入模式(数据定义),不导入数据(表内容)。当前的序列值也不会导入。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论