数据迁移
小型 PostgreSQL 集群
小型 PostgreSQL 集群可通过离线导出数据,再通过 PostgreSQL 支持的方式导入数据,实现 PostgreSQL 的数据迁移。
注意 |
---|
数据迁移过程,请暂停数据写操作。为避免数据丢失,建议在业务低峰期执行。 |
本小节主要介绍如何将源数据库集群内的数据导出,并导入至远端目标数据库集群。
前提条件
-
已获取管理控制台登录账号和密码,且已获取集群操作权限。
-
PostgreSQL 集群状态为
活跃
。 -
已获取远端目的 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
-
-
源集群与远端目的集群网络不互通时
-
在源集群环境下,执行如下命令,将指定数据库的数据进行导出操作。
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
-
在远端目的集群环境中,执行如下命令,将上述步骤中导出的 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
语句检查,操作如下。
-
连接远端目的集群数据库。
-
执行如下命令,源集群数据库内容是否已经迁移至目的集群。
SELECT * FROM <table_name>;
大型 PostgreSQL 集群数据迁移
大型 PostgreSQL 集群通常拥有大量数据,业务可能不允许中断。因此可以使用 PostgerSQL 的逻辑复制功能进行数据迁移,而逻辑复制的配置通常与业务管理密切,故用户可参阅互联网上 PostgerSQL 逻辑复制相关教程,使用具有相应权限的用户操作即可。本文不再赘述,仅提供相应的解决方案的思路。
大对象迁移
大对象在 PostgreSQL 数据库的处理相对特殊,含有大对象的数据表的迁移方法,只可以使用小型 PostgreSQL 集群迁移的方案,大型 PostgreSQL 集群迁移的方案不能迁移大对象的数据。