重建基于pglogical逻辑复制的从库

重建基于pglogical逻辑复制的从库

December 6, 2019

《Postgres 9.x 升级至 10.x》一文中提到了使用pglogical逻辑复制升级。基于这种方式的升级有个缺点,就是主库的DDL发生改变的话,那么从库的复制就会有影响,可能需要重建从库来解决。

重建从库的步骤与之前创建逻辑复制有点类似,但是由于之前已经做过一些操作,所以相比之下,少了一些步骤。

从库中删除数据库,再创建一个空的数据库

由于表结构的改变,原先的数据都不能用了,需要重新同步。创建新的空数据库是最快的方式

从库中导入最新的表结构

在 provider 上导出结构数据

sudo -iu postgres pg_dumpall --schema-only -f dump.sql

在 subscriber 上导入结构数据

sudo -iu postgres psql -f dump.sql

从库上创建pglogical扩展

mydb=# CREATE EXTENSION pglogical;

从库上创建逻辑复制节点

-- host 填的是subscriber的IP
mydb=# SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=10.1.10.22 port=5432 dbname=mydb');

从库上创建逻辑复制订阅端

-- host 填的是provider的IP
mydb=# SELECT pglogical.create_subscription( subscription_name := 'subscriber', provider_dsn := 'host=10.1.10.6 port=5432 dbname=mydb');

在主库上检查复制状态

select * from pg_stat_replication;
最后更新于