修改主庫以及從庫的postgresql.conf
wal_level = logical
max_wal_senders = 10
max_replication_slots = 8
參數簡要說明如下
-
wal_level:設置成logical才支持邏輯復制
-
max_wal_senders:由於每個訂閱節點和流復制備庫在主庫上都會占用主庫上一個WAL發送進程,因此此參數設置值需大於max_replication_slots參數值加上物理備庫數量
-
max_replication_slots:設置值需大於訂閱節點的數量
邏輯主庫創建庫和表,邏輯從庫創建庫和表
主庫和從庫庫名可以不一致,但是庫中需要同步的表必須表名和表結構一致
createdb sourcedb
create table logical_tb(id int primary key,name varchar(20));
創建邏輯復制賬號並授權
邏輯復制用戶需要REPLICATION權限即可,可以不需要SUPERUSER權限,之后需要在主庫上將需要同步的表賦權給logical_repl用戶,使logical_repl賬號具有對這些表的讀權限,這樣從庫可以通過這個賬號進行連接訪問
CREATE USER logical_repl REPLICATION LOGIN CONNECTION LIMIT 8 ENCRYPTED PASSWORD 'logical_repl';
GRANT USAGE ON SCHEMA public TO logical_repl;
GRANT SELECT ON logical_tb1 TO logical_repl;
主庫創建發布
注意:進入當前庫下執行語句
- 為庫中所有的表創建發布
CREATE PUBLICATION puball FOR ALL TABLES
- 指定庫中某個表創建發布
CREATE PUBLICATION pub FOR TABLE logical_tb;
從庫創建訂閱
CREATE SUBSCRIPTION suballtable
CONNECTION 'host=10.10.64.30 port=5434 user=logical_repl password=logical_repl dbname=testall'
PUBLICATION puball;
ALTER SUBSCRIPTION sub REFRESH PUBLICATION