GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: KAiTO 文章來源:GreatSQL社區原創 往期回顧 圖文結合帶你搞懂MySQL日誌之relay log(中繼日誌) 圖文結合帶你搞懂MyS ...
- GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。
- GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。
- 作者: KAiTO
- 文章來源:GreatSQL社區原創
往期回顧
- 圖文結合帶你搞懂MySQL日誌之relay log(中繼日誌)
- 圖文結合帶你搞懂MySQL日誌之Slow Query Log(慢查詢日誌)
- 圖文結合帶你搞懂MySQL日誌之Error Log(錯誤日誌)
- 圖文結合帶你搞懂MySQL日誌之Redo Log(重做日誌)
- 圖文結合帶你搞懂InnoDB MVCC
- 圖文結合帶你搞定MySQL日誌之Undo log(回滾日誌)
什麼是通用查詢日誌
通用查詢日誌(General Query Log) 用來記錄用戶的所有操作,包括啟動和關閉MySQL服務、所有用戶的連接開始時間和截止時間、發給 MySQL 資料庫伺服器的所有 SQL 指令等。當我們的數據發生異常時, 查看通用查詢日誌,還原操作時的具體場景 ,可以幫助我們準確定位問題。
查看當前狀態
mysql> SHOW VARIABLES LIKE '%general%';
+------------------+---------------------------+
| Variable_name | Value |
+------------------+---------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/zhyno1.log |
+------------------+---------------------------+
2 rows in set (0.00 sec)
從general_log
可以看到通用查詢日誌處於關閉狀態,從general_log_file
可以看到日誌的目錄以及文件名稱
啟動日誌
- 方式1
修改 my.cnf 或者 my.ini 配置文件來設置。在 [mysqld] 組下加入log選項,並重啟MySQL服務。格式如下:
[mysqld]
general_log=ON
general_log_file=[path[filename]] #日誌文件所在目錄路徑,filename為日誌文件名
如果不指定目錄和文件名,通用查詢日誌將預設存儲在MySQL數據目錄中的hostname.log文件中,hostname表示主機名。
- 方式2
SET GLOBAL general_log=on; # 開啟通用查詢日誌
SET GLOBAL general_log_file='path/filename'; # 設置日誌文件保存位置
查看日誌
通用查詢日誌是以文本文件的形式存儲在文件系統中的,可以使用文本編輯器直接打開日誌文件。每台MySQL伺服器的通用查詢日誌內容是不同的。
- 在Windows操作系統中,使用文本文件查看器;
- 在Linux系統中,可以使用vi工具或者gedit工具查看;
- 在Mac OSX系統中,可以使用文本文件查看器或者vi等工具查看。
[root@zhyno1 mysql]# cat zhyno1.log
/usr/sbin/mysqld, Version: 8.0.25-16 (GreatSQL (GPL), Release 16, Revision 8bb0e5af297). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
2022-11-24T10:07:31.300579Z 4398 Query SHOW VARIABLES LIKE '%general%'
2022-11-24T10:07:42.344537Z 4398 Query SET GLOBAL general_log=OFF
可以看出,該日誌非常清晰地記錄了客戶端的所有行為。
停止日誌
修改my.cnf或者my.ini文件,把[mysqld]組下的general_log值設置為OFF或者把general_log一項註釋掉。修改保存後,再重啟MySQL服務,即可生效。
[mysqld]
general_log=OFF
或是
SET GLOBAL general_log=off;
刪除\刷新日誌
如果數據的使用非常頻繁,那麼通用查詢日誌會占用伺服器非常大的磁碟空間。數據管理員可以刪除很長時間之前的查詢日誌,以保證MySQL伺服器上的硬碟空間。
在 MySQL 中,可以使用 mysqladmin
命令來開啟新的通用查詢日誌。新的通用查詢日誌會直接覆蓋舊的查詢日誌,不需要再手動刪除了。
mysqladmin
命令的語法如下:
mysqladmin -uroot -p flush-logs
需要註意的是,如果希望備份舊的通用查詢日誌,必須先將舊的日誌文件拷貝出來或者改名。然後,再執行 mysqladmin
命令。
除了上述方法之外,還可以手工刪除通用查詢日誌。刪除之後需要重新啟動 MySQL 服務。重啟之後就會生成新的通用查詢日誌。如果希望備份舊的日誌文件,可以將舊的日誌文件改名,然後重啟 MySQL 服務。
參考文章
- 《MySQL是怎樣運行的--從根兒上理解MySQL》—小孩子4919(https://juejin.cn/book/6844733769996304392)
Enjoy GreatSQL