mysql 8 ERROR 1231 (42000) at line Variable ‘time_zone’

Mysql 8 ERROR 1231 (42000)

En un mundo perfecto las copias de seguridad nunca darían problemas, pero nuestro mundo no es perfecto. Y menos en el ecosistema MySQL/MariaDb/percona etc…

Al tratar de recuperar la copia de seguridad de una tabla que extrajimos de un backup de una base de datos usando nuestro tip Restaurar una base de datos de un backup completo de MySQL nos encontramos con un terrible error:

mysql 8 ERROR 1231 (42000) at line Variable 'time_zone' can't be set to the value of 'NULL'

Te cuento como lo solucione, y que de paso sirve para comprender otros errores que pueden tener el mismo error, y la misma solución.

Análisis

Lo primero que llama la atención es que nos  esta hablando de una variable de MySQL y no no de un error en la estructura de nuestros datos.

Si acudimos la fuente para ver el tipo de error:

Error number: 1231; Symbol: ER_WRONG_VALUE_FOR_VAR; SQLSTATE: 42000

Message: Variable ‘%s’ can’t be set to the value of ‘%s’

Nos aventuramos a ver el estado de las variables de nuestro servidor MySQL

mysql> SHOW VARIABLES LIKE '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CET    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0,01 sec)

Que raro esta todo bien…

Ah… ahora caigo. Al extraer la tabla, con el tip, no incorporé el seteo o configuración original de my mysqldump, lo cual es importante sobre todo cuando trabajamos con fechas basadas en UTC.

Trabajar con UTC es la mejor manera que conozco de evitar problemas a la hora de programar, sobre todo si trabajas con la posibilidad de distintas zonas horarias, o servidor distintos. A nivel programación controlas la zona que tu quieras

Añadir la configuración del backup al inicio y su recuperación al final el del servidor

Los datos los podemos obtener del fichero dump de la base de datos completa.

# Al inicio 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

##############################
# Nuestros datos de backup de la tabla
##############################


# Al final del archivo
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2020-03-15 21:20:33

 

Agradecimientos

Como siempre gracias Unsplash y a Yeo Khee por la imagen que sirve de portada, que edite gracias a Canva

Comparte este articulo en

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax