数据导入导出工具概览
| 工具名称 | 工具简介 |
|---|---|
| COPY | 数据库数据批量导入导出语法接口,COPY可用于表级数据的导入和导出,以及查询结果集的导出。详细信息请参见COPY。 |
| \COPY | gsql客户端中用作表级数据批量导入导出的元命令,它基于COPY xxx FROM stdin/stdout用法,并通过libpq进行了报文封装,目的是能将数据存放在gsql客户端机器上。详细信息请参见表3。 |
| gs_dump | 数据库逻辑备份工具。导出单个数据库下的相关信息,用户可以自定义导出一个数据库下全部或其中的部分对象(模式、表、视图等)的定义及数据。详细信息请参见gs_dump导出数据库信息。 |
| gs_dumpall | 数据库逻辑备份工具。导出所有数据库下的相关信息,它可以导出实例下所有数据库中的对象定义及数据,包括默认数据库的数据、自定义数据库的数据、以及所有数据库公共的全局对象。详细信息请参见gs_dumpall导出所有数据库信息。 |
| gs_restore | 数据库逻辑恢复工具。对gs_dump导出生成的文件进行导入的工具。详细信息请参见gs_restore导入数据。 |
实例级导入导出
对于想要逻辑备份整个数据库实例的用户,推荐使用gs_dumpall工具进行备份,它可以导出实例下所有数据库的数据,包括默认数据库的数据、自定义数据库的数据、以及所有数据库公共的全局对象的定义。
- gs_dumpall不会对数据库运行参数进行备份及恢复。
- gs_dumpall仅支持纯文本格式导出。所以只能使用gsql恢复gs_dumpall导出的转储内容。
- 恢复后,建议在每个数据库上运行ANALYZE,为优化器提供有用的统计数据信息。
备份时推荐以初始用户/具备sysadmin权限的用户执行如下命令
nohup gs_dumpall -U root -W ******** -f /data/backup/bkp2.sql -p 8000 > /data/backup/dumpall_backup.log &
恢复时推荐以初始用户/具备sysadmin权限的用户执行如下命令
nohup gsql -d postgres -p 8000 -U root -W ******** -f /data/backup/bkp2.sql -a > /data/backup/dumpall_restore.log &
数据库级导入导出
对于想要逻辑备份单个database的用户,推荐使用gs_dump工具进行备份。gs_dump支持四种不同的使用归档格式,不同的归档格式适用场景如下,用户可以根据自身适用情况选择合适的归档格式。
| 格式名称 | -F的参数值 | 说明 | 建议 | 对应导入工具 |
|---|---|---|---|---|
| 纯文本归档格式 | p | 纯文本脚本文件包含SQL语句和命令。命令可以由gsql命令行终端程序执行,用于重新创建数据库对象并加载表数据。 | 小型数据库,或者需要对导出的sql文件进行修改,推荐纯文本格式。 | 使用gsql工具恢复数据库对象前,可根据需要使用文本编辑器编辑纯文本导出文件。 |
| 自定义归档格式 | c | 一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。 | 中型或大型数据库,需要将备份结果输出到单个文件中,推荐自定义归档格式。 | 使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。 |
| 目录归档格式 | d | 该格式会创建一个目录,该目录包含两类文件,一类是包含数据库对象的目录文件,另一类是每个表和blob对象对应的数据文件。 | 中型或大型数据库,需要将数据库对象与数据分目录存储导出,推荐使用目录归档格式。 | |
| tar归档格式 | t | tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单个文件大小应小于8GB。 | 小型数据库,需要将归档结果导出并打包,可以使用tar归档格式。 |
- gs_dump不会对所有数据库公共的全局对象(角色、表空间及对应权限)进行备份和恢复。因此恢复时请确保目标库/新实例上的全局对象已经创建。
- gs_dump和gs_restore不支持跨数据库兼容模式的导入导出,请确保源库与目标库的数据库兼容模式及兼容性配置参数保持一致。
- 禁止修改-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 &
模式级导入导出
对于想要备份单个schema下的用户,推荐使用gs_dump工具并配合-n参数进行备份,可以连续使用多个-n备份多个schema。
备份时推荐以初始用户/具备sysadmin权限的用户执行如下命令,源库为my_database,导出时会包含数据和对象定义。
-- 纯文本归档格式 nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_schema_backup.sql -n my_schema > /data/backup/my_schema_backup.log & -- 自定义归档格式 nohup gs_dump my_database -U root -W ******** -p 8000 -F c -f /data/backup/my_schema_backup.dmp -n my_schema > /data/backup/my_schema_backup.log & -- 目录归档格式 nohup gs_dump my_database -U root -W ******** -p 8000 -F d -f /data/backup/my_schema_backup -n my_schema > /data/backup/my_schema_backup.log & -- tar归档格式 nohup gs_dump my_database -U root -W ******** -p 8000 -F t -f /data/backup/my_schema_backup.tar -n my_schema > /data/backup/my_schema_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_schema_backup.sql -a > /data/backup/my_schema_restore.log & -- 自定义归档格式 nohup gs_restore /data/backup/my_database_backup.dmp -d my_database2 -p 8000 -U root -W ******** -F c -v -n my_schema > /data/backup/my_schema_restore.log & -- 目录归档格式 nohup gs_restore /data/backup/my_database_backup -d my_database2 -p 8000 -U root -W ******** -F d -v -n my_schema > /data/backup/my_schema_restore.log & -- tar归档格式 nohup gs_restore /data/backup/my_database_backup.tar -d my_database2 -p 8000 -U root -W ******** -F t -v -n my_schema > /data/backup/my_schema_restore.log &
表级导入导出
对于表级的导入与导出,能够使用的工具很多,可基于以下场景切入选择合适的工具。
- 用户需要导出单个表的定义和表内数据到同一个文件中。推荐使用gs_dump工具的纯文本归档,并配合-t参数使用,可以连续使用-t备份多张表。
备份时推荐以初始用户/具备sysadmin权限的用户执行如下命令,源库为my_database,目标表为my_schema下的my_table。
nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_table_backup.sql -t my_schema.my_table > /data/backup/my_table_backup.log &
恢复时需要先创建好与源库属性相同的目标库,且库内已有目标模式,没有目标表,再以初始用户/具备sysadmin权限的用户执行如下命令进行恢复
nohup gsql -d my_database2 -p 8000 -U root -W ******** -f /data/backup/my_table_backup.sql -a > /data/backup/my_table_restore.log &
- 用户仅需要导出单个表的定义,不需要表内数据。
推荐使用gs_dump工具的纯文本归档,配合-s参数使用,命令如下
nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_table_backup.sql -t my_schema.my_table -s > /data/backup/my_table_backup.log &
恢复时需要先创建好与源库属性相同的目标库,且库内已有目标模式,没有目标表,再以初始用户/具备sysadmin权限的用户执行如下命令进行恢复
nohup gsql -d my_database2 -p 8000 -U root -W ******** -f /data/backup/my_table_backup.sql -a > /data/backup/my_table_restore.log &
- 用户需要导出单个表的数据,不需要表定义。
- 将数据导出到数据库节点上,推荐直接使用COPY命令
- 普通场景下,出于数据库安全考虑,当参数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,以防止用户越权查看或修改敏感文件。enable_copy_server_files打开时,系统管理员可以通过guc参数safe_data_path设置普通用户可以导入导出的路径的白名单,未设置此guc参数时候(默认情况),不对普通用户使用的路径进行拦截。
- 当数据库部署在沙箱内时,COPY指定的文件为沙箱内的路径,而不是沙箱外的路径。
推荐使用如下命令将数据导出成标准的CSV格式,此文件路径为数据库节点上的路径。
COPY my_schema.my_table TO '/data/backup/my_table.csv' CSV;
再通过如下命令将数据导入到目标表中。
COPY my_schema.my_table2 FROM '/data/backup/my_table.csv' CSV;
- 将数据导出到客户端上,推荐直接使用\COPY元命令
使用如下命令将数据导出成标准的CSV格式,此文件路径为客户端上的路径。
\COPY my_schema.my_table TO '/data/backup/my_table.csv' CSV;
再通过如下命令将数据导入到目标表中。
\COPY my_schema.my_table2 FROM '/data/backup/my_table.csv' CSV;
- 将数据导出到数据库节点上,推荐直接使用COPY命令
- 用户需要自定义导入导出时数据的格式,例如分隔符换行符等