Utilizzo della replica basata su GTID - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo della replica basata su GTID

Il seguente contenuto spiega come utilizzare gli identificatori di transazione globali (GTID) con la replica di log binari (binlog) tra le istanze DB di Amazon RDS for MySQL.

Se utilizzi la replica binlog e non hai familiarità con la replica basata su GTID con MySQL, consulta Replica con identificatori di transazione globali nella documentazione di MySQL.

La replica basata su GTID è supportata per tutte le versioni di RDS per MySQL 5.7 e RDS per MySQL versione 8.0.26 e versioni successive a MySQL 8.0. Tutte le istanze database MySQL in una configurazione di replica devono rispettare questo requisito.

Identificatori globali di transazione (GTID)

Gli identificatori globali di transazione (GTID) sono identificatori univoci generati per le transazioni MySQL sottoposte a commit. Puoi utilizzare i GTID per semplificare la replica basata sui log binari e facilitare la risoluzione dei problemi.

MySQL utilizza due diversi tipi di transazioni per la replica basata sui log binari:

  • Transazioni GTID – Transazioni identificate da un GTID.

  • Transazioni anonime – Transazioni a cui non è assegnato un GTID.

In una configurazione di replica, i GTID sono univoci in tutte le istanze database. I GTID semplificano la configurazione della replica perché, quando vengono utilizzati, non è necessario fare riferimento alle posizioni nel file di log. I GTID semplificano anche la registrazione delle transazioni replicate e verificano che l’istanza di origine e le repliche siano coerenti.

Puoi utilizzare la replica basata su GTID per replicare i dati con le repliche di lettura di RDS for MySQL. Puoi configurare la replica basata su GTID quando crei le nuove repliche di lettura oppure puoi convertire le repliche di lettura esistenti in modo che usino la replica basata su GTID.

Puoi utilizzare la replica basata su GTID anche in una configurazione di replica ritardata con RDS for MySQL. Per ulteriori informazioni, consulta Configurazione della replica ritardata con MySQL.

Parametri per la replica basata su GTID

Utilizzare i parametri seguenti per configurare la replica basata su GTID.

Parametro Valori validi Descrizione

gtid_mode

OFF, OFF_PERMISSIVE, ON_PERMISSIVE, ON

OFF indica che le nuove transazioni sono anonime, ovvero non hanno GTID, e che una transazione deve essere anonima per poter essere replicata.

OFF_PERMISSIVE indica che le nuove transazioni sono anonime, ma tutte le transazioni possono essere replicate.

ON_PERMISSIVE indica che le nuove transazioni hanno GTID assegnati, ma tutte le transazioni possono essere replicate.

ON indica che le nuove transazioni hanno GTID assegnati e che una transazione deve avere un GTID per poter essere replicata.

enforce_gtid_consistency

OFF, ON, WARN

OFF consente alle transazioni di violare la coerenza GTID.

ON impedisce alle transazioni di violare la coerenza GTID.

WARN consente alle transazioni di violare la consistenza GTID, ma genera un avviso quando si verifica una violazione.

Nota

Nel, il parametro appare come. AWS Management Consolegtid_mode gtid-mode

Per la replica basata su GTID, utilizza queste impostazioni per il gruppo di parametri dell'istanza database o per la replica di lettura:

  • ON e ON_PERMISSIVE si applicano solo alla replica in uscita da un'istanza database RDS. Entrambi questi valori fanno sì che l'istanza database RDS utilizzi i GTID per le transazioni replicate. ON richiede che anche il database di destinazione utilizzi la replica basata su GTID. Per ON_PERMISSIVE la replica basata su GTID è opzionale sul database di destinazione.

  • OFF_PERMISSIVE, se impostato, significa che le istanze database RDS possono accettare la replica in ingresso da un database di origine. Possono farlo indipendentemente dal fatto che il database di origine utilizzi la replica basata su GTID.

  • OFF, se impostato, significa che le istanze database RDS accettano solo la replica in ingresso da database di origine che non utilizzano la replica basata su GTID.

