1、逻辑复制在数据迁移中的应艾超 腾讯云级程师逻辑复制概念和演进逻辑复制的功能和演进历史逻辑复制原理详解快照读、复制槽、解码插件、发布/订阅数据迁移应场景详解真实世界的应场景和解决案挑战和应对安全性、碎化、跟随社区CONTENT数据迁移应架构应场景和技术架构逻辑复制概念和演进逻辑复制的功能和演进历史逻辑复制(Logical Replication)逻辑复制是PG数据库的种基于数据对象的复制标志(Replica Identity),来复制数据对象及数据变化的法。之所以称为“逻辑”复制,是为了和“物理”复制加以区分。PostgreSQL持两种复制机制,物理复制使准确的块地址以及逐字节的复制式,逻辑复制
2、则允许在数据复制和安全性上更细粒度的控制。逻辑复制(Logical Replication)在9.4及以上、10以下版本,PostgreSQL为DML带来的数据修改流动到外部提供了基础 设施,可来实现复制解决案和审计等的。数据修改以流的形式发出,通过逻辑复 制槽(Replication Slot)识别,配合解码插件(Decoding Plugin),每份数据修改在每个 流中输出有且仅有次。在10及以上版本的逻辑复制使了种发布和订阅模型,发布和订阅可以是多对多的关 系,例如允许有个或者更多订阅者订阅个发布这节点上的个或多个发布。订阅者以与发布者相同的顺序应数据,因此能在个订阅中保证发布的事务致性
3、,这种数据复制的式有时候也被称为事务性复制。9.4以上及10以下版本10及以上版本:发布和订阅数据迁移应架构应场景和技术架构数据迁移的应场景云上的数据迁移产品能够帮助户在业务不停服的前提下轻松完成数据库迁移上云,利实时同步通道轻松构建可的数据库容灾架构,通过数据订阅来满商业数据挖掘、业务异步解耦等场景需求。数据迁移的技术架构迁移原理详解快照读、复制槽、解码插件、发布/订阅复制标识(Replica Identity)复制标识(Replica Identity),是个表级属性,于控制记录被删除或修改时写WAL的内容,只在逻辑复制中效,只能通过ALTER TABLE来修改。少有个列的值在该记录的新旧
4、版本发变化了,才会有记录发。DEFAULT USING INDEXFULL NOTHING(户表上的默认值)在数据变更是将记录主键(如有)列的旧值。数据变更时记录指定索引列的旧值,索引必须是唯键,且不是部分索引(partial index),不可延期(deferrable),并仅包含空列。在数据变更时记录所有列的旧值。在数据变更时不记录任何旧值(系统表上的默认值)。复制槽(Replication Slot)在逻辑复制中,个槽表示段数据变更流,它的顺序与源实例上数据发变化的顺序致,且槽中的每个数据变化不会重复。不同的复制槽之间,消费位点是独记录的,任时刻,个复制槽只能被个客户端消费。快照读(Sn
5、apshot)当两个或更多会话需要查看数据库中相同的内容时,快照同步是必须的。PG允许个事务export它正在使的快照,只要事务保持打开,其他事务可以import它的快照,来保障这些事务看到的数据与第个事务看到的完全相同。创建快照有2种式:1、利CREATE_REPLICATION_SLOT在创建复制槽时 动创建快照,并保证事务致性 2、使系统函数pg_export_snapshot导出快照 在个事务中获得快照的字符串标识后,事务结束前,在其他事务中导快照,从查看完全相同的数据。存量与增量的启动增量开启时:创建连接,创建复制槽,导出快照,记录快照标识。然后开启全量:新创建连接Conn,开启事务
6、,导快照,进数据读取和传输。输出插件(Output Plugins)输出插件将WAL志的内部格式,转换为复制槽的消费者需要的格式。插件的实现上,需要为函数_PG_output_plugin_init提供回调函数。typedef struct OutputPluginCallbacks LogicalDecodeStartupCB startup_cb;LogicalDecodeBeginCB begin_cb;LogicalDecodeChangeCB change_cb;LogicalDecodeCommitCB commit_cb;LogicalDe