如何记录特定查询?

时间:2012-04-28 13:56:26

标签: php mysql

是否可以记录特定查询?

我在游戏中有一些意外退出的比赛。并且匹配可以退出的唯一方法是UPDATE查询将“matchStatus”的值设置为连续的2。是否可以记录执行此操作的所有查询?在那种情况下,你是怎么做到的?

例如

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

由于

2 个答案:

答案 0 :(得分:2)

my.conf文件中添加

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

重新启动mysqld,你将把这些查询的日志放在这里。

稍后您可以根据需要简单地从日志文件中grep值:

grep 'UPDATE active_matches' someLog.log使用* UPDATE active_matches *和输出匹配所有行,显然,如果要检查其他任何内容,可以更改模式。

答案 1 :(得分: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 ;