Uso delle repliche di lettura MySQL - 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à.

Uso delle repliche di lettura MySQL

Questa sezione contiene informazioni specifiche sull'utilizzo delle repliche di lettura su RDS per MySQL. Per informazioni generali sulle repliche di lettura e istruzioni su come usarle, consulta Uso delle repliche di lettura dell'istanza database.

Configurazione delle repliche di lettura con MySQL

Prima di poter utilizzare un'istanza database MySQL come un'origine delle replica, assicurati di abilitare i backup automatici sull'istanza database di origine. A questo scopo, imposta il periodo di retention dei backup su un valore diverso da zero. Questo requisito si applica anche a una replica di lettura che rappresenta l'istanza database di origine per un'altra replica di lettura. I backup automatici vengono solo supportati per le repliche di lettura che eseguono qualsiasi versione di MySQL. Puoi configurare la replica in base alle coordinate del log binario per un'istanza database MySQL.

Su RDS for MySQL versione 5.7.44 e versioni successive di MySQL 5.7 e RDS for MySQL 8.0.28 e versioni successive 8.0, è possibile configurare la replica utilizzando identificatori di transazione globali (GTID). Per ulteriori informazioni, consulta Utilizzo della replica basata su GTID.

È possibile creare fino a 15 repliche di lettura da un'istanza database nella stessa regione. Per un efficace funzionamento della replica, ciascuna replica di lettura dovrebbe avere la stessa quantità di risorse di calcolo e storage dell'istanza database di origine. Se si dimensiona l'istanza database di origine, si devono dimensionare anche le repliche di lettura.

RDS per MySQL supporta le repliche di lettura a cascata. Per informazioni su come configurare le repliche di lettura a cascata, consulta Utilizzo di repliche di lettura a cascata con RDS per MySQL.

Puoi eseguire più operazioni di creazione ed eliminazione di repliche di lettura simultanee che fanno riferimento alla stessa istanza database di origine. Quando esegui queste operazioni, rimani entro il limite delle 15 repliche di lettura per ogni istanza di origine.

Una replica in lettura di un'istanza DB MySQL non può utilizzare una versione del motore DB inferiore rispetto alla sua istanza DB di origine.

Preparazione delle istanze database MySQL che utilizzano MyISAM

Se l'istanza database MySQL utilizza un motore non transazionale come MyISAM, devi eseguire la seguente procedura per configurare correttamente la replica di lettura. Questa procedura è necessaria per verificare che la replica di lettura contenga una copia coerente dei dati. Non è invece necessaria alcuna procedura se tutte le tabelle usano un motore transazionale come InnoDB.

  1. Arresta tutte le operazioni DML (Data Manipulation Language) e DDL (Data Definition Language) sulle tabelle non transazionali nell'istanza database di origine e attendi il loro completamento. Le istruzioni SELECT possono restare in esecuzione.

  2. Scarica e blocca le tabelle nell'istanza database di origine.

  3. Crea una replica di lettura usando uno dei metodi nelle seguenti sezioni.

  4. Verifica lo stato di avanzamento della creazione della replica di lettura utilizzando, ad esempio, l'operazione API DescribeDBInstances. Dopo che la replica di lettura è disponibile, sblocca le tabelle dell'istanza database di origine e ripristina le normali operazioni del database.

Configurazione dei filtri di replica con MySQL

Puoi utilizzare i filtri di replica per specificare quali database e tabelle vengono replicati con una replica di lettura. I filtri di replica possono includere database e tabelle nella replica o escluderli dalla replica.

Di seguito sono riportati alcuni casi d'uso per i filtri di replica:

  • Per ridurre le dimensioni di una replica di lettura. Con il filtro di replica è possibile escludere i database e le tabelle che non sono necessari nella replica di lettura.

  • Per escludere database e tabelle dalle repliche di lettura per motivi di sicurezza.

  • Per replicare database e tabelle diversi per casi d'uso specifici in repliche di lettura diverse. Ad esempio, è possibile utilizzare repliche di lettura specifiche per l'analisi o la condivisione.

  • Per un'istanza DB che ha letto repliche in diversi, per replicare database o tabelle diversi in diversi. Regioni AWS Regioni AWS

Nota

Puoi utilizzare i filtri di replica anche per specificare i database e le tabelle che vengono replicati con un'istanza database MySQL primaria configurata come replica in una topologia di replica in ingresso. Per ulteriori informazioni su questa configurazione, consulta Configurazione della replica della posizione del file di log binario con un'istanza di origine esterna..

