tutorial español descargar definicion caracteristicas mysql

español - Cómo hacer que sql-mode="NO_ENGINE_SUBSTITUTION" sea permanente en MySQL my.cnf



mysql wikipedia (10)

Debería ser:

[mysqld] sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

en lugar de

[mysqld] sql_mode="NO_ENGINE_SUBSTITUTION"

luego reinicie el servicio mysqld.

ACTUALIZACIÓN FIJA 1/18/15

Después de actualizar recientemente a MySQL 5.6.27 (desde el repositorio de Ubuntu), esta opción ahora funciona. Así que esto parece haber sido un problema con la versión anterior de MySQL.

PREGUNTA ORIGINAL

Con una nueva actualización a MySQL (5.6.20), las actualizaciones y las inserciones fallan a menos que establezca el modo sql en NO_ENGINE_SUBSTITUTION.

Gracias a la documentation , puedo ejecutar lo siguiente desde mysql terminal y eso soluciona el problema (temporalmente):

SET GLOBAL sql_mode = ''NO_ENGINE_SUBSTITUTION''; SET SESSION sql_mode = ''NO_ENGINE_SUBSTITUTION'';`

Pero la próxima vez que se reinicia MySQL, estos ajustes se pierden.

Así que he intentado hacer eso permanente editando /etc/mysql/my.cnf (en mi servidor estándar que ejecuta Ubuntu 12.04.5 LTS), y agregando las configuraciones de configuración que la documentation dice que deben agregarse:

[mysqld] sql-mode="NO_ENGINE_SUBSTITUTION"

Sintaxis alternativas para la prueba

Solo para fines de prueba, también he probado los siguientes formatos (que no causan errores al reiniciar MySQL, pero no afectan la configuración).

# dash no quotes sql-mode=NO_ENGINE_SUBSTITUTION # underscore no quotes sql_mode=NO_ENGINE_SUBSTITUTION # underscore and quotes sql_mode="NO_ENGINE_SUBSTITUTION"

Nada funciona. Después de reiniciar, esta configuración se pierde y tengo que ejecutar los comandos manualmente nuevamente desde el terminal mysql para que el guardado funcione nuevamente.

Ubicaciones alternativas

  • Sé que se hace referencia a /etc/mysql/my.cnf porque tenemos una replicación definida en este archivo, y eso está funcionando.
  • No hay otra configuración idéntica en este archivo que la sobrescriba.

Obtengo una lista de los archivos de configuración a los que se hace referencia ejecutando esto desde la línea de comandos:

mysqld --help --verbose

Veo una línea que dice:

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

Esta es la ubicación predeterminada que "busca" para los archivos, no significa que haya encontrado un archivo allí, por ejemplo, mi servidor no tiene /etc/my.cnf , /usr/etc/my.cnf o ~/.my.cnf .

Así que parece que mi configuración en /etc/mysql/my.cnf es el único archivo al que hace referencia mysql, y por lo tanto, esta configuración no se sobrescribe.

Conclusión lógica de las pruebas

Lógicamente, entonces, parece que la sintaxis no es correcta o se está ignorando por alguna otra razón. ¿Alguna otra idea?


En Linux Mint 18, el archivo de configuración predeterminado que tiene el conjunto de opciones de sql-mode se encuentra aquí:

/usr/my.cnf

Y la línea relevante es:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Así que puedes establecer allí.

Si no está seguro de qué archivo de configuración tiene dicha opción, puede buscarlo:

$ sudo find / -iname "*my.cnf*"

Y consigue una lista:

/var/lib/dpkg/alternatives/my.cnf /usr/my.cnf /etc/alternatives/my.cnf /etc/mysql/my.cnf.fallback /etc/mysql/my.cnf


Estoy ejecutando WHM 10.2.15-MariaDB. Para deshabilitar permanentemente el modo estricto, primero averigüe qué archivo de configuración prefiere nuestra instalación. Para eso, necesitamos la ubicación del binario:

$ which mysqld /usr/sbin/mysqld

Luego, usamos esta ruta para ejecutar la búsqueda:

$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options" Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

Podemos ver que el primer archivo de configuración favorito es uno en la raíz de la carpeta etc, pero que hay un segundo archivo .cnf oculto - ~ / .my.cnf. Agregar lo siguiente al archivo ~ / .my.cnf deshabilitado permanentemente el modo estricto para mí (debe estar dentro de la sección mysqld):

[mysqld] sql_mode=NO_ENGINE_SUBSTITUTION

Descubrí que agregar la línea a /etc/my.cnf no tuvo ningún efecto aparte de enviarme loco.


La solución es bastante fácil ... Búsquela por un tiempo y resulta que solo tiene que editar 2 archivos de configuración:

  • /usr/my.cnf
  • /etc/mysql/my.cnf

En ambos archivos tendrás que añadir:

[mysqld] ... sql_mode=NO_ENGINE_SUBSTITUTION

Al menos, eso es lo que funciona para 5.6.24-2 + deb.sury.org ~ preciso + 2


Mi problema era que tenía espacios entre las opciones en 5.7.20. Quitándolos para que la línea pareciera

[mysqld] sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


Para mi fue un problema de permiso.

entrar:

mysqld --verbose --help | grep -A 1 "Default options"

[Advertencia] El archivo de configuración de escritura mundial ''/etc/mysql/my.cnf'' se ignora.

Así que intenta ejecutar lo siguiente, y luego reinicia el servidor

chmod 644 ''/etc/mysql/my.cnf''

Le dará acceso a mysql para leer y escribir en el archivo.


Si está utilizando mariadb, debe modificar el archivo mariadb.cnf ubicado en /etc/mysql/conf.d/.

Supuse que las cosas son las mismas para cualquier otra solución basada en my-sql.


Solo para agregar mi configuración a la mezcla, estoy usando MySQL 5.7.8 que tiene las mismas reglas estrictas sql_mode de forma predeterminada.

  • Finalmente calculé lo siguiente trabajando en mi /etc/mysql/my.conf:

    [mysqld] sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

es decir, guión, no subrayado y comillas alrededor del valor.

  • NO tengo otros archivos my.conf que no sean /etc/mysql/my.conf

  • Hay algunos ajustes de configuración adicionales que se están cargando desde /etc/mysql/conf.d/ pero están en blanco.

Y eso parece funcionar para mí.


Su servidor puede leer un my.cnf diferente al que está editando (a menos que lo haya especificado al iniciar mysqld).

De la guía de estudio de certificación MySQL :

El orden de búsqueda incluye dos archivos de opciones generales, /etc/my.cnf y $MYSQL_HOME/my.cnf . El segundo archivo se usa solo si la variable de entorno MYSQL_HOME está establecida. Normalmente, lo transfieres al directorio de instalación de MySQL. (La secuencia de comandos mysqld_safe intenta establecer MYSQL_HOME si no se configura antes de iniciar el servidor). El orden de búsqueda del archivo de opción también incluye ~/.my.cnf (que es el directorio de inicio). Esta no es una ubicación especialmente adecuada para las opciones del servidor. (Normalmente, invoca el servidor como mysql , o como root con una opción --user=mysql . El archivo específico del usuario que lea el servidor dependerá de la cuenta de inicio de sesión desde la que lo invoque, lo que posiblemente lleve a conjuntos inconsistentes de opciones). usado.)

Otra posibilidad es, por supuesto, que su opción de sql-mode se sobrescriba más abajo en el mismo archivo. Las múltiples opciones deben estar separadas por , en la misma línea.

PS: Y necesitas las citas, IIRC. Ahora que lo has probado sin comillas, estoy bastante seguro de que estás editando el archivo incorrecto, ya que MySQL no se inicia cuando hay un error en el archivo de opciones.

PPS: Eché un vistazo a mis archivos de configuración de nuevo, ahí está

[mysqld] sql_mode = "NO_ENGINE_SUBSTITUTION"

y esta funcionando


Woks bien para mí en ubuntu 16.04. ruta: /etc/mysql/mysql.cnf

y pega eso

[mysqld] # # * Basic Settings # sql_mode = "NO_ENGINE_SUBSTITUTION"