特定のクエリをログに記録することは可能ですか?
予期せず終了するゲームでいくつかの試合があります。そして、一致を終了できる唯一の方法は、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 ;