要在 AWS RDS for PostgreSQL 主库和自建的 PostgreSQL 从库之间设置逻辑复制,并且只同步特定的三个表,您可以按照以下详细步骤操作:
步骤 1: 准备主数据库(AWS RDS)
1.1 启用逻辑复制
- 登录到 AWS 管理控制台。
- 访问
RDS
面板并选择您的数据库实例。 - 在
Parameter groups
中,将rds.logical_replication
设置为1
。 - 调整如
max_replication_slots
和max_wal_senders
的参数。 - 应用更改,重启数据库使设置生效。
1.2 创建复制用户
- 使用 RDS 给定的管理账户连接到目标数据库。
- 创建一个具有适当权限的用户,它将被用于复制过程。
sql复制代码CREATE USER replication_user WITH REPLICATION LOGIN ENCRYPTED PASSWORD 'your-strong-password';
1.3 创建 Publication
- 在 RDS 主库上创建一个逻辑复制的 Publication,并指定你想要同步的三个表。
sql复制代码CREATE PUBLICATION my_selected_tables_publication FOR TABLE table1, table2, table3;
替换 table1
, table2
, table3
为您打算同步的表名。
步骤 2: 导出和导入所选表的结构和数据
2.1 在主库上导出所选表的结构和数据
使用 pg_dump
工具以 custom 格式针对每个表单独导出结构和数据。
sh复制代码pg_dump -h your-rds-endpoint -U master_username -d source_database_name --table=table1 --format=c > table1.dump
pg_dump -h your-rds-endpoint -U master_username -d source_database_name --table=table2 --format=c > table2.dump
pg_dump -h your-rds-endpoint -U master_username -d source_database_name --table=table3 --format=c > table3.dump
2.2 在从库上导入所选表的结构和数据
将每个表的结构和数据导入到自建 PostgreSQL 中。
sh复制代码pg_restore -h your-on-premise-host -U target_database_username -d target_database_name --create --clean < table1.dump
pg_restore -h your-on-premise-host -U target_database_username -d target_database_name --create --clean < table2.dump
pg_restore -h your-on-premise-host -U target_database_username -d target_database_name --create --clean < table3.dump
步骤 3: 在从数据库上配置逻辑复制
3.1 创建 Subscription
在从数据库上创建一个 Subscription,连接到主数据库的 Publication。
sql复制代码CREATE SUBSCRIPTION my_selected_tables_subscription
CONNECTION 'host=your-rds-endpoint port=5432 dbname=source_database_name user=replication_user password=your-strong-password'
PUBLICATION my_selected_tables_publication
WITH (copy_data = false);
这里我们使用 WITH (copy_data = false)
因为我们手动同步了数据,不需要再次复制现有数据。
步骤 4: 验证和监控逻辑复制状态
4.1 监控订阅状态
检查 Subscription 状态以确保数据正在流向从数据库。
sql复制代码SELECT * FROM pg_stat_subscription;
4.2 监控复制槽状态
在主库上检查复制槽状态。
sql复制代码SELECT * FROM pg_replication_slots;
注意事项
- 在开始之前,请确保对源数据库做了完整的备份。
- 复制少量特定表可能会减少网络和资源开销,但仍需考虑这些表的更新频率和大小。
- 逻辑复制不会自动复制 DDL 变化,例如新建索引或修改列类型等。您需要手动处理这些变更。
- 确保在复制过程中,任何涉及安全的信息,例如密码,都是安全传输和处理的。
- 在进行上述操作之前,强烈推荐在测试环境中验证步骤,并在确认无误后才在生产环境中实施。
原文链接:Postgres同步云上的数据到本地的postgres,转载请注明来源!