Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Atualizar o modo SQL no MySQL


O MySQL alterou o valor padrão da variável sql_mode desde lançamentos anteriores que está quebrando o código existente em várias aplicações. Este tutorial explica como alterar o sql_mode de acordo com os recursos do aplicativo. Ele também fornece as etapas para preservar esse valor na reinicialização do servidor.



Observações :Você também pode seguir os tutoriais do MySQL - Como instalar o MySQL 8 no Ubuntu, Como remover completamente o MySQL do Ubuntu e aprender consultas básicas de SQL usando o MySQL.



O valor padrão da variável sql_mode no MySQL 8 é mostrado abaixo.


# Default - sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION



No meu caso a opção ONLY_FULL_GROUP_BY está quebrando o código, portanto, vou removê-lo para demonstração finalidade .


Atualizar diretamente




Podemos atualizar diretamente o valor de sql_mode usando os comandos como mostrado abaixo.


# Login
mysql -u root -p

# Globally
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

# Session
SET SESSION sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";



O valor sql_mode será alterado usando as consultas mencionadas acima. O problema é que a variável recupera seu valor padrão na reinicialização do servidor. Podemos preservar o valor como mostrado na próxima seção.


Atualizar permanentemente




Podemos preservar o valor de sql_mode atualizando my.cnf Arquivo. A localização desse arquivo difere com base no ambiente e na versão do servidor. Os locais mais comuns desse arquivo incluem/etc/my. cnf , /etc/mysql /meu.cnf e /usr /etc/my.cnf . Também pode estar no caminho local do usuário ~/.my.cnf . No meu sistema com Ubuntu 18.04 LTS e MySQL 8, encontrei este arquivo em /etc/mysql /meu.cnf .



No Linux Mint 18 , o local do arquivo é /usr /meu.cnf . Você também pode pesquisar o arquivo usando o comando conforme mostrado abaixo.


# Search the default config
mysqld --verbose --help | grep -A 1 "Default options"

# Output
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf



O servidor MySQL examinará os locais mencionados acima para as configurações padrão tanto no nível do sistema quanto no nível local. Atualize o arquivo my.cnf conforme mostrado abaixo. Eu usei o editor nano para demonstração finalidade .


# Update my.cnf
sudo nano /etc/mysql/my.cnf

# Scroll down and update the file as shown below

...
...
# # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"



Agora salve o arquivo e saia do editor. Certifique-se de incluir [mysqld] acima da variável.



Reinicie o servidor MySQL para definir o valor da variável sql_mode conforme configurado por nós no arquivo my.cnf como mostrado acima.




# Using init
sudo /etc/init.d/mysqld restart
# OR
sudo /etc/init.d/mysql restart

# Using service
sudo service mysql restart

# Using systemd
sudo systemctl restart mysqld.service
# OR
sudo systemctl restart mysql


Resumo




Neste tutorial, atualizamos o valor da variável MySQL sql_mode e também o preservou permanentemente na reinicialização do servidor.