Desactivación de las reglas de modos SQL de un sevidor MySQL/MariaDB/Percona
Introducción
Hay una gran diferencia entre usar la desactivación de los modos SQL de un servidor SQL, por necesidad imperiosa, y otra muy distnta de persistir en la creencia de que es lo correcto.
Muchos de los modos SQL, cambia a lo largo de las vidas útiles de una versión de un sistemas de bases de datos, tipo SQL, y esto hace que en el momento más crucial ese cambio:
- Haga inservible, al menos rápidamente, un backup en un escenario de recuperación de desastres.
- No sepueda realziar una migración a un nuevo sistema por incompatibilidad de los datos contenidos.
- Por el fin de soporte de ese workaround que ha sido elminado de la ecuación en la versión nueva.
Consideraciones al Usar sql_mode="":
- Desactivación de Validaciones: Al establecer sql_mode="", se desactivan validaciones como:
-
STRICT_TRANS_TABLES
: Permite que las inserciones y actualizaciones que no cumplen con los requisitos de tipo y tamaño se realicen, lo que potencialmente puede llevar a la corrupción de datos. - NO_ZERO_DATE: Previene la inserción de fechas nulas o cero que suelen considerarse inválidas.
- ONLY_FULL_GROUP_BY: Asegura que las consultas que usan GROUP BY cumplan con las reglas estándar SQL.
- Compatibilidad con PHP: Si estás trabajando con PHP y experimentas problemas con la inserción de datos, a veces desactivar modos restrictivos puede solucionar problemas. Sin embargo, esto puede llevar a que se introduzcan datos erróneos o inconsistencia. Es importante identificar por qué los datos no se estaban insertando correctamente en primer lugar.
- Prácticas Recomendadas: En lugar de desactivar todos los modos, es una buena práctica intentar configurar el sql_mode de manera más específica. Por ejemplo, podrías excluir ciertos modos según sea necesario, en lugar de dejarlo vacío completamente:
sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE"
## Configuración en my.cnf
Para configurar esto en el archivo my.cnf
, puedes agregar o modificar la línea en la sección [mysqld]:
[mysqld]
sql_mode=""
Reiniciar el Servidor
Después de realizar cambios en my.cnf, asegúrate de reiniciar el servidor de MySQL o MariaDB para que los cambios surtan efecto.
systemctl restart mariadb
Comprobación
Acceso a MySQL shell.
MariaDB [(none)]> SHOW VARIABLES LIKE 'sql_mode';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode | |
+---------------+-------+
1 row in set (0.001 sec)
Conclusión
Si decides establecer sql_mode=""
, hazlo con precaución y asegúrate de revisar tu aplicación PHP para asegurarte de que todos los datos que se insertan sean válidos. También sería bueno investigar por qué ocurrían problemas sin establecer esto, ya que podrían haber soluciones más específicas y seguras sin necesidad de desactivar todas las validaciones.
Links interesantes
- Como ejecutar tu acceso a mysql en un Directadmin sin usar root
- Mysql conexión vía socket. Como saber donde está
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.