Impostazione dei parametri di filtro della replica RDS for MySQL

Per configurare i filtri di replica, impostare i seguenti parametri di filtro replica sulla replica di lettura:

  • replicate-do-db – Replicare le modifiche ai database specificati. Quando si imposta questo parametro per una replica di lettura, vengono replicati solo i database specificati nel parametro.

  • replicate-ignore-db – Non replicare le modifiche ai database specificati. Quando il parametro replicate-do-db è impostato per una replica di lettura, questo parametro non viene valutato.

  • replicate-do-table – Replicare le modifiche alle tabelle specificate. Quando si imposta questo parametro per una replica di lettura, vengono replicate solo le tabelle specificate nel parametro. Inoltre, quando viene impostato il parametro replicate-do-db o replicate-ignore-db, assicurarsi di includere il database che include le tabelle specificate nella replica con la replica di lettura.

  • replicate-ignore-table – Non replicare le modifiche alle tabelle specificate. Quando il parametro replicate-do-table è impostato per una replica di lettura, questo parametro non viene valutato.

  • replicate-wild-do-table – Replicare le tabelle in base ai modelli di nome del database e della tabella specificati. I caratteri jolly % e _ sono supportati. Quando è impostato il parametro replicate-do-db o replicate-ignore-db, assicurarsi di includere il database che include le tabelle specificate nella replica con la replica di lettura.

  • replicate-wild-ignore-table – Non replicare le tabelle in base ai modelli di nomi di database e tabella specificati. I caratteri jolly % e _ sono supportati. Quando è impostato il parametro replicate-do-table o replicate-wild-do-table per una replica di lettura, questo parametro non viene valutato.

I parametri vengono valutati nell'ordine in cui sono elencati. Per ulteriori informazioni sul funzionamento di questi parametri, consulta la documentazione di MySQL:

Per impostazione predefinita, ognuno di questi parametri ha un valore vuoto. In ogni replica di lettura, è possibile utilizzare questi parametri per impostare, modificare ed eliminare i filtri di replica. Quando viene impostato uno di questi parametri, è necessario separare ogni filtro dagli altri con una virgola.

È possibile utilizzare i caratteri jolly % e _ nei parametri replicate-wild-do-table e replicate-wild-ignore-table. Il carattere jolly % corrisponde a un numero qualsiasi di caratteri e il carattere jolly _ corrisponde a un solo carattere.

Il formato di registrazione binaria dell'istanza database di origine è importante per la replica perché determina il record delle modifiche ai dati. L'impostazione del parametro binlog_format determina se la replica è basata su righe o basata su dichiarazione. Per ulteriori informazioni, consulta Configurazione di MySQL RDS per la registrazione binaria MySQL.

Nota

Tutte le istruzioni DDL (Data Definition Language) vengono replicate come istruzioni, indipendentemente dall'impostazione binlog_format dell'istanza database di origine.

Limitazioni di filtro delle repliche per RDS per MySQL

Le seguenti limitazioni si applicano al filtro di replica per RDS per MySQL:

  • Ogni parametro di filtro della replica ha un limite di 2.000 caratteri.

  • Le virgole non sono supportate nei filtri di replica per i valori dei parametri. In un elenco di parametri, le virgole possono essere utilizzate solo come separatori di valori. Ad esempio, ParameterValue='`a,b`' non è supportato, ma ParameterValue='a,b' lo è.

  • Le opzioni MySQL --binlog-do-db e --binlog-ignore-db per il filtro dei log binari non sono supportate.

  • Il filtro delle repliche non supporta le transazioni XA.

    Per ulteriori informazioni, consulta Restrizioni sulle transazioni XA nella documentazione di MySQL.

Esempi di filtri di replica per RDS per MySQL

Per configurare il filtro di replica per una replica di lettura, modificare i parametri di filtro replica nel gruppo di parametri associato alla replica di lettura.

Nota

Non è consentito modificare un gruppo di parametri predefinito. Se la replica di lettura usa un gruppo di parametri predefinito, creare un nuovo gruppo di parametri e associarlo alla replica di lettura. Per ulteriori informazioni sui gruppi di parametri database, consulta Utilizzo di gruppi di parametri.

