专栏首页AustinDatabasesPostgreSQL 的逻辑复制 与 部分疑问

PostgreSQL 的逻辑复制 与 部分疑问

PostgreSQL 本身是支持流式复制的,而大部分数据库都支持逻辑复制的方式,流式复制稳定高效,但缺点是不灵活,而逻辑复制的优点就在于此。

逻辑的复制的优点

1 可以进行数据的过滤

2 可以进行数据的融合

3 部分数据的复制

逻辑复制使用发布/订阅模型,因此我们在上游(或发布者)创建发布,在下游(或订阅者)创建订阅。

通过一个例子我们来进行实际的逻辑复制的理解

1 先在原库上创建一张表

2 创建发布publication, 在创建复制的过程是在当前的数据库中建立复制通道发布的本质是一组表

create publication repl_test for all tables;

3 然后我们在目的库建立相同的表,或者近似的表(近似表的意思是和源表有的字段都必须有)

create table repl_table1 (id serial constraint primarykey primary key,name varchar(20),create_time timestamp);

4 创建相关的replication 对源与目的

create subscription repl_test connection 'user=repl password=password host=10.50.132.195 port=5432 dbname=repl_test' publication repl_test;

这里有几个注意的点

1 两个物理的数据库需要能进行联通,并且有一个账号可以进行数据的访问,一般来说权限需要使用 superuser

2 在复制的时候针对的是源的数据库,并且要写清楚对于源数据库的中已经建立的publication.

3 相关的表之间的连接就建立好了。

我们可以在主库插入数据,再在从库进行数据的校验

到此我估计大家的问题已经一大堆了

我先替大家提几个问题

1 如果我在从库的表插入记录可以吗?如果插入的记录和主库有冲突怎么办?

2 怎么监控数据的复制

3 如果我在主库建立表,不在从库建立表,会怎样

4 如果我在从库修改数据,会出现什么情况

1 如果我们在从库插入记录并且数据和主库有冲突会如何

实验步骤:

1 在源数据库插入数据

2 查看目的数据库的表是否已经有了数据

3 我们在从库上插入数据

4 然后再在主库上继续插入数据

主库

从库

我看可以看到 主库的数据插入到从库并没有被影响,主要是因为并未产生主键的冲突

然后我们继续查看在从库插入数据,占用主库下一次要插入占用的主键,再在主库继续插入数据。

主库

从库

我看可以看到主库的表和从库的表已经不一致了。

问题是我们怎么办?

我尝试删除从库的与主库冲突的数据,看看会怎样?

我们可以看到,从库的数据继续接受主库的数据

这点是比较好的,因为部分数据库在遇到这样的问题时复制就停止了,就算是修复的数据后,也不能继续进行,可能还需要整体的复制修复等等

2 怎么监控复制的问题

监控的问题主要分为两个部分

1 publication

2 subscription

3 在主库建表后,进行数据的插入,但是在从库上并未建立相关的表,造成的结果就是复制停止了。

通过查看主库和从库的 pg_stat_replication 和 pg_stat_subscription

发现已经没有相关的数据

4 直接在从库的错误日志中可以看到明显的错误提示

此时复制已经中断

总结:数据复制中,如果选择复制所有表,在添加新表后,需要在从库也建立相关的表结构。如果不做则表复制就直接错误并不在进行工作。

如何恢复,直接在从库上建立表的结构后,数据就开始复制 ,并且复制自动开始,复制恢复。

4 在从库进行数据的修改

这里就不在截图,直接将结果展现

如果你对从库的表的数据进行UPDATE 非主键的情况下,其实对于复制的影响并不是很大,但不建议这样做。

本文分享自微信公众号 - AustinDatabases(AustinDatabases),作者:carol11

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MYSQL 多源复制,过滤复制与应用场景

    Mysql的使用中,会伴随着一个其他数据库中很少被提到的问题,数据融合。ORACLE ,SQL SERVER ,PG 你可以去分区表,MYSQL 中遇到这样的问...

    AustinDatabases
  • PostgreSQL 逻辑复制的“水”还是深

    接上期的问题,在删除postgresql的 逻辑复制时遇到了一些麻烦,删除subscription时遇到了

    AustinDatabases
  • PostgreSQL 逻辑复制数据不一致,导致主库wal log 无限增大

    1 灵活: 逻辑复制对比物理复制来说,可以单表进行数据的复制,物理复制则是不可以的,并且大部分时间对于ETL的功能需求来说,物理复制太重了,需要的磁盘,网络,等...

    AustinDatabases
  • 高可用的本质: 复制

    服务和数据的高可用性本质上是靠“复制”来解决的,比如服务通过集群部署多台机器来完成,数据通过冗余的多副本机制来完成。对于服务来说,只需要部署多个实例即可,特别是...

    luoxn28
  • Qt多线程编程实战:MD5单项加密

    现在的加密/解密技术主要有三种:对称加密,非对称加密,和单向加密,这三种加密解密技术的组合就是现在电子商务的基础,它们三个有各自最适合的领域

    DeROy
  • 设计模式六大原则(6):开闭原则

    定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧...

    Angel_Kitty
  • 特助的烦恼:老板在飞机上不方便处理紧急加密邮件,该怎么办?

    上一期我们说到 Alice 利用 Filecoin 网络分享调研报告给 Bob,为了在将调研报告传给 Bob 的过程中数据不被泄露,她采用 Bob 的公钥对调研...

    本体Ontology
  • 【PPT】钱塘大数据应用交易中心2.0—五大板块构建工业互联网生态圈

    18日下午,第三届世界互联网大会“大数据项目对接会”分论坛如期进行,杭州钱塘大数据交易中心总经理吕绍娟在会中发表演讲。吕总表示,钱塘大数据应用交易中心2.0将围...

    钱塘数据
  • 利用Citrix Receiver浏览器进行渗透

    Citrix Receiver 是一种轻便的通用软件客户端,并带有类似浏览器的可扩展“插件”架构。Receiver 标 配 有 多 种 可 选 插 件 , 可 ...

    贝塔安全实验室
  • iOS开发——Block在实际项目中的传值

    在iOS开发中,我们会在实际过程中大量使用Block,其中Block有个很基础的功能,就是完成两个页面间的传值。而今天,我就用实际的项目中的页面,来展示如何完成...

    Originalee

扫码关注云+社区

领取腾讯云代金券