Come posso risolvere l'errore "MySQL HA_ERR_RECORD_FILE_FULL" quando utilizzo Amazon RDS per MySQL?

5 minuti di lettura
0

Ho ricevuto il seguente errore durante il tentativo di scrittura su un'istanza database MySQL di Amazon Relational Database Service (Amazon RDS): "Error_code: 1114; handler error HA_ERR_RECORD_FILE_FULL". Come posso risolvere questo errore?

Breve descrizione

Questo errore si verifica spesso nelle repliche di lettura che causano il fallimento della replica o quando la tabella su cui sono scritti i dati è piena. Questo errore può anche avere una delle seguenti cause:

  1. La tabella che invia il messaggio di errore è una tabella del motore MEMORY e ha raggiunto la dimensione massima.
  2. La tabella è una tabella del motore MyISAM e ha raggiunto la dimensione massima del puntatore.
  3. La tabella utilizza il motore InnoDB e il file tablespace InnoDB è pieno.
  4. L'istanza database Amazon RDS ha esaurito lo spazio su disco.
  5. La tabella ha raggiunto il limite di dimensione del file.

Per ulteriori informazioni sui motori di archiviazione supportati da Amazon RDS, consulta motori di archiviazione supportati per MySQL su Amazon RDS.

Soluzione

La tabella del motore MEMORY ha raggiunto la dimensione massima

Verifica se la tabella del motore MEMORY ha raggiunto la dimensione massima eseguendo un comando simile al seguente e controllando il valore del motore:

mysql> show table status from database_name like 'table_name'\G

Se il valore della variabile data_length nell'output è maggiore del valore della variabile max_data_length, la tabella ha raggiunto la dimensione massima. Questa è la causa del messaggio di errore.

È possibile risolvere questo errore aumentando la dimensione del parametro max_heap_table_size nel gruppo di parametri personalizzato associato all'istanza database. Per ulteriori informazioni, consulta Creare un gruppo di parametri database. Assicurati di non superare il limite di memoria della classe di istanza database basato sulla classe di istanza database utilizzata. Per ulteriori informazioni sulla memoria disponibile per la tua istanza database, consulta Tipi di istanza Amazon RDS.

La tabella del motore MyISAM ha raggiunto la dimensione massima del puntatore

Verifica se la tabella del motore MyISAM ha raggiunto la dimensione massima del puntatore eseguendo un comando simile al seguente e controllando il valore del motore:

mysql> show table status from database_name like 'table_name'\G

Puoi risolvere questo errore utilizzando il comando ALTER TABLE per modificare la dimensione massima della tabella esistente:

mysql> ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;

Facoltativamente, puoi modificare il limite di dimensione predefinito per tutte le tabelle MyISAM. Quindi, imposta il parametro myisam_data_pointer_size nel tuo gruppo di parametri database personalizzato su un valore più alto.

Il file tablespace InnoDB è pieno

La dimensione massima del tablespace per una tabella InnoDB è di quattro miliardi di pagine (16 TB).

Puoi partizionare le tabelle in più file tablespace per tabelle di dimensioni superiori a 1 TB. Puoi utilizzare diversi tipi di partizionamento, come RANGE, LIST e HASH, per partizionare la tabella in base al tuo caso d'uso. Ad esempio, puoi troncare i vecchi dati in base all'anno di creazione oppure puoi creare partizioni separate per ogni anno. Per ulteriori informazioni, consulta Limiti delle dimensioni dei file MySQL e la documentazione MySQL relativa al partizionamento.

Importante: Testa a fondo l'impatto che il partizionamento potrebbe avere sulla tua applicazione prima di implementare le modifiche in un ambiente di produzione.

Puoi convertire una tabella esistente in una tabella partizionata utilizzando un'istruzione alter table simile alla seguente:

ALTER TABLE table_name
PARTITION BY HASH(id)
PARTITIONS 8;

Nota: La conversione di una tabella esistente in una tabella partizionata non recupera lo spazio allocato per il tablespace InnoDB. Per recuperare lo spazio di InnoDB, consulta In che modo è possibile risolvere i problemi relativi all'istanza DB di Amazon RDS MySQL che utilizza uno spazio di archiviazione maggiore del previsto?

L'istanza database Amazon RDS ha esaurito lo spazio su disco

Se l'istanza database Amazon RDS è nello stato STORAGE_FULL, riceverai l'errore HA_ERR_RECORD_FILE_FULL. Per risolvere questo errore, aggiungi altro spazio di archiviazione all'istanza database. Per ulteriori informazioni, consulta Mancanza di spazio di archiviazione per l'istanza database Amazon RDS.

Facoltativamente, puoi monitorare lo spazio di archiviazione disponibile per l'istanza database utilizzando la metrica Amazon CloudWatch FreeStorageSpace. Per ulteriori informazioni, consulta la Panoramica del monitoraggio dei parametri di Amazon RDS. Puoi anche abbonarti alle notifiche degli eventi Amazon RDS per spazio di archiviazione in esaurimento in modo da ricevere una notifica quando l'istanza database utilizza più del 90% dello spazio di archiviazione allocato. Per ulteriori informazioni, consulta Categorie di eventi Amazon RDS e messaggi di evento.

La tabella ha raggiunto il limite di dimensione del file

Nota: Alcune istanze database esistenti hanno un limite inferiore. Ad esempio, le istanze database MySQL create prima di aprile 2014 hanno un limite di dimensione per file e tabelle di 2 TB. Questo limite di 2 TB di dimensione dei file si applica anche alle istanze database o alle repliche di lettura create da istantanee del database eseguite prima di aprile 2014, indipendentemente dalla data di creazione dell'istanza database.

Se hai un'istanza database con un limite di dimensione inferiore, puoi eseguire un dump MySQL dei tuoi dati usando mysqldump. Quindi, importa i dati in una nuova istanza database con un limite più elevato.


Informazioni correlate

How do I resolve problems that occur when Amazon RDS DB instances run out of storage?