È possibile impostare i parametri in un gruppo di parametri utilizzando l'API AWS Management Console AWS CLI, o RDS. Per informazioni sull'estensione dei parametri consulta Modifica di parametri in un gruppo di parametri del database. Quando si impostano parametri in un gruppo di parametri, tutte le istanze DB associate al gruppo di parametri utilizzano le impostazioni dei parametri. Se si impostano i parametri di filtro della replica in un gruppo di parametri, assicurarsi che il gruppo di parametri sia associato solo alle repliche di lettura. Lasciare vuoti i parametri di filtro di replica per le istanze database di origine.

Negli esempi seguenti vengono impostati i parametri utilizzando AWS CLI. In questi esempi si imposta ApplyMethod su immediate in modo che le modifiche ai parametri avvengano immediatamente dopo il completamento del comando della CLI. Se si desidera applicare una modifica in sospeso dopo il riavvio della replica di lettura, impostare ApplyMethod su pending-reboot.

Gli esempi seguenti impostano i filtri di replica:

Esempio Inclusione dei database nella replica

Nell'esempio seguente sono inclusi i database mydb1 e mydb2 nella replica.

Per LinuxmacOS, oUnix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"

Per Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
Esempio Inclusione delle tabelle nella replica

Nell'esempio seguente sono incluse le tabelle table1 e table2 nel database mydb1 nella replica.

Per LinuxmacOS, oUnix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"

Per Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
Esempio Inclusione di tabelle nella replica utilizzando caratteri jolly

Nell'esempio seguente sono incluse tabelle con nomi che iniziano con order e return nel database mydb nella replica.

Per LinuxmacOS, oUnix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"

Per Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
Esempio Esclusione di database dalla replica

Nell'esempio seguente vengono esclusi i database mydb5 e mydb6 dalla replica.

Per LinuxmacOS, oUnix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"

Per Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"
Esempio Esclusione di tabelle dalla replica

Nell'esempio seguente vengono escluse dalla replica le tabelle table1 nel database mydb5 e table2 nel database mydb6.

Per LinuxmacOS, oUnix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"

Per Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
Esempio Esclusione di tabelle dalla replica utilizzando caratteri jolly

Nell'esempio seguente vengono escluse le tabelle con nomi che iniziano con order e return nel database mydb7 dalla replica.

Per LinuxmacOS, oUnix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"

Per Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"

Visualizzazione dei filtri di replica per una replica di lettura

È possibile visualizzare i filtri di replica per una replica di lettura nei seguenti modi:

  • Controllare le impostazioni dei parametri di filtro replica nel gruppo di parametri associato alla replica di lettura.

    Per istruzioni, consulta Visualizzazione dei valori dei parametri per un gruppo di parametri del database.

  • In un client MySQL, connettersi alla replica di lettura ed eseguire l'istruzione SHOW REPLICA STATUS.

    Nell'output, i campi seguenti mostrano i filtri di replica per la replica di lettura:

    • Replicate_Do_DB

    • Replicate_Ignore_DB

    • Replicate_Do_Table

    • Replicate_Ignore_Table

    • Replicate_Wild_Do_Table

    • Replicate_Wild_Ignore_Table

    Per ulteriori informazioni su questi campi, consulta Verifica dello stato della replica nella documentazione di MariaDB.

    Nota

    Versioni precedenti di MySQL utilizzate SHOW SLAVE STATUS al posto di SHOW REPLICA STATUS. Se si utilizza una versione MySQL prima della 8.0.23, utilizzare SHOW SLAVE STATUS.

Configurazione della replica ritardata con MySQL

Puoi usare la replica ritardata come strategia per il disaster recovery. Con la replica ritardata puoi specificare il tempo minimo, in secondi, di ritardo della replica rispetto all'origine nella replica di lettura. In caso di emergenza, come ad esempio l'eliminazione accidentale di una tabella, completa la seguente procedura per risolvere velocemente il problema:

Nota
  • Su RDS per MySQL 8,0, la replica ritardata è supportata per MySQL 8.0.28 e versioni successive. In RDS for MySQL 5.7, la replica ritardata è supportata per MySQL 5.7.44 e versioni successive.

  • Utilizza le procedure archiviate per configurare la replica ritardata. Non puoi configurare la replica ritardata con AWS Management Console, the o l' AWS CLI API Amazon RDS.

  • Su RDS for MySQL 5.7.44 e versioni successive di MySQL 5.7 e RDS for MySQL 8.0.28 e versioni successive 8.0, è possibile utilizzare la replica basata su identificatori di transazione globali (GTID) in una configurazione di replica ritardata. Se si utilizza la replica basata su GTID, scegliere la stored procedure mysql.rds_start_replication_until_gtid invece della mysql.rds_start_replication_until. Per ulteriori informazioni sulla replica basata su GTID, consultare Utilizzo della replica basata su GTID.

