
# 使用gs_restore命令导入数据
#### 操作场景
gs_restore是GaussDB数据库提供的与gs_dump配套的导入工具。通过该工具，可将gs_dump导出的文件导入至数据库。gs_restore支持导入的文件格式包含自定义归档格式、目录归档格式和tar归档格式。
gs_restore具备如下两种功能。
- 导入至数据库 如果指定了数据库，则数据将被导入到指定的数据库中。其中，并行导入必须指定连接数据库的密码。导入时生成列会自动更新，并像普通列一样保存。
  
- 导入至脚本文件 如果未指定导入数据库，则创建包含重建数据库所需的SQL语句脚本，并将其写入至文件或者标准输出。该脚本文件等效于gs_dump导出的纯文本格式文件。
  
gs_restore工具在导入时，允许用户选择需要导入的内容，并支持在数据导入前对等待导入的内容进行排序。
#### 注意事项
gs_restore默认是以追加的方式进行数据导入。为避免多次导入造成数据异常，在进行导入时，建议选择使用"-c"和"-e"参数。"-c"表示在重新创建数据库对象前，清理（删除）已存在于将要还原的数据库中的数据库对象；"-e"表示当发送SQL语句到数据库时如果出现错误请退出，默认状态下会继续，且在导入后会显示一系列错误信息。
#### 迁移准备
1. 准备弹性云服务器或可通过公网访问GaussDB。
   - 通过弹性云服务器连接GaussDB数据库实例，需要创建一台弹性云服务器。 创建并登录弹性云服务器，详细内容请参见"[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)"和"[登录弹性云服务器](https://support.huaweicloud.com/ecs_faq/ecs_faq_0632.html)"。
     
   
   - 通过公网地址连接GaussDB数据库实例，需具备以下条件。
     1. 先对GaussDB数据库实例绑定公网地址，如何绑定公网地址，请参见[绑定弹性公网IP](https://support.huaweicloud.com/usermanual-gaussdb/gaussdb_01_160.html)。
     
     2. 保证本地设备可以访问GaussDB数据库实例绑定的公网地址。
      
    
2. 在准备的弹性云服务器或可访问GaussDB数据库的设备上，安装gsql客户端，并连接到GaussDB数据库实例。详情请参见[使用gsql连接数据库](https://support.huaweicloud.com/usermanual-gaussdb/gaussdb_01_503.html#ZH-CN_TOPIC_0000002649773052__li107091547192)。
 
#### 操作步骤
1. 将gs_dump导出的文件上传到设备上，gs_dump导出文件请参考[使用gs_dump和gs_dumpall命令导出数据](https://support.huaweicloud.com/usermanual-gaussdb/gaussdb_01_685.html)。
2. 使用gs_restore命令，从导出文件中，将数据库的所有对象的定义导入到目标数据库中。 
   - 示例一：执行gs_restore，指定数据库IP，指定已存在的数据库（如gs_example_restore），导入指定gs_example_dump.tar文件（tar归档格式）中gs_example数据库的数据和对象定义。示例中将不体现中间的打印信息。
     ```
     gs_restore -U root /tmp/data/gs_example_dump.tar -p 8000 -d gs_example_restore -e -h 192.*.*.139;
     Password:
     restore operation successful
     total time: 1430  ms
     ```
     
   
   - 示例二：执行gs_restore，指定数据库IP，指定已存在的数据库（如gs_example_restore），导入指定gs_example_dump.tar文件（tar归档格式）中gs_example数据库的数据和对象定义。同时清理（删除）已存在于将要导入的数据库中的数据库对象。示例中将不体现中间的打印信息。
     ```
     gs_restore -U root /tmp/data/gs_example_dump.tar -p 8000 -d gs_example_restore -e -c -h 192.*.*.139;
     Password:
     restore operation successful
     total time: 1621  ms
     ```
     
   
   
   表1常用参数说明 
   | 参数 | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 举例                  |
   |:---|:---|:---|
   | -U | 连接数据库的用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | -U jack             |
   | -W | 指定用户连接的密码。 - 如果主机的认证策略是trust，则不会对数据库管理员进行密码验证，即无需输入-W选项。  - 如果没有-W选项，并且不是数据库管理员，会提示用户输入密码。   | -W \*\*\*\*\*\*\*\* |
   | -d | 连接数据库dbname，并直接将数据导入到该数据库中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | -d backupdb         |
   | -p | 指定服务器所侦听的TCP端口或本地Unix域套接字后缀，以确保连接。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | -p 8000             |
   | -e | 当发送SQL语句到数据库时如果出现错误，则退出。默认状态下会忽略错误任务并继续执行导入，且在导入后会显示一系列错误信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | -e                  |
   | -c | 在重新创建数据库对象前，清理（删除）已存在于将要导入的数据库中的数据库对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | -c                  |
   | -s | 只导入模式定义，不导入数据。当前的序列值也不会被导入。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | -s                  |
      
   
   
 
#### 相关链接
有关gs_restore命令的更多信息，请参见：
- [gs_restore（分布式版）](https://support.huaweicloud.com/tg-gaussdb-dist-v8/gaussdb-08-0013.html)
- [gs_restore（集中式版）](https://support.huaweicloud.com/tg-gaussdb-cent-v8/gaussdb-38-0014.html)
 
