- GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯系小編并注明來源,
- GreatSQL是MySQL的國產分支版本,使用上與MySQL一致,
- 作者:KAiTO
- 文章來源:社區原創
往期回顧:
- 圖文結合帶你搞懂MySQL日志之Redo Log(重做日志)
- 圖文結合帶你搞懂InnoDB MVCC
- 圖文結合帶你搞定MySQL日志之Undo log(回滾日志)
什么是錯誤日志
錯誤日志(Error Log) 是 MySQL 中最常用的一種日志,主要記錄 MySQL 服務器啟動和停止程序中的資訊、服務器在運行程序中發生的故障和例外情況等,
錯誤日志記錄了啥
錯誤日志包含 mysqld 啟動和關閉的時間資訊,還包含診斷訊息,如服務器啟動和關閉期間以及服務器運行時出現的錯誤、警告和其他需要注意的資訊,
例如:如果 mysqld 檢測到某個表需要檢查或修復,會寫入錯誤日志,
根據錯誤日志配置,錯誤訊息還可能填充 performance_schema.error_log 表,以便為日志提供 SQL 介面,使錯誤日志能夠查詢,
如果用 mysqld_safe 啟動 mysqld,mysqld_safe 會將訊息寫入錯誤日志,
例如,當 mysqld_safe 注意到 mysqld 例外退出時,它會重新啟動 mysqld,并將 mysqld 重新啟動的訊息寫入錯誤日志,
怎么啟動錯誤日志
在MySQL資料庫中,錯誤日志功能是默認開啟的,而且,錯誤日志無法被禁止,
默認情況下,錯誤日志存盤在MySQL資料庫的資料檔案夾下,名稱默認為mysqld.log(Linux系統)或hostname.err(mac系統),如果需要制定檔案名,則需要在my.cnf或者my.ini中做如下配置:
[mysqld]
log-error=[path/[filename]] #path為日志檔案所在的目錄路徑,filename為日志檔案名
修改配置項后,需要重啟 MySQL 服務以生效,
查看日志
MySQL錯誤日志是以文本檔案形式存盤的,可以使用文本編輯器直接查看,
查詢錯誤日志的存盤路徑:
mysql> show variables like 'log_err%';
+----------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------+----------------------------------------+
| log_error | /var/log/mysqld.log |
| log_error_services | log_filter_internal; log_sink_internal |
| log_error_suppression_list | |
| log_error_verbosity | 2 |
+----------------------------+----------------------------------------+
4 rows in set (0.00 sec)
引數決議
log_error定義為錯誤日志檔案路徑,log_error_services控制哪個日志組件啟用錯誤日志,該變數可以包含具有0、1或多組件串列;在后一種情況下,組件可以用分號或(從MySQL 8.0.12開始)逗號分隔,另外服務器按照列出的順序執行組件,
默認情況下,log_error_services 具有以下值:
mysql> SELECT @@GLOBAL.log_error_services;
+----------------------------------------+
| @@GLOBAL.log_error_services |
+----------------------------------------+
| log_filter_internal; log_sink_internal |
+----------------------------------------+
1 row in set (0.00 sec)
log_error_suppression_list用于錯誤日志的事件的抑制作用,有些日志不希望記錄下來,log_error_verbosity日志記錄等級:
| log_error_verbosity Value | Permitted Message Priorities |
|---|---|
| 1 | ERROR |
| 2 | ERROR, WARNING |
| 3 | ERROR, WARNING, INFORMATION |
- 在MGR中建議設定為
3可以記錄更多日志資訊,便于跟蹤問題,
log_timestamps控制日志顯示時間
在MySQL 5.7.2 新增了 log_timestamps 這個引數,該引數主要是控制 error log、genera log,等等記錄日志的顯示時間引數,
在 5.7.2 之后改引數為默認 UTC 這樣會導致日志中記錄的時間比中國這邊的慢,導致查看日志不方便,
mysql> SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| log_timestamps | UTC |
+----------------+-------+
1 row in set (0.00 sec)
可以看到使用的時間是UTC時間,UTC是世界公用的一個時間,那么我們本地時間和UTC時間就必然存在一個換算關系,按北京時間來算,北京時間將比UTC時間快8個小時,
修改方法:
- MySQL5.7修改
1.set global log_timestamps=system;
2.修改后可以在組態檔再添加
[mysqld]
log_timestamps=system
- MySQL8.0修改
1.set global log_timestamps=system;
- 小節結論
1.為了國內用戶便于讀取日志資訊,建議將引數寫入到組態檔my.cnf
2.MySQL 8.0支持引數log_timestamps持久化設定,
洗掉\重繪日志
對于很久以前的錯誤日志,資料庫管理員查看這些錯誤日志的可能性不大,可以將這些錯誤日志洗掉,以保證 MySQL 服務器上的硬碟空間,MySQL 的錯誤日志是以文本檔案的形式存盤在檔案系統中的,可以直接洗掉,
#重繪日志
[root@kaito log]# mysqladmin -uroot -p flush-logs
Enter password:
mysqladmin: refresh failed; error: 'Could not open file '/var/log/mysqld.log' for error logging.'
官網提示:

補充操作:
install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log
·flush-logs·指令操作:
- MySQL5.5.7以前的版本,flush-logs將錯誤日志檔案重命名為filename.err_old,并創建新的日志檔案,
- 從MySQL5.5.7開始,flush-logs只是重新打開日志檔案,并不做日志備份和創建的操作,
- 如果日志檔案不存在,MySQL啟動或者執行flush-logs時會自動創建新的日志檔案,重新創建錯誤日志,大小為0位元組,
參考文章
《MySQL是怎樣運行的--從根兒上理解MySQL》—小孩子4919
Enjoy GreatSQL ??
關于 GreatSQL
GreatSQL是由萬里資料庫維護的MySQL分支,專注于提升MGR可靠性及性能,支持InnoDB并行查詢特性,是適用于金融級應用的MySQL分支版本,
相關鏈接: GreatSQL社區 Gitee GitHub Bilibili
GreatSQL社區:
捉蟲活動詳情:https://greatsql.cn/thread-97-1-1.html
社區博客有獎征稿詳情:https://greatsql.cn/thread-100-1-1.html

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

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/540566.html
標籤:其他
上一篇:MySQL-帶你上官網看索引
下一篇:解密小程式云開發資料庫
