前置条件
- 具有访问源 PostgreSQL 数据库的权限。
- 一个你希望迁移数据到其中的 ClickHouse Managed Postgres 实例。
- 在一台机器上安装 PeerDB。你可以按照 PeerDB GitHub repository 中的安装说明进行操作。你只需克隆该 repository 并运行
docker-compose up。在本指南中,我们将使用 PeerDB UI;PeerDB 启动后,即可通过http://localhost:3000访问。
迁移前注意事项
- 数据库对象:PeerDB 会根据源 schema 在目标数据库中自动创建表。但某些数据库对象 (如索引、约束和触发器) 不会自动迁移。迁移完成后,您需要在目标数据库中手动重新创建这些对象。
- DDL 变更:如果启用持续复制,PeerDB 会使目标数据库与源数据库在 DML 操作 (INSERT、UPDATE、DELETE) 以及 ADD COLUMN 操作上保持同步。不过,其他 DDL 变更 (如 DROP COLUMN、ALTER COLUMN) 不会自动同步。有关 schema 变更支持的更多信息,请参见此处
- 网络连通性:请确保运行 PeerDB 的机器能够访问源数据库和目标数据库。您可能需要配置防火墙规则或安全组 (Security Group) 设置,以允许建立连接。
创建 peer
+ New peer 按钮。
创建源 peer
Create peer 按钮以保存该 peer。
创建目标 peer
Create peer 按钮以保存目标 peer。
现在,你应该能在“Peers”部分看到源 peer 和目标 peer 都已列出。
获取源 schema 转储
pg_dump 为源 PostgreSQL 数据库创建仅包含 schema 的转储:
安装 pg_dump
安装 pg_dump
Ubuntu:更新软件包列表:安装 PostgreSQL 客户端:macOS:方法 1:使用 Homebrew (推荐)如果尚未安装 Homebrew,请先安装:安装 PostgreSQL:验证安装:
从 schema 转储中移除唯一约束和索引
将 schema 转储应用到目标数据库
psql 连接到目标 ClickHouse Managed Postgres 数据库,并运行该 schema 转储文件:
session_replication_role 设置为 replica:
创建 mirror
+ New mirror 按钮。
- 为 mirror 指定一个能够描述此次迁移的名称。
- 从下拉菜单中选择你之前创建的源 peer 和目标 peer。
- 确保:
- Soft delete 为 OFF。
- 展开
Advanced settings。确保 Postgres type system is enabled,并且 PeerDB columns are disabled。
- 选择你要迁移的表。你可以选择特定表,也可以选择源数据库中的所有表。
选择表由于我们在前一步中已按原样迁移了 schema,请确保目标数据库中的目标表名称与源表名称相同。
- 配置好 mirror 设置后,点击
Create mirror按钮。
等待初始加载
监控初始加载和复制
- 首先,我们会运行 COUNT 查询,以估算每个表中的行数。
- 然后,我们会使用 NTILE 运行分区查询,将大表拆分为更小的数据块,以便高效传输数据。
- 接着,我们会运行 FETCH 命令,从源数据库拉取数据,然后由 PeerDB 将其同步到目标数据库。
迁移后任务
这些步骤可能会因具体用例和应用要求而有所不同。关键是要确保数据一致性、尽量缩短停机时间,并在完全切换到新系统之前验证迁移后数据的完整性。
- 执行切换前验证检查
- 停止向源系统写入
- 确认复制已完全同步
- 重新创建并启用约束、索引和触发器
replica,也请将其重置:
- 重置目标表的序列
- 切换应用流量
- 将读流量切换到 ClickHouse Managed Postgres。
- 将写流量切换到 ClickHouse Managed Postgres。
- 监控应用错误、约束违规以及数据库健康状况。
- 清理资源
Replication slots如果你启用了 持续复制,PeerDB 会在源 PostgreSQL 数据库上创建一个 replication slot。迁移完成后,请务必从源数据库中手动删除该 replication slot,以避免不必要的资源占用。