programadas - El evento Mysql no funciona
habilitar mysql event scheduler status (8)
Los eventos son ejecutados por el planificador, que no se inicia de manera predeterminada. Usando SHOW PROCESSLIST
es posible verificar si está iniciado. Si no, ejecuta el comando
SET GLOBAL event_scheduler = ON;
para ejecutarlo.
He agregado el siguiente evento de prueba simple en mi base de datos mysql a través de phpmyadmin:
CREATE DEFINER=`root`@`localhost` EVENT `my_event`
ON SCHEDULE EVERY 1 MINUTE STARTS ''2013-05-27 00:00:00''
ON COMPLETION NOT PRESERVE ENABLE DO
BEGIN
UPDATE `test` SET `name`="z";
END
Mi entorno es mac + MAMP Pro. Estoy esperando cambiar todas las filas en mi tabla de ''prueba'' con el nombre ''z'' en un minuto. Pero no sucedió así.
¿Tengo que hacer algo adicional para que mis eventos comiencen a funcionar?
Salida de "SHOW PROCESSLIST":
Gracias.
Me acabo de dar cuenta de que en MariaDB, después de agregar un evento (en mi caso, fue el primero), debes reiniciar el programador de eventos
SET GLOBAL event_scheduler = OFF;
y entonces
SET GLOBAL event_scheduler = ON;
para hacer que realmente ponga el planificador en estado "en espera de activación".
Me gustaría agregar a este hilo. Dejé mi base de datos en otro servidor y, como resultado, el definidor de mi evento no tenía dicha concesión definida para el usuario. Actualicé mi definidor con
ALTER DEFINER=''root''@''localhost'' EVENT event.name COMMENT '''';
Asegúrese de que su definidor tenga los PRIVILEGIOS correctos.
Para aquellos que se preguntan cómo habilitarlo de forma predeterminada al inicio, agregue lo siguiente a su archivo de configuración (my.ini, my.cnf):
#Event scheduler can be set to 1 (On), 0 (Off), or Disabled
event_scheduler=1
En este caso, se requiere reiniciar el servicio, por lo que si desea una interrupción mínima, agregue esto al archivo de configuración y luego ejecute el SQL:
SET GLOBAL event_scheduler = ON;
De esta forma, se ejecutará para el proceso actual, y si el servidor se reinicia, seguirá funcionando.
Tenga en cuenta que esto no funciona si el event_scheduler se configuró en deshabilitado. En ese caso, la única opción es reiniciar el servicio.
Recuerde agregar '' Commit '', después de '' DO BEGIN '' o '' DO ''. Funciona para mí después de eso.
Si desea que su event_scheduler
automáticamente cada vez que se reinicie el servidor mysql, en cualquier lugar bajo la sección [mysqld]
del archivo my.ini
o my.cnf
que encuentre en /etc/mysql
, debe colocar
[mysqld]
# turning on event_scheduler
event_scheduler=ON
reinicie mysql para verificar si se está ejecutando (¡en terminal de línea de comandos!)
sudo service mysql restart
luego verifica tu lista de procesos
SHOW PROCESSLIST
puedes verificar si tus eventos se están ejecutando al verificar la última vez que se ejecutaron
SELECT * FROM INFORMATION_SCHEMA.events
Tratar
SET GLOBAL event_scheduler = ON;
DELIMITER $$
CREATE DEFINER=`root`@`db01` EVENT `PRICEALERT_STATUS`
ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE)
DO BEGIN
// Your Query
END $$
DELIMITER ;
Verifique si el event_scheduler está Encendido: ejecute el siguiente comando:
SHOW PROCESSLIST;
event_scheduler
una tabla / entradas, debe buscar una entrada con User event_scheduler
y Command Daemon
:
Id User Host db Command Time State Info
22870 event_scheduler localhost /N Daemon 23 Waiting for next activation /N
O bien, también puede verificar usando el siguiente comando:
SELECT @@global.event_scheduler;
El resultado debe estar en ON
, de lo contrario, desactívelo (obtendrá 0
para el comando), como se indica en la siguiente sección.
Si no tiene ninguna entrada (como la anterior), puede iniciar el planificador de eventos con el siguiente comando:
SET GLOBAL event_scheduler = ON;
Una vez hecho esto, puede verificar si se ha ejecutado correctamente utilizando el comando SHOW PROCESSLIST
, como se mencionó anteriormente.