首页 » Linux » Postgres同步云上的数据到本地的postgres

Postgres同步云上的数据到本地的postgres

 
文章目录

要在 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,转载请注明来源!

0