小型 PostgreSQL 集群

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

注意

数据迁移过程,请暂停数据写操作。为避免数据丢失,建议在业务低峰期执行。

本小节主要介绍如何将源数据库集群内的数据导出,并导入至远端目标数据库集群。

前提条件

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

  • PostgreSQL 集群状态为活跃

  • 已获取远端目的 PostgreSQL 数据库信息。

步骤一:创建用户

  1. 登录至远端目的数据库所在控制台。

  2. 在远端目的数据库集群的账户页面,添加新账户,要求该用户与源集群内的账户名、密码及账户权限相同。

    说明
    • 由于数据库拥有完整的权限控制,在数据导出或导入时也需要区分用户使用。故此处建议账户权限选择高级权限

    • 高级权限账户:可直接怼整个数据库进行数据导入或导出。

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

    • 后续操作均默认使用超级权限账户进行示例,使用普通权限账户关注相应权限范围即可。

步骤二:数据导出

  • 源集群与远端目的集群网络互通时

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

      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 库即可。

    • 用户密码:源端集群中已有的超级用户的密码。

    • <源端超级用户>:源集群内的超级用户,可在源集群 Console 详情页面内的账户页签进行查看,即账户权限为 SuperuserAccount 的账户。

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

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

    • <目的端超级用户>:远端目的集群内的超级用户,可登录远端集群的 Console 详情页面的账户页签进行查看。

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

步骤三:数据检查

数据迁移完成后,可以使用 select 语句或使用业务程序进行数据检查。已 select 语句检查,操作如下。

  1. 连接远端目的集群数据库。

  2. 执行如下命令,源集群数据库内容是否已经迁移至目的集群。

    SELECT * FROM <table_name>;

大型 PostgreSQL 集群数据迁移

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

大对象迁移

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