Configurazione della replica ritardata durante la creazione della replica di lettura

Per configurare la replica ritardata per eventuali repliche di lettura future create da un'istanza database, esegui la stored procedure mysql.rds_set_configuration con il parametro target delay.

Per configurare le replica ritardata durante la creazione della replica di lettura
  1. Utilizzando un client MySQL, connettersi all'istanza database MySQL che sarà l'origine delle repliche di lettura come l'utente master.

  2. Eseguire la procedura archiviata mysql.rds_set_configuration con il parametro target delay.

    Ad esempio, eseguire la seguente procedura archiviata per specificare che la replica è ritardata per almeno un'ora (3.600 secondi) per le repliche di lettura create dall'istanza database corrente.

    call mysql.rds_set_configuration('target delay', 3600);
    Nota

    Dopo aver eseguito questa procedura memorizzata, qualsiasi replica di lettura creata utilizzando l'API AWS CLI o Amazon RDS viene configurata con una replica ritardata del numero di secondi specificato.

Modifica della replica ritardata per una replica di lettura esistente

Per modificare la replica ritardata per una replica di lettura esistente, esegui la stored procedure mysql.rds_set_source_delay.

Per modificare la replica ritardata per una replica di lettura esistente
  1. Utilizzando un client MySQL, connettersi alla replica di lettura come utente master.

  2. Usa la procedura archiviata mysql.rds_stop_replication per arrestare la replica.

  3. Eseguire la procedura archiviata mysql.rds_set_source_delay.

    Ad esempio, eseguire la seguente stored procedure per specificare che la replica sulla replica di lettura è ritardata per almeno un'ora (3600 secondi).

    call mysql.rds_set_source_delay(3600);
  4. Usare la procedura archiviata mysql.rds_start_replication per avviare la replica.

Definire una posizione per arrestare la replica su una replica di lettura

Dopo aver arrestato la replica sulla replica di lettura, puoi avviare la replica e poi arrestarla in corrispondenza della posizione del file di log binario specificato utilizzando la procedura archiviata mysql.rds_start_replication_until.

Per avviare la replica su una replica di lettura e arrestare la replica in corrispondenza di una posizione specifica
  1. Utilizzando un client MySQL, connettersi all'istanza database MySQL di origine come utente master.

  2. Eseguire la procedura archiviata mysql.rds_start_replication_until.

    L'esempio seguente avvia la replica e replica le modifiche fino a raggiungere la posizione 120 nel file di log binario mysql-bin-changelog.000777. In caso di disaster recovery, presumere che la posizione 120 si riferisca al momento immediatamente precedente l'errore.

    call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);

La replica si arresta automaticamente quando viene raggiunto il punto di arresto. Viene generato il seguente evento RDS: Replication has been stopped since the replica reached the stop point specified by the rds_start_replication_until stored procedure.

Promozione di una replica di lettura

Dopo l'arresto della replica, in uno scenario di disaster recovery, puoi promuovere la replica di lettura come nuova istanza database di origine. Per informazioni sulla promozione di una replica di lettura, consulta Promozione di una replica di lettura a istanza database standalone.

Aggiornamento di repliche di lettura con MySQL

Le repliche di lettura sono progettate per supportare query di lettura, ma occasionalmente potrebbe essere necessario eseguire aggiornamenti. Ad esempio, potresti dover aggiungere un indice per ottimizzare i tipi specifici di query che accedono alla replica.

Sebbene sia possibile abilitare gli aggiornamenti impostando il parametro read_only su 0 nel gruppo di parametri database per la replica di lettura, si consiglia di non farlo perché questa operazione può causare problemi se la replica di lettura diventa non compatibile con l'istanza database di origine. Per le operazioni di manutenzione, si consiglia di utilizzare le implementazioni blu/verde. Per ulteriori informazioni, consulta Utilizzo delle implementazioni blu/verde per gli aggiornamenti del database.

