逻辑同步既有基于触发器复制技术的灵活性,又有基于日志复制技术的高效性,它使用发布/订阅模型对数据选择性复制,比物理同步更灵活、更高效。
逻辑同步原理类似物理同步,它们之间的区别在于,逻辑同步能更细化的进行表级复制,并且逻辑同步通过逻辑解码解析WAL日志获取逻辑日志,并非物理上的同步WAL日志。
注意:需要保证建立逻辑同步的两台数据库的"lc_monetary","case_sensitive"参数设置一致,否则"lc_monetary"不一致会导致“money”类型数据的逻辑同步时会出错,"case_sensitive"有可能会导致数据同步数据丢失。
实验准备
192.168.137.10 发布数据库
192.168.137.11 订阅服务器
1.将两台服务器的wal日志文件格式设置为logical
wal_level = 'logical'
max_worker_processes = 10 # one per database needed on provider node
# one per node needed on subscriber node
max_replication_slots = 10 # one per node needed on provider node
max_wal_senders = 10 # one per node needed on provider node
wal_sender_timeout = 60 # in milliseconds; 0 disables
2.在发布服务器配置sys_hba.conf,添加订阅服务器的复制权限,添加的用户必须是具有复制权限的管理员
3. 在发布服务器准备测试数据
4.打开逻辑同步工具
5.添加发布服务器pub_10
6.创建订阅服务器sub_11
7.默认情况下,在发布服务的每个数据库下都已经创建好了三个复制集,不过只定义了同步的操作,同步的表都为空。
8.在发布服务器pub_10上,选择TEST数据库,在其下创建复制集pub_for_table,只选择同步t1,t2
此处需要注意,复制集如果配置UPDATE或者DELETE,所选同步的表必须要有主键。
9.在订阅服务器sub_11上,在TEST数据库上创建订阅sub_for_table,订阅发布服务器pub_10上TEST数据库下的复制集pub_for_table:
因为订阅服务器上没有目标表,所以点击确定时弹出要先创建表:
10.逻辑同步创建成功,pub_10服务器上的表t1和t2会同步到sub_11服务器上
在订阅节点sub_11上查询同步状态
call syslogical.show_subscription_status();
SELECT * FROM SYSLOGICAL.LOCAL_SYNC_STATUS;