La canción de la semana
Escuchala mientras lees los artículos del blog

May 24
GNU/Linux Mysql tiene asociadas dos horas horarias, una es global y otra por conexión. Su valor por defecto coincide con la zona horaria del servidor donde mysql esté en ejecución. Esto se corresponde con el valor de timezone SYSTEM. Para poder saber el valor de zonas horarias en una conexión basta con lanzar esta consulta:

mysql> SELECT @@global.time_zone,@@session.time_zone,NOW();

La primera columna es el time_zone de nuestro servidor y el segundo el de nuestra conexión. La tercera columna de la fecha y hora actuales de acuerdo con el valor de timezone de nuestra conexión (si, la 2ª columna)

Para poder modificarla según el manual online de mysql basta con ejecutar:

mysql> SET time_zone = timezone;

Siendo timezone una cadena que se debe corresponder con una zona horaria instalada en nuestro sistema. Sin embargo si ejecutas esta consulta es muy probable que te de un error, diciendo que desconoce esta zona horaria.

Por ejemplo

mysql> SET time_zone = 'UTC';
1298 Unknown or incorrect time zone: 'UTC'

Como es esto posible, ¿mysql no sabe nada sobre esta zona horaria universal?. En mi sistema GNU/Linux (Debian). Las zonas horarias están a modo de archivo (filosofía UNIX) en /usr/share/zoneinfo. Y de un rápido vistazo se puede ver que, como no, UTC es una de las zonas horarias definidas.

Esto es porque a pesar de lo que dice el manual de mysql debemos introducir la zonas horarias que hay instaladas en nuestro sistema en mysql. Para hacer esto tenemos que ir a una shell y ejecutar:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

¡Además sería preciso ejecutar periódicamente esta instrucción pues las zonas horarias pueden sufrir modificaciones!

Después de hacer esto ya podriamos ejecutar

mysql> SET time_zone = 'UTC';
Query OK, 0 rows affected (0.00 sec)

Ahora si que podemos ejecutar

mysql> SELECT @@global.time_zone,@@session.time_zone,NOW()\G

************************** 1. row **************************

@@global.time_zone: SYSTEM

@@session.time_zone: UTC

NOW(): 2010-05-24 15:24:31

1 row in set (0.00 sec)



Y podemos comprobar que la hora se ha modificado con la zona horaria seleccionada. Recuerda que esto es por conexión o sea que cuando vuelvas a conectarte a tu servidor mysql verás nuevamente la hora de la zona horaria del sistema

Para cambiar esto y tener de manera global esta configuración de zona horaria habría que arrancar el servidor mysql con la opción --default_timezone=timezone_name de mysqld_safe.

El servidor mysql también almacena además de las dos zonas horarias que comentamos (global y por conexión) la zona horaria del servidor donde se aloja. Lo almacena en la variable system_time_zone. También puedes modificar esto con la opción --timezone=timezone_name de mysqld_safe o con la variable de entorno TZ antes de lanzar el servidor myql. O en el archivo de configuración de mysql introducir la siguiente linea:

default-time-zone='timezone'

Ya en tiempo de ejecución puedes modificar la zona horaria global del servidor. Pero si reinicias el servidor perdería estos cambios. Basta ejecutar con el usuario root la siguiente consulta:

mysql> SET GLOBAL time_zone = timezone;

Publicado por Abraham Covelo

0 Referencias

  1. www.dbrunas.com.ar

    PingBack

  2. www.dbrunas.com.ar

    PingBack

0 Comentarios

Mostrar comentarios como(Plano | Hilos)
  1. No hay comentarios

Añadir comentario


Encerrando entre asteriscos convierte el texto en negrita (*palabra*), el subrayado es hecho así: _palabra_.
Smilies normales como :-) y ;-) son convertidos en imágenes.
Direcciones e-mail no serán mostradas y sólo serán utilizadas para notificaciones a través de esa vía