Quando gravo em uma instância de banco de dados do MySQL do Amazon Relational Database Service (Amazon RDS) ou em réplicas de leitura, recebo um erro. Na instância de banco de dados Amazon RDS para MySQL, recebo o seguinte: “ERRO 1114 (HY000): The table ‘Table Name’ is full.” Em réplicas de leitura, no campo Last_Error do comando show slave status (Amazon RDS para MySQL 5.7) ou show replica status (Amazon RDS para MySQL 8.0), recebo o seguinte: “Error_code: 1114; handler error HA_ERR_RECORD_FILE_FULL”
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. Os problemas a seguir também causam esse erro:
- A tabela que envia a mensagem de erro é uma tabela do mecanismo MEMÓRIA e atingiu seu tamanho máximo.
- A tabela é uma tabela do mecanismo MyISAM e atingiu o tamanho máximo do ponteiro.
- A tabela usa o mecanismo InnoDB e o arquivo tablespace do InnoDB está cheio.
- A instância de banco de dados do Amazon RDS está sem espaço em disco.
- A tabela atingiu o limite de tamanho do arquivo.
Para obter mais informações, consulte Mecanismos de armazenamento compatíveis com o RDS para MySQL.
Resolução
A tabela do mecanismo MEMÓRIA atingiu seu tamanho máximo
Para confirmar se a tabela do mecanismo MEMÓRIA atingiu seu tamanho máximo, execute um comando semelhante ao exemplo a seguir:
mysql> show table status from database_name like <YourTableName>\G
Se o valor de data_length na saída for maior que o valor de max_data_length, a tabela atingiu seu tamanho máximo.
É possível 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 no Amazon RDS. 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.
A tabela do mecanismo MyISAM atingiu o tamanho máximo do ponteiro
Para confirmar se a tabela do mecanismo MyISAM atingiu o tamanho máximo do ponteiro, execute um comando semelhante ao seguinte:
mysql> show table status from database_name like <YourTableName>\G
É possível 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, é possível 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 para 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). É possível particionar tabelas em vários arquivos tablespace para tabelas maiores que 1 TB. Particione sua tabela por RANGE, LIST e HASH, com base no seu caso de uso. Por exemplo, trunque os dados antigos com base no ano em que foram criados ou crie partições separadas para cada ano. Para obter mais informações, consulte Limites de tamanho de arquivo do MySQL no Amazon RDS e a documentação do MySQL para particionamento.
Importante: antes de implementar mudanças em um ambiente de produção, teste minuciosamente os efeitos que o particionamento pode ter em sua aplicação.
Para converter uma tabela existente em uma tabela particionada, use uma instrução ALTER TABLE semelhante ao exemplo a seguir:
ALTER TABLE table_name
PARTITION BY HASH(id)
PARTITIONS 8;
Observação: ao converter uma tabela existente em uma tabela particionada, você não recupera o espaço alocado para o espaço de tabela do InnoDB. Para recuperar o espaço do InnoDB, consulte Por que minha instância de banco de dados Amazon RDS para MySQL 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.
Opcionalmente, é possível usar a métrica Amazon CloudWatch FreeStorageSpace para monitorar o espaço de armazenamento disponível. Também é possível assinar a notificação de eventos de baixo armazenamento do Amazon RDS. Isso o notifica quando sua instância de banco de dados consome mais de 90% do armazenamento alocado.
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 obtidos antes de abril de 2014. O limite se aplica independentemente de quando você criou a instância de banco de dados.
Se você tiver uma instância de banco de dados com um limite de tamanho menor, use mysqldump para fazer um dump do MySQL em seus dados. 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?