MySQL知識(二十四)——MySQL日誌

1 日誌簡介

  MySQL日誌記錄了MySQL數據庫日常操作和錯誤信息,從日誌當中可以查詢到MySQL數據庫的運行情況、用戶操作、錯誤信息等,可以爲MySQL管理和優化提供必要的信息。
  MySQL日誌主要分爲4類:錯誤日誌、查詢日誌、二進制日誌、慢查詢日誌。

2 二進制日誌

  二進制日誌主要記錄MySQL數據庫的變化,其包含了所有更新了數據或者已經潛在更新了數據(例如,沒有匹配任何行的一個DELETE)的語句。
  二進制日誌包含關於每個更新數據庫的語句的執行時間信息,它不包含沒有修改任何數據的語句。使用二進制日誌的主要目的是最大可能地恢復數據庫,因爲二進制日誌包含備份後進行的所有更新。

2.1 啓動和設置二進制日誌

  默認情況下,二進制日誌是關閉的。可在MySQL配置文件my.ini下的[mysqld]組添加如下信息來啓動:

[mysqld]
log-bin[=path/[filename]]
expire_logs_days=10
max_binlog_size=100M
  • path:日誌文件所在的目錄路徑
  • filename:日誌文件的名稱,如文件全名爲filename.000001,filename.000002等,默認爲hostname.000001等;還有一個名爲filename.index的文件,文件內容爲所有日誌的清單。
  • expire_logs_days:清除過期日誌的時間,即二進制日誌自動刪除的天數。默認爲0,沒有自動刪除。
  • max_binlog_size:單個文件的大小限制,超過限制則會新建另一文件。默認是1GB.

2.2 查看二進制日誌

  登錄MySQL服務器後,通過show binary logs語句可以查看當前的二進制日誌文件個數及其文件名。

mysql> SHOW BINARY LOGS;
1381 - You are not using binary logging

  MySQL二進制日誌不能直接查看,可以在命令行窗口通過mysqlbinlog命令查看:

C:\Users\asus> mysqlbinlog D:\MySQL\log\binlog.000001

2.3 刪除二進制日誌

  (1)刪除所有二進制文件

RESET MASTER

  (2)刪除指定日誌文件
登錄MySQL服務器後,執行

PURGE {MASTER|BINARY} LOGS TO 'log_name'  /*刪除文件名編號比指定文件名編號小的所以日誌文件*/
或者
PURGE {MASTER|BINARY} LOGS BEFORE 'date'  /*刪除指定日期以前的所有日誌文件*/

2.4 使用二進制日誌還原數據庫

mysqlbinlog [option] filename|mysql -uuser -ppass

option指定可選項。比較重要的兩對option參數:- -start-date、- -stop-date(指定恢復數據庫的起始時間和結束時間點)和- -start-position、- -stop-position(指定恢復數據庫的開始位置和結束位置)。

例如,根據binlog.000008日誌文件恢復2011年08月30日15:27:48以前的所有操作:

mysqlbinlog --stop-date="2016-01-01 15:27:48" D:\MYSQL\log\binlog.000008|mysql -uuser -ppass

2.5 暫時停止二進制日誌功能

  通過使用SET SQL_LOG_BIN語句可以使用MySQL暫停或者啓動二進制日誌。

SET sql_log_bin={0|1}

  0:暫停記錄二進制日誌;
  1:恢復記錄。

3 錯誤日誌

  錯誤日誌記錄MySQL服務的啓動、運行或停止MySQL服務時出現的問題。

3.1 啓動和設置錯誤日誌

  默認情況下,錯誤日誌會記錄到數據庫的數據目錄下(即data文件夾)。默認文件名爲hostname.err,例如我的電腦名爲JTZen9,那麼記錄錯誤信息的文件名爲JTZen9.err。FLUSH LOGS,重新加載錯誤日誌文件。
  啓動錯誤日誌
  修改my.ini(或my.cnf)來配置。在MySQL配置文件的[mysqld]下配置log-error,則啓動錯誤日誌:

[mysqld]
log-error=[path/[file_name]]

3.2 查看錯誤日誌

  MySQL錯誤日誌是以文本形式存儲的,可以使用文本編輯器直接查看MySQL錯誤日誌。
  如果不知道日誌文件在哪裏,可以使用SHOW VARIABLES語句查看存儲路徑:

mysql> SHOW VARIABLES LIKE 'log_error';
+---------------+----------------------------------------+
| Variable_name | Value                                  |
+---------------+----------------------------------------+
| log_error     | D:\mysql-5.6.24-winx64\data\JTZen9.err |
+---------------+----------------------------------------+
1 row in set

3.3 刪除錯誤日誌

  MySQL錯誤日誌是以文本形式存儲的,可以直接刪除。

4 通用查詢日誌

  通用查詢日誌記錄MySQL的所有用戶操作,包括啓動和關閉服務、執行查詢和更新語句等。

4.1 啓動和設置通用查詢日誌

  MySQL服務器默認沒有開啓通用查詢日誌。
  可以通過修改my.ini(或my.cnf)來配置文件來開啓。在my.ini(或my.cnf)的[mysqld]組下加入log選項:

[mysqld]
log[=path/[filename]]

不指定路徑和文件名,默認存儲在數據目錄中,且文件名爲 hostname.err。

4.2 查看通用查詢日誌

  使用文本編輯器直接打開查看。

4.3 刪除通用查詢日誌

  在用戶查詢、更新頻繁的情況下,通用查詢日誌會增長得很快,所以可以定期刪除比較早的通用日誌,以節省磁盤空間。
  可以直接刪除日誌文件。要重新建立新的日誌文件,可以使用語句mysqldamin -flush logs。

5 慢查詢日誌

  慢查詢日誌是記錄查詢時長超過指定時間的日誌。慢查詢日誌主要用來記錄執行時間較長的查詢語句。通過慢查詢日誌,可以找出執行時間較長、執行效率較低的語句,然後進行優化。

5.1 啓動和設置慢查詢日誌

  默認是關閉的,可以通過配置文件mysql.ini或my.cnf中的log-slow-queries選項打開,也可以在MySQL服務啓動的時用- -log-slow-queries[=file_name]啓動慢查詢日誌。

[mysqld]
log-slow-queries[=path/[filename]]
long_query_time=n

  long_query_time,單位秒,指定記錄記錄閾值,如果某條查詢語句的查詢時間超過了這個值,這個查詢過程將被記錄到慢查詢日誌文件中。

5.2 查看慢查詢日誌

  直接使用文本編輯器查看。在數據目錄下的hostname-slow.log文件。

5.3 刪除慢查詢日誌

  和通用查詢日誌,慢查詢日誌也可直接刪除。刪除後在不重啓服務器的情況下,需要執行mysqladmin -u root -p flush -logs重新生成日誌文件,或者在客戶端登陸到服務器執行flush logs語句重建日誌文件。

6 點撥

  根據不同的使用環境,可以考慮開啓不同的日誌。
  例如,在開發環境中優化查詢效率低的語句,可以開啓慢查詢日誌;如果需要記錄用戶的所有查詢操作,可以開啓通用查詢日誌;如果需要記錄數據的變更,可以開啓二進制日誌;錯誤日誌是默認開啓的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章