迁移 PostgreSQL 数据
本节介绍如何导出 PostgreSQL 源数据库集群内的数据,并导入至目标数据库集群。
警告 |
---|
|
小型 PostgreSQL 集群数据迁移
小型 PostgreSQL 集群可通过 pg_dump 离线导出数据,再通过 PostgreSQL 支持的方式导入数据,实现 PostgreSQL 的数据迁移。
前提条件
-
已获取管理控制台登录账号和密码,且已获取集群操作权限。
-
PostgreSQL 集群状态为活跃。
-
已获取目标 PostgreSQL 数据库信息。
步骤一:创建用户
-
以 platform-admin 角色登录 KubeSphere 企业版 Web 控制台并进入数据库管理平台。
-
在 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 库即可。 -
<用户密码>:源集群内已有的超级用户的密码。
-
<源端超级用户>:源集群内超级用户的名称。
-
<源端要备份的库>:源集群内需要备份的数据库名称。
-
<源端库的 IP>:源集群内待备份数据库所在主节点的 IP 地址。
-
<目的端超级用户>:目标集群内超级用户的名称。
-
<目的端 IP>:目标集群内主节点的 IP 地址。
-
步骤三:检查数据
数据迁移完成后,可以使用 select
语句或业务程序检查数据。
大型 PostgreSQL 集群数据迁移
在大型 PostgreSQL 集群中,存在大量业务数据,通常不允许中断。因此,可以利用 PostgreSQL 的逻辑复制功能进行数据迁移。逻辑复制的配置通常与业务密切相关,请参阅互联网上 PostgreSQL 逻辑复制的相关教程,使用具有相应权限的用户进行操作。本文不再赘述,仅提供相应的解决思路。
大对象的迁移
大对象在 PostgreSQL 数据库的处理相对特殊,因此,迁移含有大对象的数据表,只可以使用小型 PostgreSQL 集群的迁移方案。大型 PostgreSQL 集群的迁移方案不能迁移大对象的数据。