Se disabiliti la modalità di sola lettura su una replica di lettura, modifica il valore del parametro read_only impostandolo su 1 il prima possibile.

Utilizzo di implementazioni Multi-AZ di repliche di lettura con MySQL

Puoi creare una replica di lettura da implementazioni Single-AZ o Multi-AZ di istanze database. Puoi usare implementazioni Multi-AZ per migliorare la durabilità e la disponibilità di dati critici, ma non puoi usare l'istanza secondaria Multi-AZ per inviare query di sola lettura. Puoi invece creare repliche di lettura da istanze database Multi-AZ con traffico elevato per l'offload di query di sola lettura. Se viene eseguito il failover dell'istanza di origine di un'implementazione Multi-AZ all'istanza secondaria, tutte le repliche di lettura passeranno automaticamente a usare l'istanza secondaria (ora primaria) come origine della replica. Per ulteriori informazioni, consulta Configurazione e gestione di un'implementazione multi-AZ.

È possibile creare una replica di lettura come istanza database Multi-AZ. Amazon RDS crea una replica di standby in un'altra zona di disponibilità per il supporto del failover per la replica. La creazione della replica di lettura come un'istanza database Multi-AZ non dipende dal fatto che il database di origine sia un'istanza database Multi-AZ.

Utilizzo di repliche di lettura a cascata con RDS per MySQL

RDS per MySQL supporta le repliche di lettura a cascata. Con le repliche di lettura a cascata, puoi dimensionare le letture senza aggiungere sovraccarico all'istanza database RDS per MySQL di origine.

Con le repliche di lettura a cascata, l'istanza database RDS per MySQL invia i dati alla prima replica di lettura della catena. La replica di lettura invia quindi i dati alla seconda replica della catena e così via. Il risultato finale è che tutte le repliche di lettura nella catena includono le modifiche dall'istanza database RDS per MySQL, ma senza sovraccaricare esclusivamente l'istanza database di origine.

È possibile creare una serie di fino a tre repliche di lettura in una catena da un'istanza database RDS per MySQL di origine. Ad esempio, supponi di avere l'istanza database RDS per MySQL mysql-main. Puoi eseguire le operazioni indicate di seguito:

  • A partire da mysql-main, crea la prima replica di lettura nella catena, read-replica-1.

  • Da read-replica-1, crea quindi la successiva replica di lettura nella catena, read-replica-2.

  • Da read-replica-2, crea infine la terza replica di lettura nella catena, read-replica-3.

Non è possibile creare un'altra replica di lettura oltre la terza replica di lettura a cascata nella serie per mysql-main. Una serie completa di istanze da un'istanza database RDS per MySQL di origine fino alla fine di una serie di repliche di lettura a cascata può essere composta al massimo da quattro istanze database.

Affinché le repliche di lettura a cascata funzionino, ogni istanza database RDS per MySQL di origine deve avere i backup automatici attivati. Per abilitare i backup automatici in una replica di lettura, crea prima di tutto la replica di lettura, quindi modificala in modo da abilitare i backup automatici. Per ulteriori informazioni, consulta Creazione di una replica di lettura.

Come per qualsiasi replica di lettura, puoi promuovere una replica di lettura appartenente a una cascata. La promozione di una replica di lettura all'interno di una catena di repliche di lettura rimuove la replica dalla catena. Ad esempio, supponi di voler spostare parte del carico di lavoro fuori dall'istanza database mysql-main in una nuova istanza usata solo dal reparto contabile. Facendo riferimento alla catena di tre repliche di lettura dell'esempio, decidi di promuovere read-replica-2. La catena verrà modificata come segue:

  • La promozione read-replica-2 rimuove l'istanza dalla catena di replica.

    • Ora è un'istanza database completa di lettura/scrittura.

    • Continua a replicare su read-replica-3, proprio come prima della promozione.

  • L'istanza mysql-main continua a venire replicata su read-replica-1.

Per ulteriori informazioni sulla promozione delle repliche di lettura, consulta Promozione di una replica di lettura a istanza database standalone.

Monitoraggio delle repliche di lettura MySQL

Per le repliche di lettura MySQL, puoi monitorare il ritardo di replica in Amazon CloudWatch visualizzando la metrica Amazon RDS. ReplicaLag Il parametro ReplicaLag segnala il valore del campo Seconds_Behind_Master del comando SHOW REPLICA STATUS.

Nota

