一、配置主服務器
-
修改postgresql.conf文件
你需要找到并修改PostgreSQL主服務器上的postgresql.conf文件,以啟用邏輯復制所需的相關設置。具體需要調整的參數包括:wal_level:設置為logical,這是啟用邏輯復制所必需的。max_wal_senders:根據你的需要調整WAL發送器的最大數量。這個參數定義了可以有多少個并發連接用于邏輯復制。max_replication_slots:設置可用的復制槽數量。
例如:
wal_level = logical max_wal_senders = 10 max_replication_slots = 10 -
修改pg_hba.conf文件
你還需要修改pg_hba.conf文件,以允許從服務器連接到主服務器進行復制。你需要添加一條規則,允許從特定IP地址或子網進行基于復制的連接。例如:host replication replicator your_slave_ip/32 md5其中,
replicator是你在從服務器上用于復制的用戶名,your_slave_ip需要替換為你的從服務器的IP地址。 -
重啟PostgreSQL服務
在修改了postgresql.conf和pg_hba.conf文件后,你需要重啟PostgreSQL服務以使更改生效。
二、配置從服務器
-
創建與主服務器相同的數據庫
在從服務器上,你需要創建一個與主服務器上相同的數據庫。 -
配置recovery.conf文件(或postgresql.auto.conf文件,取決于你的PostgreSQL版本和配置方式)
在從服務器的數據目錄中,你需要配置恢復參數以啟用邏輯復制模式。如果你使用的是較新的PostgreSQL版本,可能會使用postgresql.auto.conf文件而不是recovery.conf文件。你需要添加以下參數:primary_conninfo:指定連接到主服務器的信息,包括主機名、端口、用戶名、密碼等。standby_mode:對于邏輯復制,通常將其設置為off,因為邏輯復制不需要像流復制那樣的持續恢復模式。
例如:
primary_conninfo = 'host=your_master_ip port=5432 user=replicator password=your_password dbname=your_database application_name=your_slave_name' standby_mode = 'off'注意:這里的
dbname和application_name參數是可選的,但它們在邏輯復制中很有用,因為dbname指定了要復制的數據庫,而application_name則可以在主服務器上用于識別和管理從服務器。 -
(可選)創建訂閱用戶并授予權限
在從服務器上,你可能需要創建一個用于訂閱的用戶,并授予其必要的權限。這通常包括連接到數據庫、讀取表數據以及執行復制操作的權限。
三、在主服務器上創建發布
-
創建邏輯復制發布
在主服務器上,你需要使用CREATE PUBLICATION語句創建一個邏輯復制發布。這個發布將包含你想要復制到從服務器的表或整個數據庫。例如:CREATE PUBLICATION my_publication FOR ALL TABLES WITH (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);在這個例子中,
my_publication是發布的名稱,FOR ALL TABLES指定了發布包含所有表,WITH子句則定義了要發布的操作類型(如插入、更新、刪除和截斷)。
四、在從服務器上創建訂閱
-
創建邏輯復制訂閱
在從服務器上,你需要使用CREATE SUBSCRIPTION語句創建一個邏輯復制訂閱。這個訂閱將連接到主服務器上的發布,并應用發布的更改到從服務器上的數據庫。例如:CREATE SUBSCRIPTION my_subscription CONNECTION 'host=your_master_ip port=5432 user=replicator dbname=your_database password=your_password connect_timeout=10' PUBLICATION my_publication WITH (connect = true, enabled = true, copy_data = true, create_slot = true, synchronous_commit = 'remote_apply');在這個例子中,
my_subscription是訂閱的名稱,CONNECTION字符串指定了連接到主服務器的信息,PUBLICATION指定了要訂閱的發布名稱,WITH子句則定義了訂閱的選項(如是否立即連接、是否啟用、是否復制現有數據等)。
五、驗證邏輯復制
完成上述步驟后,你應該能夠驗證邏輯復制是否已成功配置并正在運行。你可以在主服務器和從服務器上執行一些數據操作(如插入、更新和刪除),并觀察這些操作是否正確地復制到了從服務器上的數據庫中。
請注意,邏輯復制不會同步DDL操作(如創建表、修改表結構等),因此你需要手動維護主從實例數據庫上的表結構使其保持一致。如果主庫上新增或刪除了表,你需要在從庫上執行刷新訂閱的SQL語句來同步這些更改。