5、MySQL通用查询日志(General Query Log)
通用查詢日志(General Query Log)用來記錄用戶的所有操作,包括啟動和關閉 MySQL 服務、更新語句和查詢語句等。
默認情況下,通用查詢日志功能是關閉的。可以通過以下命令查看通用查詢日志是否開啟,命令如下:
mysql> SHOW VARIABLES LIKE '%general%'; +------------------+----------------------------------------------------------------+ | Variable_name | Value | +------------------+----------------------------------------------------------------+ | general_log | OFF | | general_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP.log | +------------------+----------------------------------------------------------------+ 2 rows in set, 1 warning (0.01 sec)從結果可以看出,通用查詢日志是關閉的,general_log_file 變量指定了通用查詢日志文件所在的位置。
啟動和設置通用查詢日志
在 MySQL 中,可以通過在 MySQL 配置文件添加 log 選項來開啟通用查詢日志,格式如下:
[mysqld] log=dir/filename其中,dir 參數指定通用查詢日志的存儲路徑;filename 參數指定日志的文件名。如果不指定存儲路徑,通用查詢日志將默認存儲到 MySQL 數據庫的數據文件夾下。如果不指定文件名,默認文件名為 hostname.log,其中 hostname 表示主機名。
查看通用查詢日志
如果希望了解用戶最近的操作,可以查看通用查詢日志。通用查詢日志以文本文件的形式存儲,可以使用普通文本文件查看該類型日志內容。
例 1
首先我們查看通用查詢日志功能是否是開啟狀態,然后查詢 tb_student 表的記錄,SQL 命令和執行過程如下:
執行成功后,打開通用查詢日志,這里日志名稱為 LAPTOP-UHQ6V8KP.log,下面是通用查詢日志中的部分內容。
C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe, Version: 5.7.29-log (MySQL Community Server (GPL)). started with: TCP Port: 3306, Named Pipe: MySQL Time Id Command Argument 2020-05-29T06:43:44.382878Z 7 Quit 2020-05-29T06:44:10.001382Z 8 Connect root@localhost on using SSL/TLS 2020-05-29T06:44:10.007532Z 8 Query select @@version_comment limit 1 2020-05-29T06:44:11.748179Z 8 Query SHOW VARIABLES LIKE '%general%' 2020-05-29T06:44:25.487472Z 8 Query SELECT DATABASE() 2020-05-29T06:44:25.487748Z 8 Init DB test 2020-05-29T06:44:35.390523Z 8 Query SELECT * FROM tb_student可以看出,該日志非常清晰地記錄了客戶端的所有行為。
停止通用查詢日志
通用查詢日志啟動后,可以通過兩種方法停止該日志。一種是將 MySQL 配置文件中的相關配置注釋掉,然后重啟服務器,來停止通用查詢日志。具體內容如下:
[mysqld] #log=dir\filename上述方法需要重啟 MySQL 服務器,這在某些場景,比如有業務量訪問的情況下是不允許的,這時可以通過另一種方法來動態地控制通用查詢日志的開啟和關閉。
設置 MySQL 的環境變量 general_log 為關閉狀態可以停止該日志,示例如下:
mysql> SET GLOBAL general_log=off; Query OK, 0 rows affected (0.00 sec)mysql> SHOW VARIABLES LIKE '%general_log%' \G *************************** 1. row *************************** Variable_name: general_logValue: OFF *************************** 2. row *************************** Variable_name: general_log_fileValue: C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP.log 2 rows in set, 1 warning (0.01 sec)刪除通用查詢日志
在 MySQL 中,可以使用 mysqladmin 命令來開啟新的通用查詢日志。新的通用查詢日志會直接覆蓋舊的查詢日志,不需要再手動刪除了。
mysqladmin 命令的語法如下:
mysqladmin -uroot -p flush-logs需要注意的是,如果希望備份舊的通用查詢日志,必須先將舊的日志文件拷貝出來或者改名。然后,再執行 mysqladmin 命令。
除了上述方法之外,還可以手工刪除通用查詢日志。刪除之后需要重新啟動 MySQL 服務。重啟之后就會生成新的通用查詢日志。如果希望備份舊的日志文件,可以將舊的日志文件改名,然后重啟 MySQL 服務。
由于通用查詢日志會記錄用戶的所有操作,如果數據庫的使用非常頻繁,通用查詢日志將會占用非常大的磁盤空間,對系統性能影響較大。一般情況下,數據管理員可以刪除很長時間之前的通用查詢日志或關閉此日志,以保證 MySQL 服務器上的硬盤空間。
總結
以上是生活随笔為你收集整理的5、MySQL通用查询日志(General Query Log)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4、MySQL使用二进制日志还原数据库
- 下一篇: 6、MySQL慢查询日志(Slow Qu