1. 程式人生 > >MySQL中general log使用

MySQL中general log使用

開啟general log會將所有到達MySQL Server的SQL語句記錄下來。一般不會開啟開功能,因為log的量會非常龐大。但個別情況下可能會臨時的開一會兒general log以供排障使用。
相關引數一共有3:general_log、log_output、general_log_file

general_log:全域性動態變數,預設關閉
log_output :全域性動態變數,可取FILE、TABLE、NONE。其中TABLE儲存方式比較方便按條件檢索。若指定為NONE,則即使general_log開啟了也不會記錄log。若log_output指定為TABLE,則會在mysql資料庫下邊建立一個general_log表。需要注意的是該引數不僅僅影響general的儲存方式還影響slow的儲存方式,這一點需要特別注意。
general_log_file:全域性動態變數,日誌檔名,不指定的話預設為hostname。log,位於資料目錄下。

mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | OFF   |
+---------------+-------+
1 row in set (0.15 sec)

mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE | +---------------+-------+ 1 row in set (0.15 sec) mysql> show variables like 'general_log_file'; +------------------+----------------------+ | Variable_name | Value | +------------------+----------------------+ | general_log_file | /data/mysql/t1-2.log | +------------------+----------------------+
1 row in set (0.11 sec) mysql> set global log_output='table'; Query OK, 0 rows affected (0.03 sec) mysql> show variables like 'log_output'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | TABLE | +---------------+-------+ 1 row in set (0.11 sec)
mysql> use mysql;
mysql> show create table 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` bigint(21) unsigned 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'

可以看到,引擎使用的是CSV,該引擎下MySQL會將表中的資料儲存在資料目錄對應的資料庫目錄下檔名為表明副檔名為.CSV的檔案中。表的引擎可以根據需求進行更改。