Este artigo fornece instruções detalhadas sobre a resolução de vários problemas da base de dados MySQL, incluindo erros de escrita, falhas na criação da base de dados, problemas de compatibilidade e erros de agrupamento de tabelas.
Erros de escrita na base de dados
Se o servidor de destino estiver no MySQL 5.7+ e o registo do Duplicador mostrar erros como: ERROR database error write '...', então, poderá ter problemas ao executar o MySQL em modo estrito. Se for esse o caso, tente as seguintes opções:
Mensagens de erro comuns
- ERRO DE BD: Não foi possível obter a consulta CREATE para a tabela wp_XYZ. Informação incorrecta no ficheiro: './database_store/wp_XYZ.frm'
- ERRO NA BASE DE DADOS: Esta função não tem nenhuma das opções DETERMINISTIC, NO SQL, ou READS SQL DATA na sua declaração e registo binário...
- Existe um espaço de tabela para a tabela xxx. Descarte o espaço de tabela antes de IMPORTAR
Solução 1
Para erros gerais de escrita, há algumas opções a considerar. Experimente-as na ordem em que são apresentadas. A solução mais rápida é a OPÇÃO A, no entanto, para que a opção seja permanente no servidor, considere a OPÇÃO B.
OPÇÃO A
- Ativar o modo Avançado do instalador.
- Em Opções " Base de dados " Definições de extração, selecione Personalizado para as definições de Modo e introduza NO_ENGINE_SUBSTITUTION na caixa de texto.
- Continue e conclua o processo de instalação.
OPÇÃO B
- Abra este ficheiro no notepad: C:\wamp64\bin\mysql\mysql5.7.9\my.ini
- Adicione a linha final ao ficheiro:
[mysqld]
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION - Reinicie o servidor MySQL (os anfitriões de orçamento poderão ter de contactar o seu fornecedor de alojamento).
Se as OPÇÕES A/B não funcionarem, faça o seguinte:
- Faça SSH no seu servidor como root e crie o ficheiro /etc/mysql/conf.d/disable_strict_mode.cnf.
- Abra o ficheiro e introduza estas duas linhas:
[mysqld]
sql_mode=IGNORE_SPACE, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION - Reinicie o MySQL executando:
$ sudo service mysql restart
Solução 2
Resolver problemas de escrita para criar consultas relacionadas com a seguinte mensagem de erro:
EXCEPTION message: DB ERROR: Não foi possível obter a consulta CREATE para a tabela wp_XYZ. Informação incorrecta no ficheiro: './database_store/wp_XYZ.frm'
- Execute uma reparação da base de dados no seu sítio WordPress atual.
- Na Etapa 2 do instalador " separador Tabelas " Desmarque o sinalizador Importar para a tabela que está a gerar o problema.
- Em alternativa, ao criar uma cópia de segurança no Passo 1, exclua a tabela em questão de ser adicionada.
Solução 3
Resolver problemas de escrita para funções relacionadas com a seguinte mensagem de erro:
ERRO DA BASE DE DADOS: Esta função não tem nenhum dos DETERMINISTIC, NO SQL, ou READS SQL DATA na sua declaração e o registo binário está ativado (pode querer utilizar a variável lesssafe log_bin_trust_function_creators)
Execute o seguinte na consola MySQL OU adicione o seguinte ao ficheiro de configuração mysql.ini:
SET GLOBAL log_bin_trust_function_creators = 1;
log_bin_trust_function_creators = 1
A definição relaxa a verificação de funções não determinísticas. As funções não determinísticas são funções que modificam dados (ou seja, têm instruções de atualização, inserção ou eliminação).
Para mais informações, consulte aqui. Para obter detalhes completos, consulte este artigo.
Se o seu fornecedor de alojamento não permitir as definições acima referidas, contacte-o diretamente ou considere a possibilidade de trabalhar com o programador que escreveu as funções e peça-lhe que as reavalie para funcionarem corretamente com os requisitos do motor da base de dados.
Solução 4
Durante uma instalação, se receber uma mensagem como a mostrada abaixo, é provável que tenha de eliminar um dos ficheiros tablename.ibd, que não foi corretamente eliminado durante o processo de remoção da tabela da base de dados.
Existe um espaço de tabela para a tabela xxx. Descarte o espaço de tabela antes de IMPORTAR
Para obter uma lista completa de todas as soluções possíveis para este problema, consulte este artigo do stack-overflow.
Falha na criação da base de dados
É recebida uma mensagem do tipo "Não foi possível criar base de dados..." quando se tenta utilizar a ação criar base de dados.
Solução
"Não foi possível criar base de dados..." significa normalmente que o seu alojamento não suporta a criação de bases de dados através de código PHP. Neste caso, terá de criar uma base de dados através das ferramentas que eles fornecem.
Na maioria dos alojamentos pode fazê-lo através do cpanel. Contacte o seu anfitrião para obter instruções sobre como criar uma nova base de dados. Os utilizadores do Duplicator Pro devem ser capazes de usar o separador de ligação ao cPanel para entrar nas suas contas cPanel e criar a base de dados através da interface do instalador do cPanel. Em alternativa, pode utilizar os modos Importar ou Substituir.
Problemas de compatibilidade
Para evitar problemas de incompatibilidade da base de dados, certifique-se de que as versões da base de dados entre os servidores de compilação e de instalação são tão próximas quanto possível. Se a cópia de segurança tiver sido criada numa versão de base de dados mais recente do que aquela em que está a ser instalada, poderá ter problemas.
É melhor certificar-se de que o servidor onde o instalador está a ser executado tem o mesmo número de versão ou superior ao do servidor onde foi construído. Se as versões maior e menor forem iguais ou próximas (por exemplo, [5.7 para 5.6]), então a migração deve funcionar sem problemas. Um par de versões de [5.7 a 5.1] é mais suscetível de causar problemas, a menos que tenha uma configuração muito simples. Se as versões estiverem muito distantes, trabalhe com o seu fornecedor de alojamento para atualizar o motor MySQL neste servidor.
Solução 1: FORMATO UTF8MB4
Se a versão atual do servidor MySQL detectada for inferior a 5.5.3 (lançamento em 8 de abril de 2010), o suporte para tabelas utf8mb4 não funcionará. O formato utf8mb4 só é suportado no servidor MySQL 5.5.3+. É altamente recomendável atualizar a sua versão do servidor MySQL neste servidor para ser mais compatível com as versões recentes do WordPress e evitar problemas com erros de instalação.
Solução 2: UTF8 INPUTS
Se forem detectados caracteres não-ASCII como parte da cadeia de ligação da base de dados e o servidor MySQL não estiver configurado corretamente, não será possível estabelecer ligação. Este problema pode ser resolvido actualizando a configuração my.ini do MySQL.
Adicione a definição character_set_server=utf8 em [mysqld] e reinicie o servidor de base de dados. Este valor pode apenas precisar de ser descomentado.
Solução 3: MARIA-DB SETUPS
Se uma versão de 10.N.N aparecer, então a distribuição da base de dados é uma variante MariaDB do MySQL. Embora as distribuições sejam muito próximas, existem algumas diferenças subtis. Alguns sistemas operativos irão reportar a versão como "5.5.5-10.1.21-MariaDB" mostrando a correlação de ambas. Por favor, visite a página online MariaDB versus MySQL - Compatibilidade para mais detalhes.
Observe que algumas mensagens são simplesmente avisos. É altamente recomendável continuar com o processo de instalação e monitorar de perto o arquivo installer-log.txt junto com o relatório de instalação encontrado na etapa 3 do instalador. Certifique-se de que procura quaisquer avisos/avisos/erros nestes locais para validar que o processo de instalação não detectou quaisquer erros. Se forem encontrados quaisquer problemas, visite as páginas de FAQ e consulte a pergunta "Como resolver erros da base de dados ou avisos gerais no relatório de instalação?"
Solução 4: CRIAR TABELAS
A criação de tabelas no MySQL e no MariaDB é muito próxima; no entanto, existem algumas pequenas diferenças que podem, por vezes (não é comum), causar problemas. Para ver as diferenças entre cada um, consulte os dois conjuntos de documentação aqui:
Como pode ver, não são uma correspondência de um para um (o MariaDB tem opções que o MySQL não tem), por isso quando tenta executar uma consulta CREATE que funcionou no MariaDB mas tem alguma opção de tabela que o MySQL não suporta, pode falhar. A correção atual é remover as opções de tabela ofensivas do DB dump fazendo uma pesquisa e substituição manual no ficheiro.
Problemas de agrupamento de tabelas
Como resolver os erros de modo de compatibilidade e "Agrupamento desconhecido"?
Existem 4 formas de resolver este problema. A opção 1 é a forma mais rápida, fácil e segura de resolver este problema.
Visão geral do agrupamento desconhecido
Um erro "Unknown collation" significa que o servidor MySQL que está a ser instalado (servidor de destino) é mais antigo do que o motor MySQL em que criou a cópia de segurança. Uma mensagem de erro como:
ERROR database error write 'Unknown collation: 'utf8mb4_unicode_ci'
será acionado porque a versão do MySQL que está a ser utilizada não suporta este formato de tabela. Pode ver a comparação da versão do servidor MySQL clicando no botão "Testar Ligação" no instalador ou visualizando o ficheiro installer-log.txt. O resultado será algo parecido com:
VERSÃO MYSQL: Este servidor: 5.4.22 - Servidor de compilação: 5.7.10
Opção 1 - Atualizar o software da base de dados
A forma mais limpa e segura de corrigir o problema "Unknown Collation" é atualizar o seu servidor MySQL de destino para a mesma versão ou para uma versão mais recente do que aquela em que a cópia de segurança foi criada. Os erros de formato mais comuns incluem:
- utf8mb4_unicode_ci: É necessário o servidor MySQL 5.5.3+.
- utf8mb4_unicode_520_ci: É necessário o servidor MySQL 5.6+.
Melhor solução: A melhor e mais fácil forma de resolver este problema é pedir ao seu anfitrião para mover a sua conta para um servidor MySQL que suporte o tipo de agrupamento de que necessita (ver exemplo acima). Basta fornecer-lhes a mensagem de erro que está a receber e eles podem ajudá-lo a mudar para o servidor correto.
A maioria dos anfitriões não actualizará o servidor atual em que o seu site se encontra; no entanto, devem ser capazes de mover facilmente a sua conta para um servidor mais recente. Esta é uma prática muito comum e um bom anfitrião deve ser capaz de o ajudar muito facilmente.
Se estiver a executar uma versão inferior a 5.5.3, está a utilizar uma versão muito desatualizada do servidor MySQL. A versão 5.5.3 foi lançada em 2010, o que significa que a versão do servidor MySQL que está a utilizar é ainda mais antiga. Encorajamos vivamente os utilizadores a trabalharem com os seus anfitriões para utilizarem software atualizado para melhorar a segurança e o desempenho e para se manterem em conformidade com as actualizações do núcleo do WordPress. Não deixe que um host de baixa qualidade use software desatualizado no seu site.
Opção 2 - Ativar a verificação herdada
No instalador, no passo 2, em opções, existe uma definição intitulada "Legado" e com a etiqueta "Aplicar suporte de retrocesso de agrupamento legado para tipos de agrupamento desconhecidos". Selecione esta caixa de verificação para aplicar um agrupamento legado de recurso e continue com a instalação.
Ao criar uma tabela de base de dados, a versão do MySQL que está a ser utilizada pode não suportar o tipo de agrupamento da versão do MySQL onde a tabela foi criada. Neste cenário, o instalador irá voltar a um tipo de agrupamento legado para tentar criar a tabela. Este valor só deve ser verificado se receber um erro ao instalar a base de dados.
Por exemplo, se a cópia de segurança foi construída no MySQL 5.7 com um tipo de agrupamento de tabelas 'utf8mb4_unicode_520_ci' e está a correr o instalador num motor MySQL 5.5 mais antigo que não suporta esse tipo então será lançado um erro. Se esta opção estiver selecionada então a configuração legacy irá tentar utilizar 'utf8mb4_unicode_520', depois 'utf8mb4', depois 'utf8' e assim sucessivamente até ficar sem opções. Embora esta opção funcione na maioria das configurações, a opção 1 acima ainda é a opção recomendada e mais segura.
Opção 3 - Executar o modo de compatibilidade
O modo de compatibilidade Mysqldump ajuda a produzir uma saída de script SQL de base de dados que é mais compatível com outros sistemas de base de dados ou com servidores MySQL mais antigos.
O Duplicador suporta vários modos de compatibilidade, todos eles apenas disponíveis quando o modo mysqldump está ativado no plug-in. O modo de compatibilidade pode ser ativado ao criar uma cópia de segurança utilizando a opção mysqldump.
O Duplicador só permite o modo de compatibilidade durante o processo de criação. Ele não é permitido durante a criação de modelos ou com agendamentos. A razão para esta configuração é desencorajar a utilização destas definições e corrigir o verdadeiro problema - que é atualizar o seu servidor de base de dados.
Actualizações da base de dados: O Modo de Compatibilidade só deve ser usado como último recurso. A abordagem recomendada para resolver problemas da base de dados é certificar-se de que ambos os servidores da base de dados estão actualizados e muito próximos em termos de números de versão (ver Opção 1). Por exemplo, se o servidor de base de dados onde criou a cópia de segurança for 5.7.5, o servidor de base de dados onde instalou a cópia de segurança deve estar, pelo menos, no intervalo 5.7.N. Peça ao seu anfitrião ou administrador do servidor para atualizar o servidor MySQL para uma versão mais recente, se possível. Se o seu anfitrião não atualizar para uma versão recente, peça-lhe para atualizar para a versão mais recente possível.
Preservação de dados: Embora existam várias soluções alternativas na Internet (Opção 4) que explicam como pode modificar o ficheiro SQL atual ou utilizar o modo de compatibilidade mysqldump, a principal questão subjacente é que armazenou os dados num formato e agora vai convertê-los. Estas técnicas podem levar à perda de dados e a problemas de incompatibilidade mais tarde. A abordagem correta é atualizar o software MySQL.
Considere experimentar ambos os modos:
- Atualmente, o Duplicator suporta dois modos diferentes: Mysqldump e PHP Mode (ver Configurações " Opção Backups).
- Se estiver a deparar-se com problemas de caracteres e a ficar sem opções, pode considerar tentar construir a base de dados em ambos os modos para ver se um ou outro resolve os problemas.
Opção 4 - Configurações manuais
Estas opções destinam-se a utilizadores avançados e devem ser executadas com precaução. As opções requerem a atualização do script database.sql ou a atualização dos tipos de agrupamento da tabela da base de dados de origem. Abaixo estão três abordagens diferentes; apenas uma opção é necessária para resolver o problema.
Atualizar base de dados.sql
Para problemas de "agrupamento desconhecido", pode tentar os seguintes passos:
- Extraia o ficheiro zip manualmente.
- Abra o ficheiro database.sql com o bloco de notas e procure e substitua as colações. Por exemplo, pode:
- substituir: 'utf8mb4' por 'utf8'
- substituir: 'utf8_unicode_520_ci' por 'utf8_general_ci'
Experimente sempre estas opções primeiro numa área restrita e nunca num site de produção até se sentir confortável com os resultados.
Em seguida, navegue até ao ficheiro installer.php no servidor e escolha Avançado e selecione "Extração manual".
Isto também pode ser tentado com outros agrupamentos (ou seja, substitua 'collation_type_1' por 'collation_type_2').
Atualizar a base de dados de origem com o código
Esta opção requer que compreenda realmente o seu sistema e que tenha efectuado cópias de segurança antecipadamente. O script permitirá que você altere o agrupamento no servidor de compilação para que ele possa ser suportado pelo servidor de destino. O script completo pode ser visto no Stack Overflow em: http://stackoverflow.com/a/29939906/2808424
Atualizar a base de dados de origem com o IDE
Se não se sentir à vontade para executar o código acima, também pode utilizar um IDE ou uma ferramenta GUI que lhe permita alterar manualmente os agrupamentos de tabelas com instruções SQL ou através de uma interface. Mais uma vez, estas opções requerem que conheça bem o seu sistema e que tenha efectuado cópias de segurança antecipadamente.
Abaixo encontram-se algumas instruções passo a passo fáceis de seguir para atualizar os agrupamentos através de um IDE como o phpMyAdmin:
- phpMyAdmin
- Instruções SQL
- MySQL Workbench
Veja também:
Fornecedores de alojamento recomendados para o Duplicator?
http://dev.mysql.com/downloads/mysql
https://make.wordpress.org/core/2015/04/02/the-utf8mb4-upgrade