Qual é a maneira correta de reverter o modo estrito do Mysql 5.7 para a versão 5.6?

10

Atualizei nosso servidor para o Ubuntu 16, que inclui o Mysql 5.7 e, por padrão, o Strict Mode está ativado (embora não haja entrada para ele em nenhum dos arquivos de configuração).

Estamos tendo problemas para importar bancos de dados que estavam em produção no mysql 5.6 e versões anteriores, e é por causa do modo estrito. Por padrão, aqui está o que está ativado:

STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY

Como posso configurar o mysql 5.7 para funcionar exatamente como no 5.6 ou para que os bancos de dados do 5.6 sejam compatíveis com o 5.7?

user658182
fonte
Tente esta resposta: evento stackoverflow.com/a/34426883/534883 , embora seja para OSX, funcionou para o meu no Ubuntu.
Poço

Respostas:

34

Para desativar o modo SQL estrito, faça o SSH no servidor como roote crie este arquivo:

/etc/mysql/conf.d/disable_strict_mode.cnf

Abra o arquivo e digite 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 com este comando:

sudo service mysql restart

Essa alteração desativa duas configurações do modo SQL STRICT_TRANS_TABLESe ONLY_FULL_GROUP_BYforam adicionadas no MySQL 5.7 e causam problemas para alguns aplicativos mais antigos.

A confirmação do modo SQL restrito está desabilitada

Você pode confirmar que o modo estrito do SQL está desabilitado executando este comando como root:

 sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

Se o modo estrito estiver desativado, você não verá nenhuma saída desse comando.

Se a desativação do modo estrito causar problemas para você, você pode ativá-lo novamente, excluindo esse arquivo e reiniciando o MySQL novamente.

Fonte: Como desabilitar o modo SQL restrito no MySQL 5.7

Bilal
fonte
2
Esta é uma resposta correta e deveria ter sido marcada como aceita.
budhajeewa
Por que executar o comando mysql command retorna mysql: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/disable_strict_mode.cnf at line 1!:?
Abhishek Saini
1
@AbhishekSaini, dê uma olhada neste e este .
Bilal 22/11
1
Esta é uma resposta. Por favor, consulte isso como uma resposta.
Lasitha Benaragama
0

Situado sql_modeem /etc/mysql/mysql.conf.d/mysqld.cnfsem STRICT_TRANS_TABLES.

Adicionar em [mysqld]:

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Rama Shankar Singh
fonte