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


12

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

回答:


5

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


あなたが選択した言語で、またはbashでこれを行う方法の例を示すことができますか?
アレクサンダーミルズ

7

質問を理解している人はいないと思います(または理解しません)。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

これはポーリングと呼ばれますが、それほど楽しいものではありません:)。
アレクサンダーミルズ

3

私たちの多くはあなたの質問をよく理解していないようです。「ロギングデータベース」とはどういう意味ですか?これは標準のMySQL用語ではありません。

MySQL General Query Logを使用して、クライアントから受け取った各ステートメントをログに記録します。

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


2

ここに私が使用するものがあります。最も単純なソリューションのようですが、あまり効率的ではありません。

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


1

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


1

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.