Como posso solucionar o erro "HA_ERR_RECORD_FILE_FULL do MySQL" ao usar o Amazon RDS para MySQL?

5 minuto de leitura
0

Recebi o seguinte erro ao tentar gravar em uma instância de banco de dados do MySQL do Amazon Relational Database Service (Amazon RDS): "Error_code: 1114; erro de manipulador HA_ERR_RECORD_FILE_FULL" Como posso resolver esse erro?

Breve descrição

Esse erro geralmente ocorre em réplicas de leitura que causam falha na replicação ou quando a tabela na qual os dados são gravados está cheia. Esse erro também pode ter uma das seguintes causas:

  1. A tabela que está enviando a mensagem de erro é uma tabela do mecanismo MEMÓRIA, e a tabela atingiu seu tamanho máximo.
  2. A tabela é uma tabela do mecanismo MyISAM e atingiu o tamanho máximo do ponteiro.
  3. A tabela usa o mecanismo InnoDB e o arquivo tablespace do InnoDB está cheio.
  4. A instância de banco de dados do Amazon RDS ficou sem espaço em disco.
  5. A tabela atingiu o limite de tamanho do arquivo.

Para obter mais informações sobre os mecanismos de armazenamento compatíveis com o Amazon RDS, consulte mecanismos de armazenamento compatíveis com o MySQL no Amazon RDS.

Resolução

A tabela do mecanismo MEMÓRIA atingiu seu tamanho máximo

Confirme se a tabela do mecanismo MEMÓRIA atingiu seu tamanho máximo executando um comando semelhante ao seguinte e verificando o valor do mecanismo:

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

Se o valor da variável data_length na saída for maior que o valor da variável max_data_length, a tabela atingiu seu tamanho máximo. Essa é a causa da mensagem de erro.

Você pode resolver esse erro aumentando o tamanho do parâmetro max_heap_table_size no grupo de parâmetros personalizados associado à sua instância de banco de dados. Para obter mais informações, consulte criar um grupo de parâmetros de banco de dados. Certifique-se de não exceder o limite de memória da classe da instância de banco de dados que se baseia na classe da instância de banco de dados que você usa. Para obter mais informações sobre a memória disponível para uma instância de banco de dados, consulte ](https://aws.amazon.com/rds/instance-types/)Tipos de instância do Amazon RDS[.

A tabela do mecanismo MyISAM atingiu o tamanho máximo do ponteiro

Confirme se a tabela do mecanismo MyISAM atingiu o tamanho máximo do ponteiro executando um comando semelhante ao seguinte e verificando o valor do mecanismo:

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

Você pode resolver esse erro usando o comando ALTER TABLE para alterar o tamanho máximo da tabela existente:

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

Opcionalmente, você pode alterar o limite de tamanho padrão para todas as tabelas MyISAM. Em seguida, defina o parâmetro myisam_data_pointer_size em seu grupo de parâmetros de banco de dados personalizado como um valor maior.

O arquivo tablespace do InnoDB está cheio

O tamanho máximo de tablespace para uma tabela InnoDB é de quatro bilhões de páginas (16 TB).

Você pode particionar tabelas em vários arquivos tablespace para tabelas maiores que 1 TB. Você pode usar diferentes tipos de particionamento, como RANGE, LIST e HASH, para particionar sua tabela com base no seu caso de uso. Por exemplo, você pode truncar os dados antigos com base no ano em que os criou ou criar partições separadas para cada ano. Para obter mais informações, consulte Limites de tamanho de arquivo do MySQL e a documentação do MySQL para particionamento.

Importante: teste minuciosamente o impacto que o particionamento pode ter em sua aplicação antes de implementar as alterações em um ambiente de produção.

Você pode converter uma tabela existente em uma tabela particionada usando uma instrução alter table semelhante à seguinte:

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

Observação: a conversão de uma tabela existente em uma tabela particionada não recupera o espaço alocado para o tablespace do InnoDB. Para recuperar o espaço do InnoDB, consulte como resolver problemas com minha instância de banco de dados do MySQL do Amazon RDS que está usando mais armazenamento do que o esperado?

A instância de banco de dados do Amazon RDS está sem espaço em disco

Se a instância de banco de dados do Amazon RDS estiver no estado STORAGE_FULL, você receberá o erro HA_ERR_RECORD_FILE_FULL. Para resolver esse erro, adicione mais espaço de armazenamento à sua instância de banco de dados. Para obter mais informações, consulte Instância de banco de dados do Amazon RDS ficando sem espaço de armazenamento.

Opcionalmente, você pode monitorar o espaço de armazenamento disponível para a instância de banco de dados usando a métrica FreeStorageSpace do Amazon CloudWatch. Para obter mais informações, consulte a visão geral do monitoramento do Amazon RDS. Você também pode assinar a notificação de eventos do Amazon RDS de baixo armazenamento para receber uma notificação quando sua instância de banco de dados consumir mais de 90% do armazenamento alocado. Para obter mais informações, consulte categorias de eventos e mensagens de eventos do Amazon RDS.

A tabela atingiu o limite de tamanho do arquivo

Observação: algumas instâncias de banco de dados existentes têm um limite inferior. Por exemplo, as instâncias de banco de dados do MySQL criadas antes de abril de 2014 têm um limite de tamanho de arquivo e de tabela de 2 TB. Esse limite de tamanho de arquivo de 2 TB também se aplica a instâncias de banco de dados ou réplicas de leitura criadas a partir de snapshots de banco de dados capturados antes de abril de 2014, independentemente do momento de criação da instância de banco de dados.

Se você tiver uma instância de banco de dados com um limite de tamanho menor, você pode realizar um dump do MySQL de seus dados usando mysqldump. Em seguida, importe os dados em uma nova instância de banco de dados que tenha um limite maior.


Informações relacionadas

Como resolver problemas que ocorrem quando as instâncias de banco de dados do Amazon RDS ficam sem armazenamento?