asy*_*qin 19 mysql logging triggers
需要MySQL的帮助,因为它不是我的强项.所以任何帮助都表示赞赏.
我的网站上存在问题,其中UPDATE或INSERT缺少值.这导致网站上的其他功能出现一些问题,但我无法找到任何类中的UPDATE或INSERT已完成的位置.
有没有什么办法,也许MySQL的触发器,我可以添加到这些表,让我保存的原件或完整的查询UPDATE或INSERT.我尝试过记录,但这适用于整个数据库,它占用了太多的磁盘空间.
提前感谢您的回复.
PS:目前,PHP类有点乱,因为我们还处于开发阶段,因此在更新或插入函数中添加例外将花费太多时间.所以请把重点放在问题的答案上.再次感谢.
Ita*_*dev 36
您可以使用以下语句将当前SQL查询作为字符串获取:
SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID()
Run Code Online (Sandbox Code Playgroud)
所以你需要做的是创建一个TRIGGER在你的表上运行插入和/或更新操作的应该(i)获取当前的sql语句和(ii)将其插入另一个表,如下所示:
DELIMITER |
CREATE TRIGGER log_queries_insert BEFORE INSERT ON `your_table`
FOR EACH ROW
BEGIN
DECLARE original_query VARCHAR(1024);
SET original_query = (SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID());
INSERT INTO `app_sql_debug_log`(`query`) VALUES (original_query);
END;
|
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
您将不得不创建两个触发器 - 一个用于更新,另一个用于插入.触发器将新查询作为字符串插入列中的app_sql_debug_log表中query.
我认为您需要检查数据库服务器的 常规查询日志。
The server ... ... logs each SQL statement received from clients. ... ... Since MySQL 5.1.6 log can be a file or a table.