Versioni precedenti di MySQL utilizzate SHOW SLAVE STATUS al posto di SHOW REPLICA STATUS. Se si utilizza una versione MySQL prima della 8.0.23, utilizzare SHOW SLAVE STATUS.

Le cause comuni del ritardo di replica per MySQL sono le seguenti:

  • Interruzione della connessione di rete.

  • Scrittura su tabelle con indici diversi su una replica di lettura. Se il parametro read_only è impostato su 0 sulla replica di lettura, la replica può interrompersi se la replica di lettura diventa incompatibile con l'istanza database di origine. Dopo aver eseguito operazioni di manutenzione sulla replica di lettura, consigliamo di ripristinare il parametro read_only a 1.

  • Uso di un motore di storage non transazionale come MyISAM. La replica è supportata solo per il motore di storage InnoDB su MySQL.

Quando il parametro ReplicaLag è 0, la replica ha raggiunto l'istanza del database di origine. Se il parametro ReplicaLag restituisce -1, la replica non è attualmente attiva. ReplicaLag = -1 equivale a Seconds_Behind_Master = NULL.

Avvio e arresto della replica con repliche di lettura MySQL

Puoi arrestare e riavviare il processo di replica in un'istanza database Amazon RDS chiamando le stored procedure di sistema mysql.rds_stop_replication e mysql.rds_start_replication. Puoi procedere in questo modo quando esegui la replica tra due istanze Amazon RDS per operazioni a esecuzione prolungata, come la creazione di indici di grandi dimensioni. Devi arrestare e avviare la replica anche durante l'importazione o l'esportazione di database. Per ulteriori informazioni, consulta Importazione dei dati in un database Amazon RDS MariaDB o MySQL con tempi di inattività ridotti e Esportazione di dati da un'istanza database MySQL tramite la replica.

Se la replica viene arrestata per più di 30 giorni consecutivi, manualmente o a causa di un errore di replica, Amazon RDS termina la replica tra l'istanza database di origine e tutte le repliche di lettura. Questo avviene per evitare requisiti di storage maggiori sull'istanza database di origine e tempi di failover prolungati. L'istanza database della replica di lettura continua a essere disponibile. Tuttavia, la replica non può essere ripresa, perché i log binari richiesti dalla replica di lettura vengono eliminati dall'istanza database di origine una volta terminata la replica. Puoi creare una nuova replica di lettura per l'istanza database di origine per ristabilire la replica.

Risoluzione dei problemi relativi a una replica di lettura MySQL

Per le istanze database MySQL, in alcuni casi le repliche di lettura presentano errori o incoerenze (o entrambi) dei dati tra la replica di lettura e la sua istanza database di origine. Questo problema si verifica quando alcuni eventi log binario (binlog) o log redo InnoDB non vengono scaricati durante un errore della replica di lettura o dell'istanza database di origine. In questi casi, elimina e ricrea manualmente le repliche di lettura. Puoi ridurre le possibilità che si verifichi una situazione di questo tipo impostando i seguenti valori dei parametri: sync_binlog=1 e innodb_flush_log_at_trx_commit=1. Tali impostazioni potrebbero ridurre le prestazioni, per cui ti consigliamo di testare il loro impatto prima di implementare le modifiche nell'ambiente di produzione.

avvertimento

Nel gruppo di parametri associato all'istanza database di origine, consigliamo di mantenere i valori di questi parametri: sync_binlog=1 e innodb_flush_log_at_trx_commit=1. Questi parametri sono dinamici. Se non vuoi utilizzare queste impostazioni, ti consigliamo di impostare temporaneamente tali valori prima di eseguire qualsiasi operazione sull'istanza database di origine che potrebbe causarne il riavvio. Queste operazioni includono, a titolo esemplificativo ma non esaustivo, il riavvio, il riavvio con failover, l'aggiornamento della versione del database e la modifica della classe di istanza database o della relativa archiviazione. Lo stesso suggerimento si applica alla creazione di nuove repliche di lettura per l'istanza database di origine.

Il mancato rispetto di questa guida aumenta il rischio che le repliche di lettura presentino errori o incoerenze dei dati (o entrambe) tra la replica di lettura e la sua istanza database di origine.

