一、配置主服务器
-
修改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语句来同步这些更改。