Wie verwende ich die logische Replikation, um meinen Aurora PostgreSQL-Compatible-DB-Cluster zu aktualisieren?
Ich möchte die logische Replikation verwenden, um meinen Amazon Aurora PostgreSQL-Compatible Edition-Datenbank (DB)-Cluster zu aktualisieren.
Kurzbeschreibung
Um Versionen für Aurora PostgreSQL-Compatible-DB-Cluster mithilfe der logischen Replikation zu aktualisieren, richte die Replikation zwischen dem ursprünglichen Quell-Cluster und dem neuen Ziel-Cluster ein. Migriere dann schrittweise die Datenänderungen und stelle die Anwendungen auf den neuen Cluster um.
Lösung
Den Quell-Cluster vorbereiten
Gehe wie folgt vor:
-
Setze den Parameter rds.logical_replication in der benutzerdefinierten DB-Cluster-Parametergruppe auf 1.
-
Führe die folgende Abfrage aus, um zu überprüfen, ob wal_level logical ist und rds.logical_replication auf on gesetzt ist:
SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication');Beispielausgabe:
name | setting ------------------------+--------- rds.logical_replication | on wal_level | logical (2 rows) -
Führe den folgenden Befehl aus, um eine Veröffentlichung in der Datenbank zu erstellen:
CREATE PUBLICATION my_publication FOR ALL TABLES;Hinweis: Ersetze my_publication durch deinen Veröffentlichungsnamen.
-
Führe die folgende Abfrage aus, um Informationen aus der Veröffentlichung abzurufen:
SELECT * FROM pg_publication;Beispielausgabe:
oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot -------+----------------+----------+--------------+-----------+-----------+-----------+-------------+------------ 20493 | my_publication | 16400 | t | t | t | t | t | f (1 row) -
Führe den folgenden Befehl aus, um einen Replikationsslot in der Datenbank zu erstellen:
SELECT pg_create_logical_replication_slot('my_replication_slot', 'pgoutput');Beispielausgabe für pg_create_logical_replication_slot:
pg_create_logical_replication_slot ------------------------------------ (my_replication_slot,0/6EC7260) (1 row)Hinweis: Ersetze my_replication_slot durch deinen Replikationsslotnamen.
-
Führe den folgenden Befehl aus, um die Liste der Replikationsslots, die sich derzeit im DB-Cluster befinden, und ihren Status abzurufen:
SELECT * FROM pg_replication_slots;Beispielausgabe für pg_replication_slots:
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size | two_phase ---------------------+----------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+----------- my_replication_slot | pgoutput | logical | 16401 | test | f | f | | | 308479 | 0/6EC7208 | 0/6EC7260 | reserved | | f (1 row)
Den Quell-Cluster klonen
Verwende die Amazon Relational Database Service (Amazon RDS)-Konsole oder die AWS Command Line Interface (AWS CLI), um einen Klon des DB-Quell-Clusters von Aurora PostgreSQL-Compatible zu erstellen.
Den Klon für ein Upgrade vorbereiten
Weitere Informationen findest du unter So bereitest du den Klon für ein Upgrade vor unter Aurora PostgreSQL auf eine neue Hauptversion aktualisieren.
Den Cluster auf eine neue Version aktualisieren
Weitere Informationen findest du unter So aktualisierst du den Cluster auf eine neue Hauptversion unter Aurora PostgreSQL auf eine neue Hauptversion aktualisieren.
Den Klon für die Replikation vorbereiten
Gehe wie folgt vor:
-
Wenn der Klon nach dem Upgrade verfügbar ist, verwende psql, um eine Verbindung zum Cluster herzustellen, und führe dann den folgenden Befehl aus, um das Abonnement zu erstellen:
CREATE SUBSCRIPTION my_subscription CONNECTION 'postgres://admin_user_name:admin_user_password@source_instance_URL/database' PUBLICATION my_publication WITH (copy_data = false, create_slot = false, enabled = false, connect = true, slot_name = 'my_replication_slot');Hinweis: Ersetze admin_user_name durch deinen Quell-Cluster-Benutzernamen und admin_user_password durch dein Quell-Cluster-Passwort. Ersetze außerdem source_instance_URL durch deinen Quell-Cluster-Endpunkt und database durch deinen Datenbanknamen.
-
Führe die folgende Abfrage aus, um den Replikationsursprung abzurufen, den du erstellt hast:
SELECT * FROM pg_replication_origin;Beispielausgabe für pg_replication_origin:
roident | roname ---------+---------- 1 | pg_32783 (1 row) -
Führe die folgende Abfrage aus, um Informationen über das logische Replikationsabonnement abzurufen:
SELECT * FROM pg_subscription;Beispielausgabe für pg_subscription:
oid | subdbid | subskiplsn | subname | subowner | subenabled | subbinary | substream | subtwophasestate | subdisableonerr | subpasswordrequired | subrunasowner | subconninfo | subslotname | subsynccommit | subpublications | suborigin -------+---------+------------+-----------------+----------+------------+-----------+-----------+------------------+-----------------+---------------------+---------------+------------------------------------------------------------------------------------------------+---------------------+---------------+------------------+----------- 32783 | 16401 | 0/0 | my_subscription | 16400 | f | f | f | d | f | t | f | postgres://admin_user_name:admin_user_password@source_instance_URL/database | my_replication_slot | off | {my_publication} | any (1 row) -
Führe den folgenden Befehl aus, um den Startpunkt in der Protokollsequenz für die Replikation anzugeben:
SELECT pg_replication_origin_advance('roname', 'log_sequence_number');Hinweis: Ersetze roname durch den Bezeichner, den die Ansicht pg_replication_origin zurückgegeben hat. Ersetze log_sequence_number durch deine Protokollsequenznummer.
Beispielausgabe:pg_replication_origin_advance ------------------------------ (1 row) -
Führe den folgenden Befehl aus, um die logische Replikation zu aktivieren:
ALTER SUBSCRIPTION my_subscription ENABLE;Hinweis: Ersetze my_subscription durch deinen Abonnementnamen.
Beispielausgabe:ALTER SUBSCRIPTION -
Führe den folgenden Befehl aus, um dich zu vergewissern, dass die Replikation funktioniert:
SELECT now() AS CURRENT_TIME, slot_name, active, active_pid, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size, pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes FROM pg_replication_slots WHERE slot_type = 'logical';Beispielausgabe:
current_time | slot_name | active | active_pid | diff_size | diff_bytes ----------------------+---------------------+--------+------------+-----------+------------ 2024-01-20 10:30:45 | my_replication_slot | t | 12345 | 16 MB | 16777216 (1 row) -
(Optional) Führe den folgenden Befehl aus, um die Replikationsverzögerung zu überwachen:
SELECT now() AS CURRENT_TIME, slot_name, active, active_pid, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size, pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes FROM pg_replication_slots WHERE slot_type = 'logical';Beispielausgabe:
-[ RECORD 1 ]+------------------------------ current_time | 2025-10-05 22:07:16.077928+00 slot_name | my_replication_slot active | t active_pid | 5392 diff_size | 0 bytes diff_bytes | 0Hinweis: Wenn die vorherigen Werte 0 erreichen, entspricht das Replikat der Quell-DB-Instance.
Aufgaben nach dem Upgrade durchführen
Weitere Informationen findest du unter Aufgaben nach dem Upgrade durchführen.
Ähnliche Informationen
- Themen
- Database
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 3 Jahren