Le tecnologie di replica per MySQL sono asincrone. Per questo motivo, devi occasionalmente aspettarti incrementi del parametro BinLogDiskUsage per l'istanza database di origine e del parametro ReplicaLag per la replica di lettura. Ad esempio, può verificarsi un elevato volume di scrittura in parallelo nell'istanza database di origine. Al contrario, le operazioni di scrittura nella replica di lettura vengono serializzate usando un singolo thread di I/O, causando un ritardo tra l'istanza di origine e la replica di lettura. Per ulteriori informazioni sulle repliche di sola lettura, consulta le informazioni dettagliate sull'implementazione di repliche nella documentazione di MySQL.

Puoi ridurre il ritardo tra gli aggiornamenti di un'istanza database di origine e i successivi aggiornamenti della replica di lettura in diversi modi, ad esempio:

  • Dimensionando una replica di lettura in modo che dimensioni di storage e classe dell'istanza database siano equivalenti all'istanza database di origine.

  • Assicurandoti che le impostazioni dei parametri nei gruppi di parametri database usati dall'istanza database di origine e dalla replica di lettura siano compatibili. Per ulteriori informazioni e un esempio, consulta la discussione sul parametro max_allowed_packet più avanti in questa sezione.

Amazon RDS monitora lo stato delle repliche di lettura e aggiorna il campo Replication State dell'istanza della replica di lettura con il valore Error se la replica viene arrestata per qualsiasi motivo. Un possibile esempio è quando query DML in esecuzione nella replica di lettura sono in conflitto con gli aggiornamenti eseguiti nell'istanza database di origine.

Puoi esaminare i dettagli dell'errore associato generato dal motore MySQL visualizzando il campo Replication Error. Vengono generati anche eventi che indicano lo stato della replica di lettura, inclusi RDS-EVENT-0045, RDS-EVENT-0046 e RDS-EVENT-0047. Per ulteriori informazioni sugli eventi e sulla sottoscrizione a essi, consulta Utilizzo della notifica degli eventi di Amazon RDS. Se viene restituito un messaggio di errore MySQL, verifica il numero di errore nella documentazione dei messaggi di errore MySQL.

Un problema comune che può provocare errori di replica si verifica quando il valore del parametro max_allowed_packet per una replica di lettura è minore del parametro max_allowed_packet per l'istanza database di origine. Il parametro max_allowed_packet è un parametro personalizzato che puoi impostare in un gruppo di parametri database. Utilizza max_allowed_packet per specificare la dimensione massima del codice DML che può essere eseguito nel database. In alcuni casi, il valore max_allowed_packet nel gruppo dei parametri database associato alla replica di lettura è minore del valore max_allowed_packet nel gruppo dei parametri database associato all'istanza database di origine. In questi casi, il processo di replica può generare l'errore Packet bigger than 'max_allowed_packet' bytes e interrompere la replica. Per correggere l'errore, impostare l'istanza database di origine e la replica di lettura in modo che utilizzino i gruppi di parametri database con gli stessi valori del parametro max_allowed_packet.

Altre situazioni comuni che possono causare errori di replica includono le seguenti:

  • Scrittura in tabelle su una replica di lettura. In alcuni casi, potrebbe essere necessario creare indici su una replica di lettura che sono diversi dagli indici nell'istanza database di origine. In tal caso, imposta il parametro read_only su 0 per creare gli indici. Se scrivi in tabelle sulla replica di lettura, questa operazione potrebbe comportare l'interruzione della replica se la replica di lettura diventa incompatibile con l'istanza database di origine. Dopo aver eseguito attività di manutenzione sulla replica di lettura, ti consigliamo di ripristinare il parametro read_only su 1.

  • Utilizzo di un motore di storage non transazionale come MyISAM. Le repliche di lettura richiedono un motore di storage transazionale. La replica è supportata solo per il motore di storage InnoDB su MySQL.

  • Utilizzo di query non deterministiche non sicure come SYSDATE(). Per ulteriori informazioni, consulta la pagina relativa alla determinazione delle istruzioni sicure e non sicure nel log binario.

Se decidi di poter ignorare un errore con certezza, puoi completare la procedura descritta nella sezione Ignorare l'errore di replica corrente. In caso contrario, puoi prima eliminare la replica di lettura. Quindi crea un'istanza utilizzando lo stesso identificatore istanze DB in modo che l'endpoint resti lo stesso di quello della replica di lettura precedente. Quando un problema relativo alla replica viene risolto, il campo Replication State (Stato di replica) cambia in replicating (replica in corso).