使用mysql的通用查詢日誌獲取操作sql

2021-10-21 10:18:42 字數 2124 閱讀 3192

有些時候orm框架列印出來的sql有些時候並不那麼友好,我們可以通過mysql的通用日誌查詢獲取到mysql伺服器接收到的sql,方便我們的排查.

general log: 開啟 general log  將所有到達mysql server的sql語句記錄下來。

一般不會開啟開功能,因為log的量會非常龐大。但個別情況下可能會臨時的開一會兒general log以供排障使用。 

2.1 檢視日誌是否開啟: off/on

2.1 開啟日誌:

set global general_log = 'on';

2.2 設定輸出到表:

set global log_output = 'table';

2.3 執行系統程式的sql,這裡模擬插入

insert into my_tables (my_name) values ("martin");

表結構:

create table `my_tables` (

`id` bigint(20) not null auto_increment,

`my_name` varchar(32) default null,

primary key (`id`)

) engine=innodb auto_increment=2 default charset=utf8mb4;

2.4 檢視通用日誌:

2.5 我們還看到有很多條,過濾一下

argument 字段 就能得到我們想要的

insert into my_tables (my_name) values ("martin")

general_log檔案處理:

當開啟general_log後,mysql中的所有操作將會記錄下來,這樣general_log檔案就會產生很大的檔案,此時需要清空此檔案來釋放磁碟空間

3.1 錯誤操作:

網上有人建議直接刪除該檔案,不重啟系統也會自動生成,但是通過測試,系統不會自動生產該檔案

如果刪除掉,重啟mysql以後,general_log出現異常

3.2 正確的操作:

清空該錶,具體操作如下:

set global general_log = 'off';

rename table mysql.general_log to mysql.general_log2;

delete from mysql.general_log2;

注意:當delete from mysql.general_log2執行刪除表資料時,發現作業系統的資料檔案還是存在的,需要手動刪除該資料檔案,再繼續下面資料操作步驟

optimize table general_log2;

rename table mysql.general_log2 to mysql.general_log;

set global general_log = 'on';

有些時候我們很難獲取到sql或者日誌中列印出來的sql與我們預想中不一致時,可以使用此方法進行排查,但一定要記住使用完畢後將日誌關閉.

日誌的也可以記錄到檔案中,這裡不做額外的補充,感興趣的可以自行檢索.

資料參考:

<

MySQL 通用查詢日誌

mysql中的日誌包括 錯誤日誌 二進位制日誌 通用查詢日誌 慢查詢日誌等等。這裡主要介紹下比較常用的兩個功能 通用查詢日誌和慢查詢日誌。1 通用查詢日誌 記錄建立的客戶端連線和執行的語句。2 慢查詢日誌 記錄所有執行時間超過long query time秒的所有查詢或者不使用索引的查詢 1 通用查...

mysql的通用查詢日誌和慢查詢日誌

檢視通用查詢日誌 show variables like general 檢視通用日誌的輸出格式 show variables like log output 配置檔案設定 為1表示開啟通用日誌查詢,值為0表示關閉通用日誌查詢 general log 1 設定通用日誌的輸出格式為檔案和表 log o...

mysql 通用查詢日誌general log

1 通用查詢日誌 記錄建立的客戶端連線和執行的語句,通用查詢日誌預設情況下不是開啟的,通用查詢日誌是以文字方式存放的 當需要取樣分析的時候手工開啟 set global general log 1 在全域性模式下開啟通用查詢日誌1是開啟,0是關閉 不建議使用在配置檔案裡面修改 mysqld gene...