1

是否可以记录特定查询?

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

例如

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

谢谢

4

2 回答 2

2

在您的my.conf文件中添加该行

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

重新启动 mysqld,您将在此处放置这些查询的日志。

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

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

于 2012-04-28T14:00:58.227 回答
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 ;
于 2012-04-28T14:18:52.293 回答