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 事件顺序。

pg_ddl_capture

双向同步防循环能力

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

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

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

pg_loop_sync

操作示例

步骤 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 数据迁移同步加持,让数据进出更加便利和顺畅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…

免费插件集-illustrator插件-Ai插件-闭合开放路径

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,实现图形编辑中闭合开放路径。首先从下载网址下载这款插件https://download.csdn.net/download/m0_67316550/8789…

Java基于SpringBoot+Vue框架的房屋租赁管理系统(附源码,文档)

博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…

【前端】CSS知识梳理

基础:标签选择器、类选择器、id选择器和通配符选择器 font:font-style(normal) font-weight(400) font-size(16px) /line-height(0) font-family(宋体) 复合: 后代选择器( )、子选择器(>)、并集选择器(…

第16课 核心函数(方法)

掌握常用的内置函数及其用法。 数学类函数:abs、divmod、max、min、pow、round、sum。 类型转换函数:bool、int、float、str、ord、chr、bin、hex、tuple、list、dict、set、enumerate、range、object。 序列操作函数:all、any、filter、m…

基于AI深度学习的中医针灸实训室腹针穴位智能辅助定位系统开发

在中医针灸的传统治疗中,穴位取穴的精确度对于治疗效果至关重要。然而,传统的定位方法,如体表标志法、骨度折量法和指寸法,由于观察角度、个体差异(如人体姿态和皮肤纹理)以及环境因素的干扰,往…

C++ 实现俄罗斯方块游戏

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

《高频电子线路》—— 相位平衡条件判断准则

文章内容来源于【中国大学MOOC 华中科技大学通信(高频)电子线路精品公开课】,此篇文章仅作为笔记分享。 相位平衡条件判断准则 反馈电压或者从电感上获得,或者从电容上获得。分别为电感反馈三端振荡器,或者是电容反馈…

砥砺十年风雨路,向新而行创新程丨怿星科技十周年庆典回顾

10月24日,是一年中的第256天,也是程序员节,同时也是怿星的生日。2014年到2024年,年华似水匆匆一瞥,多少岁月轻描淡写,怿星人欢聚一堂,共同为怿星科技的十周年庆生! 01.回忆往昔&…

Android——横屏竖屏

系统配置变更的处理机制 为了避免横竖屏切换时重新加载界面的情况,Android设计了一中配置变更机制,在指定的环境配置发生变更之时,无需重启活动页面,只需执行特定的变更行为。该机制的视线过程分为两步: 修改 Androi…

mysql上课总结(5)(MySQL的完整性约束(详细介绍))

目录 一、完整性约束。 &#xff08;1&#xff09;概念与目的。 <1>概念。 <2>目的。 &#xff08;2&#xff09;各个约束的详细&#xff08;表格&#xff09; &#xff08;3&#xff09;各个约束的简要总结。 <1>主键约束。 <2>唯一约束。 <3>非…

msys2更换国内源(多个文件(不是3个文件的版本!))

msys2更换国内源 起因排查答案如下mirrorlist.mingw64mirrorlist.ucrt64mirrorlist.mingw32mirrorlist.mingwmirrorlist.clang64mirrorlist.clang32mirrorlist.msys 不想看经过的直接跳到答案 起因 查了很多个教程大部分都是【打开MSYS2软件内的\etc\pacman.d\ 中3个文件&…

使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(二) ubuntu的下载安装

首先&#xff0c;Linux系统是人工智能和深度学习首选系统。原因如下: 开放性和自由度&#xff1a;Linux 是一个开源操作系统&#xff0c;允许开发者自由修改和分发代码。这在开发和研究阶段非常有用&#xff0c;因为开发者可以轻松地访问和修改底层代码。社区支持&#xff1a;…

TCP Analysis Flags 之 TCP Keep-Alive

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

关于数学建模的一些介绍

为了更好了解世界&#xff0c;我们可以通过数学来描述许多特定的现象&#xff0c;而数学模型就是现实世界的理想化&#xff0c;不过它永远不能完全精确地表示现实世界。 在这篇文章中&#xff0c;我将介绍一些数学建模的基本概念以及相应的基础知识&#xff0c;而关于更具体的…

CSRA的LINUX操作系统24年11月2日下午上课笔记

压缩和解压缩&#xff1a;zip 、gzip、bz、xz # zip 压缩 # 压缩文件夹 # 解压缩 # unzip -v 查看压缩包中的内容 # bzip2 dir1/* :将dir1中的所有文件压缩 # gzip # 压缩文件夹 # 解压缩 tar 归档命令&#xff1a; # 创建tar包 tar -c*f # 释放tar包 tar -xf[c] # c …

Java JUC(四) 自定义线程池实现与原理分析

目录 一. 阻塞队列 BlockingQue 二. 拒绝策略 RejectPolicy 三. 线程池 ThreadPool 四. 模拟运行 在 Java基础&#xff08;二&#xff09; 多线程编程 中&#xff0c;我们简单介绍了线程池 ThreadPoolExecutor 的核心概念与基本使用。在本文中&#xff0c;我们将基于前面学…

施耐德M310PLC通讯之ModbusTCP(一)

这是另一个专题----施耐德国产化PLC(M310)的通讯篇 本节是ModbusTcp通讯 测试对象: M310plc与M241PLC 通讯协议: ModbusTcp 主站:M310PLC 从站:M241PLC 1.M310端: 1.1 新建工程(M310采用EcoStruxure Motion Expert 软件) 新建工程,这里不区分PLC型号的,只要是M310即…

电能表预付费系统-标准传输规范(STS)(30)

6.5.3.2 CONTROLBlock construction The 1 6 digit CONTROLBlock is constructed from the data elements in the APDU as defined in Table 36 and Table 37.The most significant digit is in position 1 5 and the least significant digit in position 0. APDU中的数据元素…

Jmeter基础篇(19)JSR223预处理器

前言 JSR223预处理器是Apache JMeter中的一个组件&#xff0c;它允许用户使用任何支持Java Scripting API (JSR 223) 的脚本语言来执行预处理任务。这个功能非常强大&#xff0c;因为它让测试人员能够利用如Groovy、JavaScript&#xff08;Nashorn引擎&#xff09;、BeanShell…