
# 导出数据库
DWS支持使用gs_dump工具导出某个数据库级的内容，包含数据库的数据和所有对象定义。可根据需要自定义导出如下信息：
- 导出数据库全量信息，包含数据和所有对象定义。 使用导出的全量信息可以创建一个与当前库相同的数据库，且库中数据也与当前库相同。
  
- 仅导出所有对象定义，包括：库定义、函数定义、模式定义、表定义、索引定义和存储过程定义等。 使用导出的对象定义，可以快速创建一个相同的数据库，但是库中并无原数据库的数据。
  
- 仅导出数据，不包含所有对象定义。
#### 操作步骤
1. [准备ECS作为gsql客户端主机](https://support.huaweicloud.com/mgtg-dws/dws_01_0037.html#section0)。
2. 请参见[下载客户端](https://support.huaweicloud.com/mgtg-dws/dws_01_0031.html)下载gsql客户端，并使用SSH文件传输工具（例如WinSCP工具），将客户端工具上传到一个待安装gsql的Linux主机上。
   
   执行上传gsql操作的用户需要对客户端主机的目标存放目录有完全控制权限。
   或者，您也可以先SSH远程登录到需要安装gsql的Linux主机，然后在Linux命令窗口，执行以下命令下载gsql客户端：
   ```
   wget https://obs.myhuaweicloud.com/dws/download/dws_client_9.x.x_redhat_x64.zip --no-check-certificate
   ```
   
   
3. 执行以下命令解压客户端工具。 
   ```
   cd <客户端存放路径>
   unzip dws_client_9.x.x_redhat_x64.zip
   ```
   其中：
   - \<客户端存放路径\>：请替换为实际的客户端存放路径。
   
   - dws_client_9.x.x_redhat_x64.zip：为"RedHat x86"对应的客户端工具包名称，请替换为实际下载的包名。
   
   
   
   
4. 执行以下命令配置客户端。 
   ```
   source gsql_env.sh
   ```
   提示以下信息表示客户端已配置成功：
   ```
   All things done.
   ```
   
   
5. 使用gs_dump导出gaussdb数据库。 
   ```
   gs_dump -W password -U jack -f /home/dbadmin/backup/postgres_backup.tar -p 8000 gaussdb  -h 10.10.10.100 -F t
   ```
   表1常用参数说明 
   | 参数     | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 举例                                               |
   |:---|:---|:---|
   | -U     | 连接数据库的用户名，如果未填写则表示当前已连接的数据库用户。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | -U jack                                          |
   | -W     | 指定用户连接的密码。 - 如果主机的认证策略是trust，则不会对数据库管理员进行密码验证，即无需输入-W选项；  - 如果没有-W选项，并且不是数据库管理员，会提示用户输入密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | -W *password*，此处密码需要用户自定义。                       |
   | -f     | 将导出文件发送至指定目录文件夹。如果这里省略，则使用标准输出。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | -f /home/*dbadmin* /backup/*postgres*_backup.tar |
   | -p     | 指定服务器所监听的TCP端口或本地Unix域套接字后缀，以确保连接。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | -p 8000                                          |
   | -h     | "集群地址"如果通过公网地址连接，请指定为集群"公网访问地址"或"公网访问域名"，如果通过内网地址连接，请指定为集群"内网访问地址"或"内网访问域名"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | -h 10.10.10.100                                  |
   | dbname | 需要导出的数据库名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | gaussdb                                          |
   | -F     | 选择导出文件格式。-F参数值如下： - p：纯文本格式  - c：自定义归档  - d：目录归档格式  - t：tar归档格式   | -F t                                             |
      
   其他参数说明请参见《数据仓库服务工具指南》中"gs_dump"章节。
   
   
 
#### 示例
示例一：执行gs_dump，导出gaussdb数据库全量信息，并对导出文件进行压缩，导出文件格式为sql文本格式。
```
gs_dump -W password -U jack -f /home/dbadmin/backup/postgres_backup.sql -p 8000  -h 10.10.10.100 gaussdb -Z 8 -F p
gs_dump[port='8000'][gaussdb][2017-07-21 15:36:13]: dump database gaussdb successfully
gs_dump[port='8000'][gaussdb][2017-07-21 15:36:13]: total time: 3793  ms
```
示例二：执行gs_dump，仅导出gaussdb数据库中的数据，不包含数据库对象定义，导出文件格式为自定义归档格式。
```
gs_dump -W Password -U jack -f /home/dbadmin/backup/postgres_data_backup.dmp -p 8000 -h 10.10.10.100 gaussdb -a -F c
gs_dump[port='8000'][gaussdb][2017-07-21 15:36:13]: dump database gaussdb successfully
gs_dump[port='8000'][gaussdb][2017-07-21 15:36:13]: total time: 3793  ms
```
示例三：执行gs_dump，仅导出gaussdb数据库所有对象的定义，导出文件格式为sql文本格式。
```
--导出前，表nation有数据
select n_nationkey,n_name,n_regionkey from nation limit 3;
 n_nationkey |          n_name           | n_regionkey 
-------------+---------------------------+-------------
           0 | ALGERIA                   |           0
           3 | CANADA                    |           1
          11 | IRAQ                      |           4
(3 rows)
gs_dump -W password -U jack -f /home/dbadmin/backup/postgres_def_backup.sql -p 8000 -h 10.10.10.100 gaussdb -s -F p
gs_dump[port='8000'][gaussdb][2017-07-20 15:04:14]: dump database gaussdb successfully
gs_dump[port='8000'][gaussdb][2017-07-20 15:04:14]: total time: 472 ms
```
示例四：执行gs_dump，仅导出gaussdb数据库的所有对象的定义，导出文件格式为文本格式，并对导出文件进行加密。
```
gs_dump -W password -U jack -f /home/dbadmin/backup/postgres_def_backup.sql -p 8000 -h 10.10.10.100 gaussdb --with-encryption AES128 --with-key 1234567812345678 -s -F p
gs_dump[port='8000'][gaussdb][2018-11-14 11:25:18]: dump database gaussdb successfully
gs_dump[port='8000'][gaussdb][2018-11-14 11:25:18]: total time: 1161  ms
```
