web-dev-qa-db-ja.com

MySQLの一般的なログを有効にする方法は?

MySQLの一般ログですべての(遅い)クエリを表示できるようにしたいと思います。私はXAMPPをサーバーとして使用しており、それを有効にする方法がわかりません。インターネットで良いガイドが見つかりません。

誰かが私を助けてくれますか?

ありがとう!

4
Jordy

MySQLのドキュメントで、一般的なログとスローオンをアクティブにするために必要なフラグ

  • log (一般的なログをアクティブ化するため)
  • 一般的なログ (ログファイルに名前を付けるため)
  • 遅いクエリログ (遅いログをアクティブにするため)
  • ログ出力 (ログ情報が書き込まれる場所としてFILEまたはTABLEを指定します)

log-output=TABLEの使用をお勧めします

一般的なログの記録とスローなログ情報をMySQLテーブルに保存します

  • mysql.general_log
  • mysql.slow_log

それらをMyISAMに変換する必要があります。このようにして、タイムスタンプによってテーブルにインデックスを付け、それらからSELECTクエリを実行できます。

デフォルトでは、これらのファイルはCSVストレージエンジンを使用します。

mysql> show create table mysql.general_log\G
*************************** 1. row ***************************
       Table: general_log
Create Table: CREATE TABLE `general_log` (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_Host` mediumtext NOT NULL,
  `thread_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.09 sec)

mysql> show create table mysql.slow_log\G
*************************** 1. row ***************************
       Table: slow_log
Create Table: CREATE TABLE `slow_log` (
  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_Host` mediumtext NOT NULL,
  `query_time` time NOT NULL,
  `lock_time` time NOT NULL,
  `rows_sent` int(11) NOT NULL,
  `rows_examined` int(11) NOT NULL,
  `db` varchar(512) NOT NULL,
  `last_insert_id` int(11) NOT NULL,
  `insert_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `sql_text` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
1 row in set (0.05 sec)

mysql>

一般的なログを変換し、event_timeでインデックスを付けます。

SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
SET GLOBAL general_log = @old_log_state;

遅いログを変換し、start_timeでインデックスを付けます。

SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
SET GLOBAL slow_query_log = @old_log_state;

試してみる !!!

2
RolandoMySQLDBA