PostgreSQL逻辑解码输出插件安装

本文档描述将数据更改流出所需的数据库设置开云体育电动老虎机PostgreSQL.的安装,以及应用于数据库本身的配置开云体育电动老虎机decoderbufs逻辑解码输出插件。安装和测试在以下环境/配置中执行:

从Debez开云体育官方注册网址ium 0.10开始,连接器支持使用PostgreSQL 10+逻辑复制流pgoutput.这意味着不再需要逻辑解码输出插件,连接器可以直接从复制流发出更改。

逻辑解码插件

逻辑解码是将数据库表的所有持久更改提取为一致的、易于理解的格式的过程,这种格式可以在不了解数据库内部状态的详细信息的情况下进行解释。开云体育电动老虎机

从PostgreSQL 9.4开始,逻辑解码是通过解码预写日志的内容来实现的,预写日志描述了存储级别上的更改,将其转换为特定于应用程序的形式,如元组流或SQL语句。在逻辑复制上下文中,插槽表示一个更改流,这些更改可以按照在源服务器上执行的顺序重播到客户机。每个插槽都从单个数据库传输一系列更改。开云体育电动老虎机输出插件将预写日志的内部表示形式中的数据转换为复制插槽使用者所需的格式。插件是用C语言编写、编译并安装在运行PostgreSQL服务器的机器上的,它们使用许多特定于PostgreSQL的apiPostgreSQL的文档

开云体育官方注册网址Debezium的PostgreSQL连接器与Debezium支持的逻辑解码插件之一一起工作,

对其中的更改进行编码Protobuf格式或逻辑复制格式。

为了简单起见,Debezium还开云体育官方注册网址提供了基于vanilla的容器映像PostgreSQL服务器映像在此基础上编译并安装插件。

Debe开云体育官方注册网址zium逻辑解码插件仅在其上安装和测试Linux机器。对于Windows和其他平台,可能需要不同的安装步骤

插件的区别

在测试套件中跟踪所有最新的差异Java类

关于逻辑解码和输出插件的更多信息可以在以下位置找到:

安装

在当前安装示例中,decoderbufs使用输出插件进行逻辑解码。decoderbufs输出插件为每个数据库更改生成一条Protobuf消息。开云体育电动老虎机每条消息都包含更新表行的新/旧元组。该插件编译安装是通过执行从开云体育官方注册网址Debezium Dockerfile

执行命令前,请确保该用户具有写入权限decoderbufs库在PostgreSQL自由目录(在测试环境中,目录为:/usr/lib64/pgsql/).还要注意,安装过程需要使用PostgreSQL实用程序pg_config.验证路径设置环境变量,以便能够找到实用程序。如果没有,请更新路径适当的环境变量。例如,在测试环境中:

decoderbufs安装命令
$ git克隆https://github.com/debez开云体育官方注册网址ium/postgres-decoderbufs -b v{debezium-version}——single-branch \ && CD postgres-decoderbufs \ && make && make install \ && CD ..\ && rm -rf postgres-decoderbufs
decoderbufs安装输出
克隆到'postgres-decoderbufs'…remote:枚举对象:288,完成。remote:计数对象:100%(4/4),完成。remote:压缩对象:100%(4/4),完成。remote: Total 288 (delta 0), reuse 1 (delta 0), pack-reuse 284 Receiving objects: 100% (288/288), 91.62 KiB | 3.66 MiB/s, done。解析delta: 100%(131/131),完成。注意:切换到“c9b00aa8c093fa77e08b256bb09d33069a30db86”。你处于“分离的头部”状态。您可以环顾四周,进行实验性更改并提交它们,您可以放弃在此状态下所做的任何提交,而不会通过切换回分支而影响任何分支。如果你想创建一个新的分支来保留你创建的提交,你可以(现在或以后)通过使用-c和switch命令来这样做。 Example: git switch -c  Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC -std=c11 -I/usr/local/include -I. -I./ -I/usr/include/pgsql/server -I/usr/include/pgsql/internal -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/decoderbufs.o src/decoderbufs.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC -std=c11 -I/usr/local/include -I. -I./ -I/usr/include/pgsql/server -I/usr/include/pgsql/internal -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/proto/pg_logicaldec.pb-c.o src/proto/pg_logicaldec.pb-c.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC -shared -o decoderbufs.so src/decoderbufs.o src/proto/pg_logicaldec.pb-c.o -L/usr/lib64 -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,--as-needed -lprotobuf-c /usr/bin/mkdir -p '/usr/lib64/pgsql' /usr/bin/mkdir -p '/usr/share/pgsql/extension' /usr/bin/install -c -m 755 decoderbufs.so '/usr/lib64/pgsql/decoderbufs.so' /usr/bin/install -c -m 644 .//decoderbufs.control '/usr/share/pgsql/extension/'

