是否可以记录特定查询?
我在一场比赛中遇到了一些意外退出的比赛。匹配可以退出的唯一方法是,如果 UPDATE 查询将“matchStatus”的值连续设置为 2。是否可以记录所有执行此操作的查询?在这种情况下,你是怎么做的?
例如
$query = "UPDATE active_matches SET matchStatus = '2' WHERE match_id='$match_id'";
谢谢
在您的my.conf
文件中添加该行
log = /var/log/mysql/someLog.log
重新启动 mysqld,您将在此处放置这些查询的日志。
稍后您可以根据需要从日志文件中简单地 grep 值:
grep 'UPDATE active_matches' someLog.log
使用 *UPDATE active_matches* 匹配所有行并输出,显然,如果您想检查其他任何内容,您可以更改模式。
另一种解决方案,实现起来稍微复杂一些,但可能更适合您的需求,也可能不适合您的需求,它是创建一个日志表,触发器在执行此类更新查询时将条目插入其中:
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 ;