- 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 ??
關于 GreatSQL
GreatSQL是由萬里資料庫維護的MySQL分支,專注于提升MGR可靠性及性能,支持InnoDB并行查詢特性,是適用于金融級應用的MySQL分支版本,
相關鏈接: GreatSQL社區 Gitee GitHub Bilibili
GreatSQL社區:
社區博客有獎征稿詳情:https://greatsql.cn/thread-100-1-1.html

技術交流群:
微信:掃碼添加
GreatSQL社區助手微信好友,發送驗證資訊加群,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/542917.html
標籤:MySQL
