1. 概述
通过数据管道实时同步 PostgreSQL 的数据时,来源数据源为 PostgreSQL,执行同步任务前,需要参考本文在数据源中进行一些配置,为后续的数据同步做好准备。
本文提供 Windows 版本的环境准备步骤,Linux 版本请参见:【Linux环境】PostgreSQL环境准备
2. CDC原理和支持
2.1 CDC原理
PostgreSQL 的逻辑解码功能最早出现在9.4版本中,它是一种机制,允许提取提交到事务日志中的更改,并通过输出插件以用户友好的方式处理这些更改。 此输出插件必须在运行 PostgreSQL 服务器之前安装,并与一个复制槽一起启用,以便客户端能够使用更改。
2.2 CDC支持
逻辑解码(Logical Decoding):用于从 WAL 日志中解析逻辑变更事件
复制协议(Replication Protocol):提供了消费者实时订阅(甚至同步订阅)数据库变更的机制
快照导出(export snapshot):允许导出数据库的一致性快照(pg_export_snapshot)
复制槽(Replication Slot):用于保存消费者偏移量,跟踪订阅者进度。
所以,根据以上,我们需要安装逻辑解码器,当前FineDataLink 支持 wal2json 解码器,输出格式为 json 。
3. 操作步骤
注:当前不支持同步视图。
同步来源数据库的数据至去向数据源之前,需要确保 PostgreSQL 数据库版本为数据管道支持的版本。
3.1 确认当前使用的数据库版本
确认是否为数据管道同步任务所支持的版本。
当前仅支持 PostgreSQL 9.4 及以上的单实例非只读数据库。支持情况详情参见:数据管道概述
3.2 修改REPLICA IDENTITY
该属性决定了当数据发生 UPDATE、DELETE 时,日志记录的字段。
DEFAULT - 更新和删除将包含 primary key 列的先前值
NOTHING - 更新和删除将不包含任何先前值
FULL - 更新和删除将包含所有列的先前值
INDEX index name - 更新和删除事件将包含名为 index name 的索引定义中包含的列的先前值。
修改代码如下:
alter table schema.tablename REPLICA IDENTITY FULL
Windows 版本可以进入 SQL shell,如下图所示:
然后使用默认的 postgres 账号登录:
例如将模式为 public 的表 student 修改设置,则输入如下语句:
3.3 安装插件
3.3.1 安装 wal2json
点击获取 wal2json 安装包:wal2json_windows_x64.zip
解压后,从目录中找到对应版本的 wal2json.dll,然后把 wal2json.dll 拷贝到前边安装的 PostgreSQL 的 lib 目录下,如下图所示:
3.3.2 修改配置文件
进入 PosgreSQL 安装目录下的 data 文件夹,进入 data 文件夹中,找到 postgresql.conf 在文件末尾追加以下配置:
shared_preload_libraries = 'wal2json'
wal_level = logical
max_wal_senders = 10
max_replication_slots = 10
然后在 data 目录下找到 pg_hba.conf,把下图中红圈中的两行前边的 # 去掉
3.4 重启数据库
进入 windows 系统中的服务下,重启数据库,如下图所示:
3.5 用户权限确认
以上都是用默认的用户 Postgres 进行,若用其他用户进行配置,则需要该用户为 PostgreSQL replication 角色、PostgreSQL login 角色,并且有需要同步的表的 select 权限。
创建用户命令:
GRANT SELECT ON ALL TABLES IN SCHEMA schemaname TO username;
注:schemaname 为模式名称,username为用户名称。
设置用户账号密码:
CREATE USER username WITH REPLICATION LOGIN PASSWORD 'password';
注:username 为用户名,password 为用户密码。
赋予用户 replication和login权限命令
进入安装目录下的 data 文件夹,对配置文件 pg_hba.conf 检查,确保用户拥有这些权限
3.6 检查权限是否可用
进入 SQL shell 中,输入如下命令,若 slot 信息返回了记录,则说明配置成功:
select * from pg_create_logical_replication_slot('slot_test', 'wal2json');
4. 后续步骤
在配置好数据库后,即可完成数据源配置。
需要在使用数据管道进行实时同步任务配置前,在 FineDataLink 中配置好需要同步的源端和目标端数据库数据连接,以便在同步任务配置过程中,通过选择数据源名称来控制同步任务,详情参见:配置数据连接
然后设置数据管道任务即可,详情参见:配置数据管道任务
5. 注意事项
如果出现启动不了的情况,可以在计算机管理的应用程序下,双击查看错误原因,如下图所示:
对于9.6及以前版本,工具命令pg_resetwal 叫 pg_resetxlog,它的本职工作是清理不需要的WAL文件,可以进入postgresql安装路径下的 bin 文件夹,在这里打开命令行,执行下面的命令:
.\pg_resetxlog.exe -f ..\data
在日志重置后,再尝试启动数据库。即:进入postgresql安装路径下的 bin 文件夹,在这里打开命令行,执行下面的命令:
.\pg_ctl start -D ..\data