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 に答える