PostgreSQL 到 PostgreSQL 数据迁移同步

简述

PostgreSQL 是一个历史悠久且广泛使用的数据库,不仅具备标准的关系型数据库能力,还具有相当不错的复杂 SQL 执行能力。用户常常会将 PostgreSQL 应用于在线事务型业务,以及部分数据分析工作,所以 PostgreSQL 到 PostgreSQL 数据迁移同步成为了一个重要工作。

本文主要介绍如何通过 CloudCanal 实现 PostgreSQL 到 PostgreSQL 数据迁移同步。

技术点

使用 PostgreSQL 逻辑复制机制

CloudCanal 使用 PostgreSQL 逻辑复制 (Logical) 机制实现对其增量数据的订阅。

发布(Publication)和同步任务一一关联,任务修改订阅后也会自动增减 Publication 中的表。

Trigger 方式实现 DDL 同步

DDL 同步对于在线数据库灾备等场景必不可少,但 PostgreSQL 逻辑复制并未提供 DDL 操作。

为此,我们采用了行业通用的 Trigger 方式捕获 DDL 操作,并且自动写入一张普通表 cc_pg_ddl_capture_tab。CloudCanal 正常订阅该表即可获取 DDL 操作,和普通 DML 增量订阅机制一致,可准确地保障 DDL 和涉及表 DML 事件顺序。

双向同步防循环能力

数据库多活能力要求常常出现在一些在线数据库核心应用场景中,对于数据同步工具,主要需要做到同步数据无循环。

对于 PostgreSQL 之间的多活同步防循环,我们采用同一事务标记操作方式实现。

通过一张额外的标记表,同步任务写入正常业务数据到对端时,在同一个事务中对标记表做操作。当任务从 PostgreSQL 中获取到该标记表事件时,则忽略当前事务所有操作,即达到防循环目的。

操作示例

步骤 1: 修改 PostgreSQL 日志级别

  1. 参考 PostgreSQL 需要的权限 文档创建用户和授予权限。

  2. 设置 PostgreSQL wal_levellogical。自建数据库可修改 postgresql.conf,设置 wal_level=logical 和 wal_log_hints = on。

  3. 设置同步账号网络权限。

    自建数据库可修改 pg_hba.conf,添加以下配置:

    host replication 同步账号 CIDR网段 md5

    host 同步库 同步账号 CIDR网段 md5

    host postgres 同步账号 CIDR网段 md5

  4. 重启 PostgreSQL 生效。

步骤 2: 安装 CloudCanal

请参考 全新安装(Docker Linux/MacOS),下载安装 CloudCanal 私有部署版本

步骤 3: 添加数据源

登录 CloudCanal 控制台 ,点击 数据源管理 > 新增数据源

步骤 4: 创建任务

  1. 点击 同步任务 > 创建任务

  2. 选择源和目标数据源,并分别点击 测试连接

  3. 选择 数据同步 并勾选 全量初始化

    勾选 同步 DDL 将会自动创建对应的 DDL 捕获 trigger 和 event,需要较高权限。

  4. 选择需要同步的索引。

  5. 选择索引对应的列。

    如果需要选择同步的列,可先行在对端创建好表即可。

  6. 点击 确认创建

    任务创建过程将会进行一系列操作,点击 同步设置 > 异步任务 ,找到任务的创建记录并点击 详情 即可查看。

    PostgreSQL 源端的任务创建会有以下几个步骤:

    • 结构迁移
    • 初始化 DDL 捕获触发器和表
    • 初始化 PostgreSQL 增量复制位点
    • 分配任务执行机器
    • 创建任务状态机
    • 完成任务创建
  7. 等待任务自动步骤流转。

    当任务创建完成,CloudCanal 会自动进行任务流转,其中的步骤包括:

    • 结构迁移: 将 PostgreSQL 源端的表结构迁移到对端,如果同名表在对端已存在,则忽略。
    • 全量数据迁移: 已存在的存量数据将会完整迁移到对端,支持断点续传。
    • 增量数据同步: 增量数据将会持续地同步到对端数据库,并且保持实时(秒级别延迟)。

总结

本文简单介绍了如何使用 CloudCanal 进行 PostgreSQL 到 PostgreSQL 数据迁移同步。

PostgreSQL 作为流行的关系型数据库,通过 CloudCanal 数据迁移同步加持,让数据进出更加便利和顺畅。

相关推荐
疯狂打码的少年13 分钟前
【软件工程】需求工程:需求获取与需求分析
数据库·笔记·软件工程·需求分析
Database_Cool_13 分钟前
阿里云 PolarDB-X vs TiDB 分布式数据库选型指南
数据库·分布式·阿里云·tidb
数据库小学妹14 分钟前
分布式数据库架构怎么选?三种路线对比+迁移避坑指南
数据库·分布式·分布式数据库·数据库架构·数据迁移·数据库选型
桑榆肖物32 分钟前
在 .NET MAUI 里接入 PP-OCRv6 文本检测实现查找并点击
数据库·redis·.net·maui
味悲1 小时前
SQL注入从入门到实战
数据库·sql·安全
KaMeidebaby1 小时前
卡梅德生物技术快报|兔单克隆抗体:噬菌体 Fab 免疫文库搭建实操:兔单克隆抗体重组构建完整参数
前端·网络·数据库·人工智能·算法
复园电子4 小时前
企业级PDF批量盖章方案选型指南
数据库·pdf
AI-好学者11 小时前
阶段一-图数据库基础与PropertyGraph模型
数据库·rag·knowledge graph·graphrag
其实防守也摸鱼12 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚12 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库