Como desactivar o modo MySQL Strict

Alguns Conteúdo Sistemas de gestão como Typo, Contao, Contenido ou outros sistemas têm problemas com o MySQL 5.1 disponível no Modo Restrito. Esta tem sido a configuração padrão desde a versão 5.7.

Para que também se possa utilizar estes sistemas CMS ainda existe a possibilidade de desligar o modo estrito do lado do servidor. Claro, isto só é recomendado condicionalmente.

O que faz o modo Strict?

O modo rigoroso do MySQL/MariaDB controla como valores inválidos ou ausentes são tratados nas consultas de alteração de dados, incluindo declarações INSERT, UPDATE, e CREATE.

Inválido ou ausente Dados levam a avisos ou erros quando a consulta SQL é executada. Se o modo Scrict estiver desligado, as consultas inválidas ou os valores em falta são ajustados e é emitido um simples aviso. Isto pode levar a resultados inesperados.

Um exemplo seria um limite de caracteres. Se o modo Strict for desligado, o excesso de caracteres será cortado para que ele se ajuste.

Porque é que isto só ocorre com alguns sistemas CMS?

Só se pode especular. Provavelmente o código é tão extenso que ninguém o consegue descobrir. Em um sistema de gerenciamento de conteúdo trabalham muitas pessoas, às vezes trazem funções individuais que depois não são mais vistas durante anos. Desde que não ocorram problemas graves, não é assim tão mau.

Com um sistema como o whmcs, que também é afetado, a situação é bem diferente. Se dados importantes forem truncados, ocorrerão atribuições incorretas. Isto pode ser problemático no caso de um acordo.

Onde podem ser aplicadas estas instruções?

As instruções referem-se a sistemas Linux com MySQL 5.6/5.7 ou MariaDB 10.1 e mais alto onde o Modo Estrito está activo.

O acesso de raiz é necessário para fazer as alterações. As nossas instruções referem-se sempre a Centos Linux. Com outras distribuições, os arquivos de configuração podem ser localizados em outros diretórios.

Passo 1: Criar backups

Ao editar arquivos, você deve sempre fazer um backup. É demasiado fácil apagar algo involuntariamente.

cp -a /etc/my.cnf{,.strict.bak}

O comando cria um ficheiro my.cnf.strict.bak a partir do my.cnf no mesmo directório.

Passo 2: Desactivar o modo MySQL Strict

O arquivo normalmente não contém sql_mode=... então a seguinte linha deve ser adicionada à seção [mysqld] :

sql_mode=""".

Passo 3: Reinicie o serviço MySQL

Após a edição do arquivo, o serviço deve ser reiniciado para aplicar as alterações.

systemctl restart mariadb

Após o reinício do serviço, você pode verificar a configuração executando o seguinte comando. Aqui como exemplo com a senha em um Servidor Plesk. Alternativamente com a raiz e a senha.

mysql -uadmin -p`cat /etc/psa/.psa.shadow` -e "SELECT @@sql_mode;"

O seguinte retorno deve então aparecer:

+————+

| @@sql_mode |

+————+

| |

+————+

Artigos actuais