安装在Fedora 30+上

开云体育官方注册网址Debezium提供RPM包也适用于Fedora操作系统。这个包总是在最终的Debezium发行版完成后更新。开云体育官方注册网址要使用上述RPM,只需发出标准的Fedora安装命令:

$ sudo DNF -y安装postgres-decoderbufs

配置的其余部分如下所述。

PostgreSQL服务器配置

一旦decoderbufs已安装插件,需要配置数据库服务器。开云体育电动老虎机

设置库、WAL和复制参数

的末尾添加以下行postgresql.confPostgreSQL配置文件,以便在共享库中包含插件并进行一些调整细胞膜而且流复制设置。从中提取配置postgresql.conf.sample.您可能需要修改它,例如,如果您已经额外安装shared_preload_libraries

postgresql.conf ,配置文件参数设置
############ 复制  ############## # 模块shared_preload_libraries = ' decoderbufs '(1)#复制wal_level = logical(2)Max_wal_senders = 4(3)Max_replication_slots = 4(4)
1 告诉服务器它应该在启动时加载decoderbufs插件的名称设置在decoderbufsMakefile)
2 告诉服务器它应该对预写日志使用逻辑解码
3. 告诉服务器它应该使用的最大值4处理WAL变更的独立进程
4 告诉服务器它应该允许的最大值4为流化WAL更改而创建的复制插槽

开云体育官方注册网址Debezium使用PostgreSQL的逻辑解码,它使用复制插槽。即使在Debezium中断期间,复制插槽也保证保留Debezium所需的所有WAL。开云体育官方注册网址因此,密切监视复制插槽非常重要,以避免过多的磁盘消耗和其他可能发生的情况,如Debezium插槽长时间未使用时的目录膨胀。开云体育官方注册网址有关更多信息,请参阅官方Postgres文档这个主题

我们强烈建议阅读和理解官方文件关于PostgreSQL预写日志的机制和配置。

设置复制权限

复制只能由具有相应权限的数据库用户执行,且只能对配置的主机数量进行复制。开云体育电动老虎机为了赋予用户复制权限,定义一个PostgreSQL角色至少复制而且登录权限。例如:

创建角色名

超级用户默认拥有上述两种角色。

的末尾添加以下行pg_hba.confPostgreSQL配置文件,以便配置客户端身份验证用于数据库复制。开云体育电动老虎机PostgreSQL服务器应该允许在服务器机器和运行Debezium PostgreSQL连接器的主机之间进行复制。开云体育官方注册网址

注意,身份验证指的是数据库超级用户开云体育电动老虎机postgres.如果其他用户使用复制而且登录已创建权限。

pg_hba.conf ,配置文件参数设置
############ 复制  ############## 本地复制postgres信任(1)主机复制启动127.0.0.1/32 trust(2)主机复制postgres::1/128 trust(3)
1 告诉服务器允许复制postgres本地(即在服务器机器上)
2 告诉服务器允许postgres本地主机接收复制更改使用IPV4
3. 告诉服务器允许postgres本地主机接收复制更改使用IPV6

看到PostgreSQL文档有关网络掩码的更多信息。