Per ulteriori informazioni sui gruppi di parametri, consultare Utilizzo di gruppi di parametri.

Configurazione della replica basata su GTID per le nuove repliche di lettura

Quando la replica basata su GTID è abilitata per un'istanza database di RDS for MySQL, la replica basata su GTID viene configurata automaticamente per le repliche di lettura di un'istanza database.

Per abilitare la replica basata su GTID per le nuove repliche di lettura
  1. Verificare che il gruppo di parametri associato all'istanza database abbia le impostazioni dei parametri seguenti:

    • gtid_modeON o ON_PERMISSIVE

    • enforce_gtid_consistencyON

    Per ulteriori informazioni sull'impostazione dei parametri di configurazione mediante i gruppi di parametri, consultare Utilizzo di gruppi di parametri.

  2. Se è stato modificato un gruppo di parametri dell'istanza database, riavviare l'istanza. Per ulteriori informazioni su come effettuare questa operazione, consultare Riavvio di un'istanza database.

  3. Creare una o più repliche di lettura dell'istanza database. Per ulteriori informazioni su come effettuare questa operazione, consultare Creazione di una replica di lettura.

Amazon RDS prova a stabilire una replica basata su GTID tra l'istanza database di MySQL e le repliche di lettura utilizzando MASTER_AUTO_POSITION. Se il tentativo non riesce, Amazon RDS utilizza le posizioni del file di log per la replica con le repliche di lettura. Per ulteriori informazioni su MASTER_AUTO_POSITION, consultare l'argomento relativo al posizionamento automatico dei GTID nella documentazione di MySQL.

Configurazione della replica basata su GTID per le repliche di lettura esistenti.

Per un'istanza database di RDS for MySQL esistente con repliche di lettura che non utilizzano la replica basata su GTID, è possibile configurare la replica basata su GTID tra l'istanza database e le repliche di lettura.

Per abilitare la replica basata su GTID per le repliche di lettura esistenti
  1. Se l'istanza database o qualsiasi replica di lettura sta utilizzando RDS versione 8.0 for MySQL versione 8.0.26 o precedente, aggiornare l'istanza database o la replica di lettura a MySQL 8.0.26 o versione successiva alla 8.0. Tutte le versioni di RDS per MySQL 5.7 supportano la replica basata su GTID.

    Per ulteriori informazioni, consulta Aggiornamento del motore di database MySQL.

  2. (Facoltativo) Reimpostare i parametri GTID e verificare il comportamento dell'istanza database e delle repliche di lettura:

    1. Verificare che il gruppo di parametri associato all'istanza database e ogni replica di lettura abbiano il parametro enforce_gtid_consistency impostato su WARN.

      Per ulteriori informazioni sull'impostazione dei parametri di configurazione mediante i gruppi di parametri, consultare Utilizzo di gruppi di parametri.

    2. Se è stato modificato un gruppo di parametri dell'istanza database, riavviare l'istanza. Se il gruppo di parametri è stato modificato per una replica di lettura, riavviare la replica.

      Per ulteriori informazioni, consulta Riavvio di un'istanza database.

    3. Eseguire l'istanza database e le repliche di lettura con il normale carico di lavoro e monitorare i file di log.

      Se vengono visualizzati avvisi relativi a transazioni incompatibili con GTID, modificare l'applicazione in modo che usi solo caratteristiche compatibili con GTID. Verificare che l'istanza database non stia generando avvisi relativi a transazioni incompatibili con GTID prima di procedere alla prossima fase.

  3. Reimpostare i parametri GTID per la replica basata su GTID che consente le transazioni anonime finché le repliche di lettura non ne completano l'elaborazione.

    1. Verificare che il gruppo di parametri associato all'istanza database e ogni replica di lettura abbiano le impostazioni dei parametri seguenti:

      • gtid_modeON_PERMISSIVE

      • enforce_gtid_consistencyON

    2. Se è stato modificato un gruppo di parametri dell'istanza database, riavviare l'istanza. Se il gruppo di parametri è stato modificato per una replica di lettura, riavviare la replica.

  4. Attendere il completamento della replica di tutte le transazioni anonime. Per verificare che vengano replicate, procedere come descritto di seguito:

    1. Eseguire questa istruzione sull'istanza DB primaria.

      SHOW MASTER STATUS;

      Annotare i valori nelle colonne File e Position.

    2. In ogni replica di lettura, utilizzare le informazioni su file e posizione presenti nell’istanza di origine menzionata nella fase precedente per eseguire la query seguente.

      SELECT MASTER_POS_WAIT('file', position);

      Ad esempio, se il nome del file è mysql-bin-changelog.000031 e la posizione è 107, eseguire l'istruzione seguente.

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      Se la replica di lettura si trova dopo la posizione specificata, la query la restituisce immediatamente. In caso contrario, la funzione entra in attesa. Passare alla fase successiva quando la query restituisce risposte per tutte le repliche di lettura.

  5. Reimpostare i parametri GTID solo per la replica basata su GTID.

    1. Verificare che il gruppo di parametri associato all'istanza database e ogni replica di lettura abbiano le impostazioni dei parametri seguenti:

      • gtid_modeON

      • enforce_gtid_consistencyON

    2. Riavviare l'istanza database e ogni replica di lettura.

  6. In ogni replica di lettura completare la procedura seguente.

    CALL mysql.rds_set_master_auto_position(1);

