sql >> Base de Datos >  >> RDS >> Mysql

Actualizar el modo SQL en MySQL

MySQL ha cambiado el valor predeterminado de la variable sql_mode desde versiones anteriores que está rompiendo el código existente en varias aplicaciones. Este tutorial explica cómo cambiar el sql_mode según las características de la aplicación. También proporciona los pasos para conservar este valor en el reinicio del servidor.

Notas :También puede seguir los tutoriales de MySQL:cómo instalar MySQL 8 en Ubuntu, cómo eliminar completamente MySQL de Ubuntu y aprender consultas SQL básicas con MySQL.

El valor predeterminado de la variable sql_mode en MySQL 8 es el que se muestra a continuación.

# 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

En mi caso la opción ONLY_FULL_GROUP_BY está descifrando el código, por lo que lo quitaré para demostración .

Actualizar directamente

Podemos actualizar directamente el valor de sql_mode usando los comandos como se muestra a continuación.

# 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";

El valor de sql_mode se cambiará utilizando las consultas mencionadas anteriormente. El problema es que la variable recupera su valor predeterminado al reiniciar el servidor. Podemos conservar el valor como se muestra en la siguiente sección.

Actualizar permanentemente

Podemos conservar el valor de sql_mode actualizando my.cnf expediente. La ubicación de este archivo difiere según el entorno y la versión del servidor. Las ubicaciones más comunes de este archivo incluyen /etc/my. cnf , /etc/mysql /mi.cnf y /usr /etc/my.cnf . También puede estar en la ruta local del usuario ~/.my.cnf . En mi sistema con Ubuntu 18.04 LTS y MySQL 8, encontré este archivo en /etc/mysql /mi.cnf .

En Linux Mint 18 , la ubicación del archivo es /usr /mi.cnf . También puede buscar el archivo usando el comando como se muestra a continuación.

# 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

El servidor MySQL buscará en las ubicaciones mencionadas anteriormente las configuraciones predeterminadas tanto a nivel del sistema como a nivel local. Actualice el archivo my.cnf como se muestra a continuación. He usado el editor nano para la demostración propósito .

# 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"

Ahora guarde el archivo y salga del editor. Asegúrese de incluir [mysqld] encima de la variable.

Reinicie el servidor MySQL para establecer el valor de la variable sql_mode como lo configuramos nosotros en el archivo my.cnf como se muestra arriba.

# 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

Resumen

En este tutorial, hemos actualizado el valor de la variable MySQL sql_mode y también lo conservó permanentemente en el reinicio del servidor.