2012-04-28 88 views
1

是否可以记录特定查询?如何记录特定查询?

我在一场意想不到的比赛中有一些比赛。匹配可以退出的唯一方法是如果UPDATE查询将“matchStatus”的值设置为2连续。是否有可能记录所有这样做的查询?在那种情况下,你如何做到这一点?

e.g

$query = "UPDATE active_matches SET matchStatus = '2' WHERE match_id='$match_id'"; 

感谢

+0

你想让一些文件在你的所有查询中? – 2012-04-28 13:58:19

+0

是的,先生!那会很好 – BlackMouse 2012-04-28 13:59:20

+1

是的,但不是通过任何预制的mysql/php机制 - 用'if($ matchStatus = 2){log query}'类型构造包装你的'$ query = ...'行。 – 2012-04-28 14:00:08

回答

1

另一种解决方案稍微复杂一点,但可能更适合您的需求,但可能并不适合您的需求,它是创建一个日志表,触发器在执行此类更新查询时插入条目:

CREATE TABLE AugitLog (
    `Timestamp` TIMESTAMP, 
    `User`  VARCHAR(16), 
    `Host`  VARCHAR(255), 
    `MatchID` INT 
); 

DELIMITER ;; 

CREATE TRIGGER audit_match_termination AFTER UPDATE ON active_matches FOR EACH ROW 
IF OLD.matchStatus <> 2 AND NEW.matchStatus = 2 THEN 
    INSERT INTO AuditLog VALUES (
    NOW(),       -- timestamp 
    SUBSTRING_INDEX(USER(),'@', 1), -- username 
    SUBSTRING_INDEX(USER(),'@',-1), -- hostname 
    NEW.match_id     -- the match that was terminated 
); 
END IF;; 

DELIMITER ; 
2

里面你my.conf文件中添加一行

log = /var/log/mysql/someLog.log

重启mysqld,你就会有这些查询放在这里的日志。

以后你可以简单的grep值超出日志文件按您的需求:

grep 'UPDATE active_matches' someLog.log匹配与* UPDATE active_matches *和输出,很明显,如果你想查询你可以换着花样的所有行还要别的吗。