Disabilitazione della replica basata su GTID per un'istanza database MySQL con repliche di lettura

Puoi disabilitare la replica basata su GTID per un un'istanza database MySQL con repliche di lettura.

Per disabilitare la replica basata su GTID per un'istanza database MySQL con repliche di lettura
  1. Su ogni replica letta, eseguire la procedura seguente:

    CALL mysql.rds_set_master_auto_position(0);
  2. Reimpostare gtid_mode su ON_PERMISSIVE.

    1. Verifica che il gruppo di parametri associato all'istanza database MySQL e ogni replica di lettura abbiano gtid_mode impostato su ON_PERMISSIVE.

      Per ulteriori informazioni sull'impostazione dei parametri di configurazione mediante i gruppi di parametri, consultare Utilizzo di gruppi di parametri.

    2. Riavvia l'istanza database MySQL e ogni replica di lettura. Per ulteriori informazioni sul riavvio, consultare Riavvio di un'istanza database.

  3. Reimpostare gtid_mode su OFF_PERMISSIVE.

    1. Verifica che il gruppo di parametri associato all'istanza database MySQL e ogni replica di lettura abbiano gtid_mode impostato su OFF_PERMISSIVE.

    2. Riavvia l'istanza database MySQL e ogni replica di lettura.

  4. Attendere che tutte le transazioni GTID vengano applicate a tutte le repliche di lettura. Per verificare che vengano applicate, procedi nel seguente modo:

    1. Sull'istanza database MySQL, esegui il comando SHOW MASTER STATUS.

      Il risultato dovrebbe essere simile al seguente.

      File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------

      Annotare il file e la posizione nell'output.

    2. In ogni replica letta, utilizzate le informazioni sul file e sulla posizione dalla relativa istanza di origine nel passaggio precedente per eseguire la seguente query:

      Per MySQL 8.0.26 e versioni successive di MySQL 8.0

      SELECT SOURCE_POS_WAIT('file', position);

      Per le versioni MySQL 5.7

      SELECT MASTER_POS_WAIT('file', position);

      Ad esempio, se il nome del file è mysql-bin-changelog.000031 e la posizione è107, esegui la seguente istruzione:

      Per MySQL 8.0.26 e versioni successive di MySQL 8.0

      SELECT SOURCE_POS_WAIT('mysql-bin-changelog.000031', 107);

      Per le versioni MySQL 5.7

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
  5. Reimposta i parametri GTID per disabilitare la replica basata su GTID.

    1. Verifica che il gruppo di parametri associato all'istanza database MySQL e ogni replica di lettura abbiano le impostazioni dei parametri seguenti:

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

    2. Riavvia l'istanza database MySQL e ogni replica di lettura.