web-dev-qa-db-ja.com

MySQLで最後に実行されたクエリを表示する方法

_ all _ サーバーで最後に実行されたクエリを表示するためのクエリ/方法はありますか?

427
FerranB

MySQL> = 5.1.12に恵まれている人のために、あなたは実行時にグローバルにこのオプションを制御することができます:

  1. SET GLOBAL log_output = 'TABLE';を実行する
  2. SET GLOBAL general_log = 'ON';を実行する
  3. テーブルmysql.general_logを見てください。

テーブルではなくファイルに出力したい場合は、次のようにします。

  1. SET GLOBAL log_output = "FILE";デフォルト
  2. SET GLOBAL general_log_file = "/path/to/your/logfile.log";
  3. SET GLOBAL general_log = 'ON';

私は.cnfファイルを編集するよりもこの方法を好みます。

  1. my.cnfファイルを編集しているのではなく、潜在的に永続的にログ記録を有効にしているのではない
  2. クエリログを探すためにファイルシステムを探し回る必要はありません。 /var/log /var/data/log/opt /home/mysql_savior/var
  3. サーバーを再起動して現在の接続を中断する必要はありません。
  4. サーバーを再起動すると、起動した場所にログが残ります(デフォルトではログはオフになっています)。

詳細については、 MySQL 5.1リファレンスマニュアル - サーバシステム変数 - general_log を参照してください。

720
FlipMcF

一般的なクエリログを有効にすることができます そのような診断のために/。一般的に、本番サーバーにすべてのSELECTクエリを記録するわけではありませんが、パフォーマンスの低下を招きます。

MySQLの設定を編集します。 /etc/mysql/my.cnf - このような行を探す、または追加する

[mysqld]
log = /var/log/mysql/mysql.log

その変更を反映するためにmysqlを再起動してください。

tail -f /var/log/mysql/mysql.log

ちょっとプレスト、あなたは彼らが入ってくるようにクエリを見ることができます。

40
Paul Dixon

あなたはmysqlクエリログを監視するために流れることをすることができます。

Mysql設定ファイルmy.cnfを開く

Sudo nano /etc/mysql/my.cnf

[mysqld]という見出しの下の次の行を検索し、これらの行のコメントを外してログを有効にします

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Mysqlサーバーを再起動して変更を反映します

Sudo service mysql start

ターミナルで次のコマンドでmysqlサーバーログを監視します

tail -f /var/log/mysql/mysql.log
15
Rokibul Hasan
SELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;
13
zloctb

1)一般的なmysqlロギングが有効になっている場合は、configで述べたことに基づいて、ログファイルまたはテーブル内のクエリをチェックできます。次のコマンドで有効になっているものを確認してください。

mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';

テーブルにクエリ履歴が必要な場合

Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';

テーブルmysql.general_logを見てください。

ファイルに出力したい場合は、

SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';

2).mysql_historyファイルcat〜/ .mysql_historyでクエリを確認することもできます。

7
minhas23

mysql binlog が有効になっている場合は、mysql binlogディレクトリを参照して、Linuxコンソールで次のコマンドを実行してユーザーが実行したコマンドを確認できます。

mysqlbinlog binlog.000001 >  /tmp/statements.sql

有効にする

[mysqld]
log = /var/log/mysql/mysql.log

または一般的なログはMySQLのパフォーマンスに影響を与えます

4
Avinash Singh

たぶんあなたは query log を見ることによってそれを見つけることができました。

3
cherouvim

MySQLの設定を変更したくない場合は、 "Neor Profile SQL" http://www.profilesql.com のようなSQLプロファイラを使用できます。

2
Bitclaw

あなたはLinuxで以下を見ることができます

cd /root

ls -al

vi .mysql_history役に立ちます

2
Avinash Singh

ポールの答えを読んだ後、私は https://dev.mysql.com/doc/refman/5.7/en/query-log.html の詳細について掘り下げました。

私は人によって本当に便利なコードを見つけました。これがコンテキストの要約です。

(注:次のコードは私のものではありません)

このスクリプトはテーブルサイズを小さくするのに役立つテーブルをきれいに保つための例です。一日後のように、ログの約18万クエリがあるでしょう。 (ファイルでは、1日あたり30MBになります)

追加の列(event_unix)を追加する必要があり、それからログをきれいに保つためにこのスクリプトを使用することができます。 event_unixから...少し少々わかりにくいかもしれませんが、うまくいっています。

新しい列のコマンド:

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';

クリーンアップスクリプト:

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';

クレジットはSebastian Kaiser(コードの原作者)にあります。

誰かが私がそうしたようにそれが役に立つのを見つけることを願っています。

2
Dev Aggarwal