是否可以记录特定查询?
我在游戏中有一些意外退出的比赛。并且匹配可以退出的唯一方法是UPDATE查询将“matchStatus”的值设置为连续的2。是否可以记录执行此操作的所有查询?在那种情况下,你是怎么做到的?
例如
$query = "UPDATE active_matches SET matchStatus = '2' WHERE match_id='$match_id'";
由于
答案 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 ;