
# 数据库级导入导出
gs_dump工具可以对单个数据库进行备份，支持四种不同的使用归档格式，不同的归档格式适用场景如[表1]所示，可以根据自身适用情况选择合适的归档格式。
gs_dump工具请参考《工具参考》中"数据导入导出工具 \> gs_dump导出数据库信息"。
 表1导出文件格式 
| 格式名称    | -F的参数值 | 说明                                                          | 建议                                      | 对应导入工具                                                                                                |
|:---|:---|:---|:---|:---|
| 纯文本归档格式 | p      | 纯文本脚本文件包含SQL语句和命令。命令可以由gsql命令行终端程序执行，用于重新创建数据库对象并加载表数据。     | 小型数据库，或者需要对导出的sql文件进行修改，推荐纯文本格式。        | 使用gsql工具恢复数据库对象前，可根据需要使用文本编辑器编辑纯文本导出文件。gsql工具请参考《工具参考》中"数据库连接工具 \> gsql连接数据库 \> gsql使用指导"。            |
| 自定义归档格式 | c      | 一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。                               | 中型或大型数据库，需要将备份结果输出到单个文件中，推荐自定义归档格式。     | 使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。gs_restore工具请参考《工具参考》中"数据导入导出工具 \> gs_restore导入数据"。 |
| 目录归档格式  | d      | 该格式会创建一个目录，该目录包含两类文件，一类是包含数据库对象的目录文件，另一类是每个表和blob对象对应的数据文件。 | 中型或大型数据库，需要将数据库对象与数据分目录存储导出，推荐使用目录归档格式。 | 使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。gs_restore工具请参考《工具参考》中"数据导入导出工具 \> gs_restore导入数据"。 |
| tar归档格式 | t      | tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单个文件大小应小于8GB。    | 小型数据库，需要将归档结果导出并打包，可以使用tar归档格式。         | 使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。gs_restore工具请参考《工具参考》中"数据导入导出工具 \> gs_restore导入数据"。 |
   
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
- gs_dump不会对所有数据库公共的全局对象（角色、表空间及对应权限）进行备份。因此恢复时请确保目标库/新实例上的全局对象已经创建。gs_dumpall的-g命令可以导出全局对象，同时使用gsql在目标端进行全局对象的导入。gs_dumpall工具请参考《工具参考》中"数据导入导出工具 \> gs_dumpall导出所有数据库信息"。
- gs_dump和gs_restore不支持跨数据库兼容模式的导入导出，请确保源库与目标库的数据库兼容模式（兼容模式的查询与创建指定兼容模式的数据库请参见[CREATE DATABASE](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0539.html#ZH-CN_TOPIC_0000002559105897)）及兼容性配置参数保持一致。
- 禁止修改-F c/d/t 格式导出的文件和内容，否则可能无法恢复成功。对于-F p 格式导出的文件，如有需要修改替换，可根据需要谨慎编辑导出文件。
- 恢复后，建议在数据库上运行ANALYZE，为优化器提供有用的统计数据信息。
 
备份时推荐以初始用户或具备sysadmin权限的用户执行如下命令，源库为my_database，导出时包含数据和对象定义。
```
-- 纯文本归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_database_backup.sql > /data/backup/my_database_backup.log &
-- 自定义归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F c -f /data/backup/my_database_backup.dmp > /data/backup/my_database_backup.log &
-- 目录归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F d -f /data/backup/my_database_backup > /data/backup/my_database_backup.log &
-- tar归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F t -f /data/backup/my_database_backup.tar > /data/backup/my_database_backup.log &
```
恢复时需要先创建好与源库属性相同的目标库，且库内没有任何内容。
```
-- 通过以下gsql元命令，查看数据库属性信息
\l+
-- 根据查询到的属性信息，创建目标数据库
create database my_database2 encoding='xxxxx' LC_COLLATE='xxxxx' LC_CTYPE ='xxxxx' TEMPLATE=xxx DBCOMPATIBILITY 'xxx';
```
再以初始用户或具备sysadmin权限的用户执行如下命令进行恢复。
```
-- 纯文本归档格式
nohup gsql -d my_database2 -p 8000 -U root -W ******** -f /data/backup/my_database_backup.sql -a > /data/backup/my_database_restore.log &
-- 自定义归档格式
nohup gs_restore /data/backup/my_database_backup.dmp -d my_database2 -p 8000 -U root -W ******** -F c -v > /data/backup/my_database_restore.log &
-- 目录归档格式
nohup gs_restore /data/backup/my_database_backup -d my_database2 -p 8000 -U root -W ******** -F d -v > /data/backup/my_database_restore.log &
-- tar归档格式
nohup gs_restore /data/backup/my_database_backup.tar -d my_database2 -p 8000 -U root -W ******** -F t -v > /data/backup/my_database_restore.log &
```
