本节介绍如何导出 PostgreSQL 源数据库集群内的数据,并导入至目标数据库集群。

警告
  • 数据迁移过程中,请暂停源数据库的写操作。

  • 为避免数据丢失,建议在业务低峰期迁移数据。

小型 PostgreSQL 集群数据迁移

小型 PostgreSQL 集群可通过 pg_dump 离线导出数据,再通过 PostgreSQL 支持的方式导入数据,实现 PostgreSQL 的数据迁移。

前提条件

  • 已获取管理控制台登录账号和密码,且已获取集群操作权限。

  • PostgreSQL 集群状态为活跃。

  • 已获取目标 PostgreSQL 数据库信息。

步骤一:创建用户

  1. 以 platform-admin 角色登录 KubeSphere 企业版 Web 控制台并进入数据库管理平台。

  2. 在 PostgreSQL 数据库集群的数据库用户页签,创建数据库用户。该用户的用户名、密码及账户权限必须与源数据库集群中的相同。

备注

由于数据库具备完整的权限控制,在导出或导入数据时会根据用户权限进行区分。

  • 高级权限用户:能够导入导出整个数据库的数据。

  • 普通权限用户:仅能导入导出当前账户权限范围内的数据。

在后续操作中,默认使用高级权限账户进行示例。如果使用普通权限账户,请注意关注相应的权限范围。

步骤二:导出数据

  • 若源集群与目标集群网络互通

    在源集群环境下,执行如下命令,将指定数据库内的数据直接导出至目标集群。

    PGPASSWORD=<用户密码> pg_dump -U <源端超级用户> -d <源端要备份的库> -C -h <源端库的 IP> | psql -U <目的端超级用户> -d postgres -h <目的端 IP>

    示例:

    PGPASSWORD=Jxxxx1234@ pg_dump -U user_1 -d runoobdb -C -h 192.168.0.17 | psql -U user_1 -d postgres -h 192.168.0.18
  • 若源集群与目标集群网络不互通

    1. 在源集群环境下,执行如下命令,导出指定数据库的数据。

      PGPASSWORD=<用户密码> pg_dump -U <源端超级用户> -d <源端要备份的库> -C -h <源端库的IP> > dump.sql

      示例:

      PGPASSWORD=Jxxxx1234@ pg_dump -U user_1 -d runoobdb -C -h 192.168.0.17 > dump.sql
    2. 在目标集群环境中,执行如下命令,将上述步骤中导出的 dump.sql 文件拷贝至目标集群。

      psql -U <目的端超级用户> -d postgres -h <目的端 IP> -f dump.sql

      示例:

      psql -U user_1 -d postgres -h 192.168.1.17 -f dump.sql
  • 命令行参数说明

    • pg_dump 使用 -C 参数后,目标集群会自动创建需要同步的数据库,因此目标集群数据库只固定填写 postgres 库即可。

    • <用户密码>:源集群内已有的超级用户的密码。

    • <源端超级用户>:源集群内超级用户的名称。

    • <源端要备份的库>:源集群内需要备份的数据库名称。

    • <源端库的 IP>:源集群内待备份数据库所在主节点的 IP 地址。

    • <目的端超级用户>:目标集群内超级用户的名称。

    • <目的端 IP>:目标集群内主节点的 IP 地址。

步骤三:检查数据

数据迁移完成后,可以使用 select 语句或业务程序检查数据。

大型 PostgreSQL 集群数据迁移

在大型 PostgreSQL 集群中,存在大量业务数据,通常不允许中断。因此,可以利用 PostgreSQL 的逻辑复制功能进行数据迁移。逻辑复制的配置通常与业务密切相关,请参阅互联网上 PostgreSQL 逻辑复制的相关教程,使用具有相应权限的用户进行操作。本文不再赘述,仅提供相应的解决思路。

大对象的迁移

大对象在 PostgreSQL 数据库的处理相对特殊,因此,迁移含有大对象的数据表,只可以使用小型 PostgreSQL 集群的迁移方案。大型 PostgreSQL 集群的迁移方案不能迁移大对象的数据。