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.
Contenidos
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: 42000Message: 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