web-dev-qa-db-ja.com

MySQLログデータベースと同等のtail -f

アプリケーションログに(MySQL)データベースを使用することにしました(Java logback libを使用するアプリです)。tail -fのようなものを見つけたいと思っています追加されたときに新しい行を表示するデータベース内の特定のテーブルで使用します(tail -fがログファイルで機能する方法と同様)。

12
Nick Spacek

MySQLバイナリロギングをオンにします。次に、mysqlbinlogコマンドを使用して、すべてのデータ変更ステートメントを表示できます。

5
200_success

一部の人が質問を理解していないと思います(または私は理解していません)。 DBに対するクエリをログに記録したくない場合。むしろ、アプリケーションからのログはDBに送られます。ファイルの場合は、ログをテールにすることができます。新しい行が追加されたときに出力されるように、テーブルをどのようにテールするのですか?

時間の経過とともに単調に増加する一意のフィールド(シーケンス番号など)があると想定して、これを処理するための単純なループを作成するのは難しくありません。

current_pos = select max(seq) from table
while true
  new_pos = select max(seq) from table
  if new_pos > current_pos
    select * from table where seq > current_pos
    current_pos = new_pos
  endif
  sleep 1
endwhile
7
Mark Wagner

私たちの多くはあなたの質問を完全に理解していないようです。 "logging database" はどういう意味ですか、これは標準のMySQL用語ではありません。

MySQLを使用 一般クエリログ 。クライアントから受け取った各ステートメントをログに記録します。

次に、my.cnfに log_output = TABLE を設定できます。ファイルは$ mysql_data_directory/general_log.CSVに書き込まれます。あなたはできる tail -fこのファイルは、クエリをリアルタイムで表示します。

3

これが私が使うものです。それは非常に効率的ではありませんが、最も簡単な解決策のようです:

watch "mysql db_name -e '(SELECT * FROM my_table ORDER BY id DESC LIMIT 10) ORDER BY id ASC;'"

2
Jud

あなたはこれを試してみたいかもしれません:

http://www.jetprofiler.com/blog/10/tail--f-table-with-myterm/#comments

それは古く、3年間触れられていませんが、試してみただけで問題なく動作します。 BZRリポジトリのクローンを作成し、READMEを読みます。

1
Duncan Lock

データベースファイル(/var/lib/mysql/database_name/table_name.MY*)でtail -fを使用し、行が読み取られるたびにクエリを実行することで、これを簡単な方法で行うことができます。

1
James L

テイルしたいテーブルにタイムスタンプフィールドを追加することをお勧めします。これにより、簡単なクエリで非常に簡単に目的の結果を得ることができます。

1
John Gardeniers