tldr;
Cree un esquema "compartido" al que todos sus usuarios tengan acceso EXECUTE, cree un SPROC que modifique la zona horaria de la sesión y modifique el parámetro init_connect MySQL para llamarlo.
Como Ryan Weir señaló en su excelente answer in a duplicate question esto probablemente se debe evitar si es posible. Sin embargo, si eres como yo y quieres implementarlo por comodidad y cordura, tomé la solución de Ryan e hice algunas modificaciones.
Si tiene múltiples usuarios configurados en MySQL con permisos variables, simplemente poner el comando sproc en el esquema mysql puede tener problemas.Para resolver esto, creé un nuevo esquema llamado "compartido" y otorgué a todos mis usuarios el acceso EXECUTE a este esquema. Luego creé el siguiente procedimiento almacenado.
DROP PROCEDURE IF EXISTS shared.store_time_zone;
CREATE PROCEDURE shared.`store_time_zone`()
IF NOT (POSITION('[email protected]' IN CURRENT_USER()) = 1) THEN
SET SESSION time_zone = 'US/Pacific';
END IF;
prefiero set 'de Estados Unidos/Pacífico' para manejar el horario de verano pero debe probar esto para asegurarse de que su instancia de MySQL reconoce por primera vez. Simplemente ejecute la siguiente consulta SET SESSION time_zone = 'US/Pacific';
para asegurarse de que funciona. Para buscar su zona horaria ejecutar SELECT * FROM mysql.time_zone_name;
En este punto, recomiendo probar los permisos antes de ir a modificar el grupo de parámetros y romper todo potencialmente. Simplemente conéctese a la base de datos (preferiblemente con un usuario que tiene permisos de bajo nivel y/o se usa comúnmente) y ejecute las siguientes consultas.
CALL shared.store_time_zone;
select now();
Esperemos que no haya ningún error y aparezca la hora correcta.
A continuación deberá modificar el parámetro init_connect en el Grupo de Parámetros DB que está utilizando su instancia RDS. Puede hacerlo en la consola web de RDS, a través de la API o la utilidad de línea de comandos. Si utiliza la línea de comandos que se verá así:
$ rds-modify-db-parameter-group PARAMGROUP --parameters "name=init_connect, value='CALL shared.store_time_zone', method=immediate"
Si lo haces a través de la consola web a continuación, sólo tiene que cambiar el valor de init_connect.
CALL shared.store_time_zone
Regrese a su instancia de RDS en la consola web y desplace el panel de detalles hasta el Grupo de parámetros de la base de datos. Debería decir algo como (aplicar) o (sincronizar). Una vez que esté (sincronizado), pruebe todo para asegurarse de que no haya problemas.
Si en este momento se encuentra con problemas y la necesidad de revertir las cosas entonces me recomiendan establecer el valor init_connect a algo inofensivo como:
SET SESSION time_zone = '-00:00';
el establecimiento de nuevo al espacio en blanco es imposible de hacer desde la consola Web . Ver este hilo para más detalles acerca de por qué la solución de uno can't restore the empty value for the DB parameter
¿Qué tipo de base de datos es esto? MySQL? – Michael