Me encantan los factores desencadenantes por una razón: simplemente funcionan. Odio los desencadenantes por una razón: cuando no funcionan, olvídate de intentar depurar. Oh la dulce frustraciónDepuración de MySQL Triggers
Básicamente, quiero ver LA consulta de actualización, eliminación, inserción, etc. que se ejecutó. Quiero ver esa consulta ... en algún lugar, en mi terminal o en un registro, exactamente cómo y cuándo MySQL lo ejecuta, y posiblemente cualquier salida/error correspondiente. Pensamientos/hacks?
Estoy intentando depurar una consulta de actualización con algunas combinaciones y lo que no. Mis consultas son mucho más complejas, pero para abreviar, he aquí un ejemplo.
DELIMITER |
CREATE TRIGGER ireallyhateyourightnow AFTER UPDATE ON watch_this_table
FOR EACH ROW BEGIN
IF (OLD.my_value != NEW.my_value) THEN
update
my_table
set
my_column = NEW.my_value;
END IF;
END|
DELIMITER ;
Aquí hay un contexto adicional que puede ayudar a influir en una sugerencia o respuesta. Una vez más, estoy menos interesado en la semántica/sintaxis y más interesado en ver a MySQL ejecutar la consulta, pero, por supuesto, estoy abierto a cualquier cosa en este momento.
- Strace no funciona/muestra la consulta.
- Entorno no replicado PERO si los registros de bin muestran declaraciones de desencadenante, ciertamente voy a configurar esto.
- ¿Muestra "show full processlist" muestra la ejecución del disparador y/o las sentencias ejecutadas dentro (nunca las veo después de ejecutar show full processlist tan rápido como perl puede ejecutarlo pero me podría estar perdiendo)?
- El registro de consulta general no muestra estas consultas (ciertamente no el registro de errores).
- No estoy usando alias (nunca más).
- Sin errores de sintaxis al crear el desencadenador.
- La instrucción IF funciona.
- Cuando inserto los NUEVOS valores en una tabla "prueba/temperatura" y ejecuto manualmente la consulta de actualización, funciona (incluso llegué a insertar toda la consulta de actualización)
- No puedo mostrar usted la consulta, pero como acabo de mencionar, funciona cuando corro manualmente si eso ayuda.
- He eliminado todos los caracteres erróneos, pestañas, retornos de carro, nuevas líneas, etc.
- El socket de MySQL solo mostraría conexión/datos locales, pero no el funcionamiento interno de MySQL, creo.
- Los registros de MyISAM so INNODB no son una opción
- Parece que lsof no mostró ninguna otra utilidad.
- Estoy usando MySQL 5.0.77 en CentOS 5.5.
Sí, el paso hacia aparece en gris. ¿Presumiblemente porque es una prueba? – Justin
El comando 'Entrar' debe estar activo desde el código de procedimiento almacenado. ¿Ha seguido las instrucciones paso a paso (Cómo: Iniciar la depuración del desencadenador)? – Devart
¡Gracias Devart! Muy buen pedazo de software. – Justin