MySQL でコマンド履歴を取得する
- MySQL コマンド履歴
- Windows コマンド ラインを使用して MySQL のコマンド履歴を取得する
- Windows で MySQL Workbench を使用して MySQL コマンド履歴を取得する
- Ubuntu ターミナルを使用して MySQL コマンドの履歴を取得する
この記事では、Windows と Linux で実行した MySQL コマンドの履歴を取得するさまざまな方法について説明します。
MySQL コマンド履歴
Windows および Linux (Ubuntu 20.04) オペレーティング システムを使用して、MySQL コマンドの履歴を取得するためのさまざまなアプローチについて学習します。
Windows OS の場合、MySQL Workbench と Windows コマンド ライン (cmd およびコマンド プロンプトとも呼ばれます) を使用して、ファイルとテーブルの形式で MySQL コマンドの履歴にアクセスします。
Linux OS の場合、Linux シェル (ターミナル) を使用して MySQL コマンド履歴にアクセスします。
Windows コマンド ラインを使用して MySQL のコマンド履歴を取得する
ここでは、MySQL でコマンド履歴を取得する 3つの方法について説明します。
すべての MySQL コマンドの履歴を表形式で取得する
-
Windows コマンド ラインを開き、デフォルトで
C:\Program Files\MySQL\MySQL Server 8.0\binにある MySQLbinフォルダーに移動します。 -
ログイン資格情報を使用して MySQL にログインします。
-
次の 2つのクエリを実行して、MySQL クエリ ログをオンにし、MySQL コマンドの履歴を表形式で準備します。
SET GLOBAL log_output = 'table'; SET GLOBAL general_log = 'on'; -
次のクエリを実行して、実行された MySQL コマンドの履歴を出力として取得します。
SELECT a.*, CONVERT(a.argument USING utf8) FROM mysql.general_log a;
上記のクエリでは、convert() メソッドを使用して、argument フィールドの 16 進数値をテキストに変換します。 MySQL バージョン 5.7 以降を使用して、argument 属性値を 16 進値で取得することもできます。
コマンド ラインのスペースが限られているため、次のように特定のフィールドを選択しています。
SELECT a.event_time,a.user_host, a.thread_id, a.server_id,
CONVERT(a.argument USING utf8) AS arugment
FROM mysql.general_log a LIMIT 10;
出力:

ファイル内のすべての MySQL コマンドの履歴を取得する
この方法は、前の方法と非常によく似ています。 MySQL にログインした後、次のクエリを実行するだけです。
SET GLOBAL log_output = 'file';
SET GLOBAL general_log_file = "/yourPath/logfile.log";
SET GLOBAL general_log = 'on';
ここで、指定されたパスでファイルを見つけて開き、すべての詳細を確認します。 通常、filename.log ファイルは次のようになります。
出力:

指定されたセッションで最後に実行された MySQL コマンドの履歴を取得する
特定のセッションに対して次のクエリを使用することによってのみ、最後に実行された MySQL コマンドを見つけることもできます。 ここでは root に対してこれを行っており、コマンド ラインのスペースが限られているため、2つのフィールドのみを選択しています。
SELECT a.event_time,CONVERT(a.argument USING utf8) AS arugment
FROM mysql.general_log a WHERE user_host LIKE 'root%'
ORDER BY a.event_time DESC LIMIT 1;
出力:

Windows で MySQL Workbench を使用して MySQL コマンド履歴を取得する
ここでも、MySQL コマンドの履歴を取得する 3つの方法があります。 これらの方法は、Windows コマンド ラインを使用して説明したものと同じです。 ただし、今回は MySQL Workbench で実行します。
MySQL コマンド履歴を表形式で取得する
次のクエリを実行して、MySQL コマンドの履歴を表形式で取得します。 ここで、convert() メソッドは argument フィールドの blob 値をテキストに変換します。
MySQL バージョン 5.7 以降を使用している場合、Workbench で argument 属性の値を blob として取得することもできます。
SET GLOBAL log_output = 'table';
SET GLOBAL general_log = 'on';
SELECT a.*, CONVERT(a.argument USING utf8) FROM mysql.general_log a;
出力:

クエリを記述する代わりに、History Output オプション (次のスクリーンショットで強調表示されている) を使用して、コマンドの履歴を取得できます。

1つのファイルまたは複数のファイルで MySQL コマンド履歴を取得する
指定したパスにある 1つのファイルですべての履歴を取得できます。
SET GLOBAL log_output = 'file';
SET GLOBAL general_log_file = "/yourPath/logfile.log";
SET GLOBAL general_log = 'on';
C:\Users\DELL\AppData\Roaming\MySQL\Workbench\sql_history の場所に移動して、MySQL コマンドの履歴を持つ個々のファイルをすべて表示することもできます。
最後に実行されたクエリの MySQL コマンド履歴を取得する
SELECT a.*,CONVERT(a.argument USING utf8) AS arugment
FROM mysql.general_log a WHERE user_host LIKE 'root%'
ORDER BY a.event_time DESC LIMIT 1;
出力:

Ubuntu ターミナルを使用して MySQL コマンドの履歴を取得する
スーパーユーザーとしてログインした後、次のコマンドを実行します。
cat ~/.mysql_history
出力:

次のコマンドを実行してスペースを削除し、読みやすくすることができます。
sed "s/\\\040/ /g" < ~/.mysql_history
出力:

