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à.
Risoluzione di un problema relativo alla replica My SQL read
Per le istanze My SQL DB, in alcuni casi le repliche di lettura presentano errori di replica o incongruenze di dati (o entrambi) tra la replica di lettura e la relativa istanza DB 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 My sono asincrone. SQL 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 nella documentazione di MySQL, consulta Dettagli sull'implementazione della replica.
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 di replica delle repliche di lettura e aggiorna il Replication State
campo dell'istanza di replica di lettura per indicare Error
se la replica si interrompe per qualsiasi motivo. Un esempio potrebbe essere se DML le query eseguite sulla replica di lettura sono in conflitto con gli aggiornamenti effettuati sull'istanza DB di origine.
È possibile esaminare i dettagli dell'errore associato generato dal SQL motore My 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 delle notifiche di RDS eventi di Amazon. Se viene restituito il messaggio Il mio messaggio di SQL errore, consulta il numero di errore nella documentazione Il mio messaggio SQL di errore
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. Si utilizza max_allowed_packet
per specificare la dimensione massima del DML codice che può essere eseguito sul 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
su0
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 parametroread_only
su1
.-
Utilizzando un motore di archiviazione non transazionale come My. ISAM Le repliche di lettura richiedono un motore di storage transazionale. La replica è supportata solo per il motore di archiviazione InnoDB su My. SQL
-
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 per for My RDS SQL. 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).