2016-06-15 20 views
1

一部のシステムにいくつかのデータベースクエリを直接行っている人がいます。MySQL対話型クエリのログ

バイナリクライアントmysqlを使用して実行されたすべてのクエリは、対話的に/手作業で行われたすべてのクエリ、または失敗したセキュアなsyslogサーバにログします。私は

がどのように私はそれを達成でき5.6.31 Debianのジェシー、およびOracleのMySQLを使用しています

+1

私はあなたがクライアントソフトウェアでフィルタリングすることはできませんが、唯一の選択肢はすべてのクエリを記録すること、またはクエリを遅くすることだけです。 (もちろん、サーバーが接続を受け取ると、キーボードで入力したか、SQLが以前に生成されたかを知る方法がありません。) –

+0

ありがとう@ÁlvaroGonzález;過去に私は可能な解決策を見出していたことを忘れていましたが、MySQL 5.7がまだベータ版だった頃には、私はそれに答えました。 –

答えて

0

MySQL 5.7から正しく検出されたので、syslogにログするオプションが追加されました。あなたは上記の持っているよう

代わりにコマンドにエイリアスを作成するには、代わりに

[mysql] 
syslog 

のようにあなたの/etc/mysql/my.cnf/etc/mysql/conf.d/

内のファイルのいずれかの[mysql]セクションにsyslogを追加することができ、このもlogwatchに簡単に統合できます。

2

MySQL 5.7以降では、mysqlコマンドは--syslogオプションを受け入れます。そこで、テストシステムをMySQL 5.7にアップグレードしました。 私はMySQL 5.7 Reference Manual - mysql Loggingからmysqlからmysql --syslog

をエイリアスを行います

のsyslogロギング特性

--syslogオプションが指定されている場合、MySQLはシステムロギングファシリティへのインタラクティブステートメント を書き込みます。メッセージのログには、次のような特徴があります( )。

ログは "情報"レベルで発生します。これは、Unix/Linux syslog機能でsyslogの場合は LOG_INFOの優先順位に、Windowsイベントログでは EVENTLOG_INFORMATION_TYPEに対応します。ロギング機能の設定については、 システムのマニュアルを参照してください。

メッセージサイズは1024バイトに制限されています。ユーザが未知である場合 -

SYSTEM_USER

システムのユーザー名(ログイン名)または:

メッセージは、これらの 値が続く識別子はmysqlclientから成ります。

MYSQL_USER

MySQLユーザ名(--userオプションで指定)または - ユーザーが不明である場合。

CONNECTION_ID:

クライアント接続識別子。これは、セッション内の CONNECTION_ID()関数の値と同じです。

DB_SERVER

サーバーホストまたは - ホストが不明の場合。

DB

デフォルトのデータベースまたは - 何のデータベースが選択されていない場合。

クエリー

ログされたステートメントのテキスト。

ここでは、Linuxで--syslogを使用して生成される出力のサンプルを示します。この 出力は読みやすいように書式設定されています。実際に記録された各メッセージは、 が1行です。

3月7日12時39分二十五秒myhostのあるmysqlclient [20824]:SYSTEM_USER: 'オスカー' MYSQL_USER 'my_oscar'、CONNECTION_ID:23、DB_SERVER: '127.0.0.1'、 DB: ' - '、 QUERY: 'USEテスト' DB_SERVER: '127.0.0.1'、DB: 'test'、QUERY: 'SHOW'、 'MY_OSCAR'、CONNECTION_ID:23、
DB_SERVER: '127.0.0.1'テーブル;

+1

エイリアスを作成する代わりに、 '/ etc/mysql/my.cnf'ファイルまたは'/etc/mysql/conf.d/'のファイルの' [mysql] 'セクションに' syslog'を追加することができます – Alasdair

+0

@ Alasdair答えを加えてください、私はそれを受け入れます。 –