Ao restaurar um Backup noutro site, pode ocorrer um erro que diga:
“Could not restore query. MySQL has returned the error code 1118, with message ‘Row size too large (> 8126)'”
Ou em alternativa,
“Your server reached the maximum row size of the table”
Este problema é causado por o InnoDB ter atingido o tamanho máximo de linha e não conseguir armazenar mais dados.
Contents
Causa raiz
A causa raiz deste problema é que o motor de base de dados MySQL/MariaDB (InnoDB) tem um limite máximo de tamanho de linha. Quando esse limite é excedido, o motor de base de dados não consegue armazenar mais dados nessa linha. Este limite é tipicamente atingido ao tentar importar grandes conjuntos de dados ou quando a estrutura da tabela inclui grandes campos VARCHAR.
Passos gerais para resolver o erro Row Size Too Large
Geralmente, os passos para resolver isto são:
- Alterar os campos da tabela para TEXT ou BLOB em vez de usar VARCHAR grandes.
- Alterar o ROW_FORMAT da tabela para DYNAMIC.
- Definir o innodb_strict_mode como off.
Como estes passos envolvem alterações na configuração do servidor e na estrutura das tabelas WordPress, geralmente não são recomendados devido ao potencial de perda de dados e outros problemas.
Usar um filtro para que o restauro do Backup funcione
O nosso objetivo é importar os dados SQL do ficheiro de Backup para o site atual. Para alcançar esse objetivo, desativamos o innodb_strict_mode durante o processo de restauro.
Quando este erro ocorre, podes adicionar o código abaixo a um Must-Use plugin (MU-plugin) para desativar o innodb_strict_mode:
<?php
add_filter('wpstg.backup.restore.innodbStrictModeOff', '__return_true');Instruções passo a passo
- Liga-te ao teu site WordPress via FTP ou File Manager no painel de controlo do Hosting.
- Navega até à pasta
wp-content/mu-plugins. Se a pastamu-pluginsnão existir, cria-a. - Dentro da pasta
mu-plugins, cria um novo ficheiro PHP. Podes dar-lhe qualquer nome, por exemplo,disable-innodb-strict-mode.php. - Edita o ficheiro PHP recém-criado e adiciona o seguinte código:
<?php
add_filter('wpstg.backup.restore.innodbStrictModeOff', '__return_true');- Guarda e fecha o ficheiro. Agora, este código vai correr em cada carregamento de página, garantindo que o
innodb_strict_modeestá desativado durante o processo de restauro. - Volta a tentar o processo de restauro a partir do teu Plugin de Backup. O erro já não deve ocorrer.
Nota importante
Esta é uma solução temporária para contornar o limite de tamanho de linha do MySQL durante o processo de restauro. Não é uma solução permanente para o problema, pois ter o innodb_strict_mode desativado pode levar a potenciais problemas de integridade dos dados. Após o processo de restauro, considera remover o MU-plugin ou desativar o filtro e consulta um especialista em base de dados para uma solução mais permanente para o problema do limite de tamanho de linha.