PostgreSQL逻辑解码输出插件安装
本文档描述将数据更改流出所需的数据库设置开云体育电动老虎机PostgreSQL.的安装,以及应用于数据库本身的配置开云体育电动老虎机wal2json逻辑解码输出插件。安装和测试在以下环境/配置中执行:
对于其他Postgres和OS版本以及Debezium也支持的Decoderbufs逻辑解码插件,也需要采取类似的步骤。开云体育官方注册网址
从Debez开云体育官方注册网址ium 0.10开始,连接器支持使用PostgreSQL 10+逻辑复制流pgoutput.这意味着不再需要逻辑解码输出插件,连接器可以直接从复制流发出更改。 |
逻辑解码插件
逻辑解码是将数据库表的所有持久更改提取为一致的、易于理解的格式的过程,这种格式可以在不了解数据库内部状态的详细信息的情况下进行解释。开云体育电动老虎机
从PostgreSQL 9.4开始,逻辑解码是通过解码预写日志的内容来实现的,预写日志描述了存储级别上的更改,将其转换为特定于应用程序的形式,如元组流或SQL语句。在逻辑复制上下文中,插槽表示一个更改流,这些更改可以按照在源服务器上执行的顺序重播到客户机。每个插槽都从单个数据库传输一系列更改。开云体育电动老虎机输出插件将预写日志的内部表示形式中的数据转换为复制插槽使用者所需的格式。插件是用C语言编写、编译并安装在运行PostgreSQL服务器的机器上的,它们使用许多特定于PostgreSQL的apiPostgreSQL的文档.
开云体育官方注册网址Debezium的PostgreSQL连接器与Debezium支持的逻辑解码插件之一一起工作,
为了简单起见,Debezium还开云体育官方注册网址提供了一个基于vanilla的Docker映像PostgreSQL服务器映像在此基础上编译并安装插件。 |
Debe开云体育官方注册网址zium逻辑解码插件仅在其上安装和测试Linux机器。对于Windows和其他平台,可能需要不同的安装步骤 |
插件的区别
插件的行为在所有情况下都不完全相同。到目前为止,这些差异已经被确定
Wal2json插件不会对没有主键的表发出事件
Wal2json插件不支持特殊值(
南
或∞
)用于浮点类型
在测试套件中跟踪所有最新的差异Java类.
关于逻辑解码和输出插件的更多信息可以在以下位置找到:
安装
在当前安装示例中,wal2json使用输出插件进行逻辑解码。wal2json输出插件为每个事务生成一个JSON对象。所有的新/旧元组都在JSON对象中可用。该插件编译安装是通过执行从开云体育官方注册网址Debezium docker镜像文件.
执行命令前,请确保该用户具有写入权限wal2json
库在PostgreSQL自由
目录(在测试环境中,目录为:/usr/pgsql - 9.6 - / - lib/
).还要注意,安装过程需要使用PostgreSQL实用程序pg_config.验证路径
设置环境变量,以便能够找到实用程序。如果没有,请更新路径
适当的环境变量。例如,在测试环境中:
导出路径= " $路径:/ usr / pgsql - 9.6 / bin”
$ git克隆https://github.com/eulerto/wal2json -b master——single-branch \ && CD wal2json \ && git checkout d2b7fef021c46e0d429f2c1768de361069e58696 \ && CD ..\ && rm -rf wal2json
克隆到“wal2json”…remote:计数对象:445,完成。remote: Total 445 (delta 0), reuse 0 (delta 0), pack-reuse 445接收对象:100% (445/445),180.70 KiB | 0 bytes/s, done。解析增量:100%(317/317),完成。注意:检查'd2b7fef021c46e0d429f2c1768de361069e58696'。你处于“分离的头部”状态。您可以环顾四周,进行实验性更改并提交它们,您可以放弃在此状态下所做的任何提交,而不会通过执行另一次签出影响任何分支。如果您想创建一个新的分支来保留您创建的提交,您可以(现在或以后)再次使用-b和checkout命令。示例:git checkout -b new_branch_name HEAD is now at d2b7fef…改进样式gcc -Wall - wmiss -prototypes -Wpointer-arith -Wdeclaration-after-statement - wdif -labels - wmiss -format-attribute -Wformat-security - fnostrict -aliasing -fwrapv -fexcess-precision=standard -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protect -strong——param=ssp-buffer-size=4 -grecord-gc -switches -m64 -mtune=generic -fPIC -I。 -I./ -I/usr/pgsql-9.6/include/server -I/usr/pgsql-9.6/include/internal -D_GNU_SOURCE -I/usr/include/libxml2 -I/usr/include -c -o wal2json.o wal2json.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC -L/usr/pgsql-9.6/lib -Wl,--as-needed -L/usr/lib64 -Wl,--as-needed -Wl,-rpath,'/usr/pgsql-9.6/lib',--enable-new-dtags -shared -o wal2json.so wal2json.o /usr/bin/mkdir -p '/usr/pgsql-9.6/lib' /usr/bin/install -c -m 755 wal2json.so '/usr/pgsql-9.6/lib/'
安装在Fedora 30+上
开云体育官方注册网址Debezium提供RPM包也适用于Fedora操作系统。这个包总是在最终的Debezium发行版完成后更新。开云体育官方注册网址要使用上述RPM,只需发出标准的Fedora安装命令:
$ sudo DNF -y安装postgres-decoderbufs
配置的其余部分与下面描述的相同wal2json
插件。
PostgreSQL服务器配置
一旦wal2json已安装插件,需要配置数据库服务器。开云体育电动老虎机
设置库、WAL和复制参数
的末尾添加以下行postgresql.conf
PostgreSQL配置文件,以便在共享库中包含插件并进行一些调整细胞膜而且流复制设置。从中提取配置postgresql.conf.sample.您可能需要修改它,例如,如果您已经额外安装shared_preload_libraries
.
############ 复制 ############## # 模块shared_preload_libraries = ' wal2json '(1)#复制wal_level = logical(2)Max_wal_senders = 4(3)Max_replication_slots = 4(4)
1 | 告诉服务器它应该在启动时加载wal2json (使用decoderbufs 为protobuf)逻辑解码插件(插件的名称设置在protobuf而且wal2jsonmakefile) |
2 | 告诉服务器它应该对预写日志使用逻辑解码 |
3. | 告诉服务器它应该使用的最大值4 处理WAL变更的独立进程 |
4 | 告诉服务器它应该允许的最大值4 为流化WAL更改而创建的复制插槽 |
开云体育官方注册网址Debezium使用PostgreSQL的逻辑解码,它使用复制插槽。即使在Debezium中断期间,复制插槽也保证保留Debezium所需的所有WAL。开云体育官方注册网址因此,密切监视复制插槽非常重要,以避免过多的磁盘消耗和其他可能发生的情况,如Debezium插槽长时间未使用时的目录膨胀。开云体育官方注册网址有关更多信息,请参阅官方Postgres文档这个主题.
我们强烈建议阅读和理解官方文件关于PostgreSQL预写日志的机制和配置。 |
设置复制权限
复制只能由具有相应权限的数据库用户执行,且只能对配置的主机数量进行复制。开云体育电动老虎机为了赋予用户复制权限,定义一个PostgreSQL角色至少的复制
而且登录
权限。例如:
创建角色名
超级用户默认拥有上述两种角色。 |
的末尾添加以下行pg_hba.conf
PostgreSQL配置文件,以便配置客户端身份验证用于数据库复制。开云体育电动老虎机PostgreSQL服务器应该允许在服务器机器和运行Debezium PostgreSQL连接器的主机之间进行复制。开云体育官方注册网址
注意,身份验证指的是数据库超级用户开云体育电动老虎机postgres
.如果其他用户使用复制
而且登录
已创建权限。
############ 复制 ############## 本地复制postgres信任(1)主机复制启动127.0.0.1/32 trust(2)主机复制postgres::1/128 trust(3)
1 | 告诉服务器允许复制postgres 本地(即在服务器机器上) |
2 | 告诉服务器允许postgres 在本地主机 接收复制更改使用IPV4 |
3. | 告诉服务器允许postgres 在本地主机 接收复制更改使用IPV6 |
看到PostgreSQL文档有关网络掩码的更多信息。 |
开云体育电动老虎机数据库测试环境设置
出于测试目的,一个名为开云体育电动老虎机测验
使用一个名为test_table
使用以下DDL命令创建:
创建数据库测试开云体育电动老虎机;CREATE TABLE test_table (id char(10) NOT NULL, code char(10), PRIMARY KEY (id));
解码输出插件测试
测试wal2json
通过获取test_table
使用pg_recvlogicalPostgreSQL客户端应用程序,控制PostgreSQL逻辑解码流。
在开始之前,请确保您已作为具有数据库复制权限的用户登录(如在开云体育电动老虎机前一步骤.否则,槽位创建和流处理将失败,并返回以下错误消息:
FATAL: no pg_hba.conf entry for replication connection from host "[local]", user "root", SSL off
在测试环境中,具有复制权限的用户为postgres
.
另外,确保路径
环境变量的设置pg_recvlogical
可以找到。如果没有,请更新路径
适当的环境变量。例如,在测试环境中:
导出路径= " $路径:/ usr / pgsql - 9.6 / bin”
创建插槽命名
test_slot
对于命名为开云体育电动老虎机测验
,使用逻辑输出插件wal2json
$ pg_recvlogical -d test——slot test_slot——create-slot -P wal2json
开始流式更改从逻辑复制插槽
test_slot
对于数据库开云体育电动老虎机测验
$ pg_recvlogical -d test——slot test_slot——start -o pretty-print=1 -f -
执行一些基本的DML运营
test_table
触发插入
/更新
/删除
更改事件
INSERT INTO test_table (id, code) VALUES('id1', 'code1');INSERT 0 1 test=# update test_table set code='code2' where id='id1';delete from test_table where id='id1';删除1
在插入
,更新
而且删除
事件,wal2json
插件输出所捕获的表更改pg_recvlogical
.
插入
事件
{“改变”:[{“类型”:“插入”、“模式”:“公众”,“表”:“test_table”、“columnnames”:“id”、“代码”,“columntypes”:[“字符(10)”、“角色(10)"], "columnvalues": ["id1 ", "code1 "]}]}
更新
事件
{“改变”:[{“类型”:“更新”、“模式”:“公众”,“表”:“test_table”、“columnnames”:“id”、“代码”,“columntypes”:[“字符(10)”、“角色(10)”,“columnvalues”:“id1”、“code2”,“oldkeys”:{“keynames”:“id”,“keytypes”:[“字符(10)”], "keyvalues": ["id1 "]}}]}
删除
事件
{“改变”:[{“类型”:“删除”,“模式”:“公众”,“表”:“test_table”、“oldkeys”:{“keynames”:“id”,“keytypes”:["字符(10)"], "keyvalues": ["id1 "]}}]}
注意副本的身份桌子上的 |
当测试结束时,插槽test_slot
对于数据库开云体育电动老虎机测验
可通过以下命令删除:
$ pg_recvlogical -d test——slot test_slot——drop-slot
副本的身份,是一个特定于PostgreSQL的表级设置,它决定了在情况下可用于逻辑解码的信息量 有4个可能的值
您可以对副本进行修改和检查
这是的输出
' UPDATE '的输出
|