GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者:KAiTO 文章來源:社區原創 往期回顧: 圖文結合帶你搞懂MySQL日誌之Redo Log(重做日誌) 圖文結合帶你搞懂InnoDB MVCC ...
- GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。
- GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。
- 作者:KAiTO
- 文章來源:社區原創
往期回顧:
什麼是錯誤日誌
錯誤日誌(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位元組。
參考文章
Enjoy GreatSQL