openGauss迁移数据至另一个数据库

本文遵循BY-SA版权协议,转载请附上原文出处链接。


本文作者: 黑伴白

本文链接: http://heibanbai.com.cn/posts/6d702ebc/

openGauss迁移数据至另一个数据库

在 OpenGauss 中,将 A 数据库的数据导入到 B 数据库的指定 schema 下,可通过 gs_dump(导出)和 gs_restore(导入)工具配合实现,具体步骤如下:

前提条件

  1. 确保 B 数据库中已创建目标 schema(若不存在,需提前创建):
    1
    2
    -- 在 B 数据库中执行,创建目标 schema(如 target_schema)
    CREATE SCHEMA target_schema;
  2. 确保操作用户在 A 数据库有导出权限,在 B 数据库有导入权限(如 DBADMCREATE 权限)。
  3. 本地或远程客户端已安装 OpenGauss 工具(gs_dumpgs_restore)。

步骤 1:从 A 数据库导出数据

使用 gs_dump 导出 A 数据库中需要迁移的对象(表、数据等),支持全库、指定 schema 或表导出。

导出 A 数据库的指定 schema(推荐)

若只需迁移 A 数据库中的某个 schema(如 source_schema):

1
2
3
4
5
6
7
8
9
gs_dump \
-h <A数据库IP> \ # A数据库的IP地址
-p <A数据库端口> \ # A数据库的端口(默认5432)
-U <A数据库用户名> \ # A数据库的登录用户
-W <A数据库密码> \ # A数据库用户密码(可选,会交互式提示)
-n source_schema \ # 要导出的A数据库中的schema名称
-F c \ # 导出格式为自定义归档(便于后续指定schema导入)
-f /path/to/backup.dmp \ # 导出文件保存路径
<A数据库名> # A数据库的名称

导出 A 数据库全库(如需迁移所有数据)

1
2
3
4
gs_dump \
-h <A数据库IP> -p <A端口> -U <A用户> -W <A密码> \
-F c -f /path/to/full_backup.dmp \
<A数据库名>

步骤 2:将数据导入 B 数据库的指定 schema

使用 gs_restore 导入数据,并通过参数指定 B 数据库的目标 schema(target_schema)。

导入到 B 数据库的指定 schema

1
2
3
4
5
6
7
8
9
gs_restore \
-h <B数据库IP> \ # B数据库的IP地址
-p <B数据库端口> \ # B数据库的端口(默认5432)
-U <B数据库用户名> \ # B数据库的登录用户
-W <B数据库密码> \ # B数据库用户密码(可选)
-d <B数据库名> \ # 目标B数据库的名称
-n target_schema \ # 导入到B数据库的目标schema名称
-F c \ # 与导出格式一致(自定义归档)
/path/to/backup.dmp # 步骤1中导出的备份文件路径

关键参数说明

  • -n target_schema:强制将数据导入 B 数据库的 target_schema 下(即使源数据来自 A 数据库的其他 schema)。
  • 若导出时包含多个 schema,导入时可通过 -n 指定单个目标 schema,或用 -N 排除不需要的 schema。

特殊场景处理

1. 源 schema 与目标 schema 名称不同

若 A 数据库的源 schema 为 old_schema,需导入到 B 数据库的 new_schema,直接通过 -n 指定目标即可:

1
2
3
4
5
# 导出A数据库的old_schema
gs_dump -h A_IP -p A_PORT -U A_USER -n old_schema -F c -f backup.dmp A_DB

# 导入到B数据库的new_schema
gs_restore -h B_IP -p B_PORT -U B_USER -d B_DB -n new_schema -F c backup.dmp

2. 导入时自动创建目标 schema

若 B 数据库中未提前创建 target_schema,可添加 -C 参数让工具自动创建(需用户有 CREATE SCHEMA 权限):

1
gs_restore -h B_IP -p B_PORT -U B_USER -d B_DB -n target_schema -C -F c backup.dmp

3. 只导入数据(不导入表结构)

若 B 数据库中已存在表结构,仅需导入数据,添加 -a 参数:

1
gs_restore -h B_IP -p B_PORT -U B_USER -d B_DB -n target_schema -a -F c backup.dmp

注意事项

  1. 版本兼容性gs_dumpgs_restore 的版本需与数据库版本一致(或兼容),避免因版本差异导致导入失败。
  2. 权限检查:确保 B 数据库用户对 target_schemaCREATEINSERT 等权限,可通过以下命令授权:
    1
    GRANT ALL PRIVILEGES ON SCHEMA target_schema TO <B数据库用户名>;
  3. 约束与依赖:若表存在外键约束,建议按依赖顺序导入,或先禁用约束再导入(导入后重新启用)。
  4. 大对象(LOB)处理:若包含 LOB 类型数据,确保导出导入格式一致(推荐使用 -F c 格式),避免数据损坏。

验证导入结果

导入完成后,登录 B 数据库验证数据:

1
2
3
4
5
6
7
8
# 登录B数据库
gsql -h B_IP -p B_PORT -U B_USER -d B_DB -W B_PASSWORD

# 查看目标schema下的表
\dt target_schema.*

# 抽查数据量
SELECT COUNT(*) FROM target_schema.表名;

通过以上步骤,可高效地将 OpenGauss 中 A 数据库的数据迁移到 B 数据库的指定 schema 下。


蚂蚁🐜再小也是肉🥩!


openGauss迁移数据至另一个数据库
http://heibanbai.com.cn/posts/6d702ebc/
作者
黑伴白
发布于
2025年8月21日
许可协议

“您的支持,我的动力!觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付