Mysql高階優化(二)

King_JW發表於2020-10-10

錯誤日誌與二進位制檔案

錯誤日誌(Error Log)是 MySQL 中最常用的一種日誌,主要記錄 MySQL 伺服器啟動和停止過程中的信 息、伺服器在執行過程中發生的故障和異常情況等。

在 MySQL 資料庫中,預設開啟錯誤日誌功能。一般情況下,錯誤日誌儲存在 MySQL 資料庫的資料資料夾 下,通常名稱為 hostname.err。其中,hostname 表示 MySQL 伺服器的主機名。 在 MySQL 配置檔案中,錯誤日誌所記錄的資訊可以通過 log-error 和 log-warnings 來定義,其中,log-err 定義是否啟用錯誤日誌功能和錯誤日誌的儲存位置,log-warnings 定義是否將警告資訊也記錄到錯誤日誌 中。 將 log_error 選項加入到 MySQL 配置檔案的 [mysqld] 組中,形式如下:

Mysql高階優化(二)

其中,dir 引數指定錯誤日誌的儲存路徑;filename 引數指定錯誤日誌的檔名;省略引數時檔名預設為 主機名,存放在 Data 目錄中。

重啟 MySQL 服務後,引數開始生效,可以在指定路徑下看到 filename.err 的檔案,如果沒有指定 filename,那麼錯誤日誌將直接預設為 hostname.err。 注意:錯誤日誌中記錄的並非全是錯誤資訊,例如 MySQL 如何啟動 InnoDB 的表空間檔案、如何 初始化自己的儲存引擎等,這些也記錄在錯誤日誌檔案中。

錯誤日誌中記錄著開啟和關閉 MySQL 服務的時間,以及服務執行過程中出現哪些異常等資訊。如果 MySQL 服務出現異常,可以到錯誤日誌中查詢原因。 在 MySQL 中,通過 SHOW 命令可以檢視錯誤日誌檔案所在的目錄及檔名資訊。

Mysql高階優化(二)

錯誤日誌以文字檔案的形式儲存,直接使用普通文字工具就可以檢視。這裡通過記事本開啟,從上面可以 知道錯誤日誌的檔名。該檔案在預設在mysql安裝目錄下或者是mysql目錄data下,開啟 localhost.localdomain.err 檔案,部分內容如下:

Mysql高階優化(二)

Mysql高階優化(二)

以上是錯誤日誌檔案的一部分,主要記載了系統的一些執行錯誤。

在 MySQL 中,可以使用 mysqladmin 命令來開啟新的錯誤日誌,以保證 MySQL 伺服器上的硬碟空間。 mysqladmin 命令的語法如下:

Mysql高階優化(二)

執行該命令後,MySQL 伺服器首先會自動建立一個新的錯誤日誌,然後將舊的錯誤日誌更名為filename.err-old。

MySQL 伺服器發生異常時,管理員可以在錯誤日誌中找到發生異常的時間、原因,然後根據這些資訊來解 決異常。對於很久之前的錯誤日誌,檢視的可能性不大,可以直接將這些錯誤日誌刪除。

二進位制日誌

二進位制日誌(Binary Log)也可叫作變更日誌(Update Log),是 MySQL 中非常重要的日誌。主要用於記 錄資料庫的變化情況,即 SQL 語句的 DDL 和 DML 語句,不包含資料記錄查詢操作。 如果 MySQL 資料庫意外停止,可以通過二進位制日誌檔案來檢視使用者執行了哪些操作,對資料庫伺服器檔案 做了哪些修改,然後根據二進位制日誌檔案中的記錄來恢復資料庫伺服器。 預設情況下,二進位制日誌功能是關閉的。可以通過以下命令檢視二進位制日誌是否開啟,命令如下:

Mysql高階優化(二)

從結果可以看出,二進位制日誌是開啟的。

在 MySQL 中,可以通過在配置檔案中新增 log-bin 選項來開啟二進位制日誌,格式如下:

Mysql高階優化(二)
其中,dir 引數指定二進位制檔案的儲存路徑;filename 引數指定二進位制檔案的檔名,其形式為 filename.number,number 的形式為 000001、000002 等。 每次重啟 MySQL 服務後,都會生成一個新的二進位制日誌檔案,這些日誌檔案的檔名中 filename 部分不會改變,number 會不斷遞增。 如果沒有 dir 和 filename 引數,二進位制日誌將預設儲存在資料庫的資料目錄下,預設的檔名為 hostname-bin.number,其中 hostname 表示主機名。
案例配置如下:

Mysql高階優化(二)

在mysql的data目錄下檢視生成的binlog日誌檔案,如下:

Mysql高階優化(二)

二進位制檔案基本操作-檢視二進位制檔案

可以使用如下命令檢視 MySQL 中有哪些二進位制日誌檔案:

Mysql高階優化(二)

二進位制檔案基本操作-檢視當前正在寫入的二進位制日誌檔案

show master status;命令用來檢視當前的二進位制日誌;

Mysql高階優化(二)

二進位制檔案基本操作-檢視二進位制日誌檔案內容

二進位制日誌使用二進位制格式儲存,不能直接開啟檢視。如果需要檢視二進位制日誌,使用show binlog events in ‘mysql-bin.000001’; 命令。

Mysql高階優化(二)

如果不指定查詢的二進位制檔案,則預設為第一個二進位制檔案。

二進位制檔案基本操作-刪除二進位制檔案

二進位制日誌中記錄著大量的資訊,如果很長時間不清理二進位制日誌,將會浪費很多的磁碟空間。刪除二進 制日誌的方法很多,下面介紹幾種刪除二進位制日誌的方法。
使用 RESET MASTER 語句可以刪除的所有二進位制日誌,該語句的形式如下:

刪除所有二進位制日誌
Mysql高階優化(二)
登入 MySQL 資料庫後,可以執行該語句來刪除所有二進位制日誌。刪除所有二進位制日誌後,MySQL 將會重 新建立新的二進位制日誌,新二進位制日誌的編號從 000001 開始。

根據編號刪除二進位制日誌
每個二進位制日誌檔案後面有一個 6 位數的編號,如 000001。使用 PURGE MASTER LOGS TO 語句,可以刪 除指定二進位制日誌的編號之前的日誌。該語句的基本語法形式如下:

Mysql高階優化(二)

Mysql高階優化(二)

該語句將刪除編號小於 filename.number 的所有二進位制日誌 下面刪除 mylog.000004 之前的二進位制日誌,程式碼如下:

Mysql高階優化(二)

程式碼執行完後,編號為 000001、000002 和 000003 的二進位制日誌將被刪除。

根據建立時間刪除二進位制日誌

使用 PURGE MASTER LOGS TO 語句,可以刪除指定時間之前建立的二進位制日誌,該語句的基本語法格式如 下:

Mysql高階優化(二)

其中,“hh”為 24 制的小時。該語句將刪除在指定時間之前建立的所有二進位制日誌。 下面刪除 2019-12-20 15:00:00 之前建立的二進位制日誌,程式碼如下:

Mysql高階優化(二)

程式碼執行完後,2019-12-20 15:00:00 之前建立的所有二進位制日誌將被刪除。

使用二進位制檔案恢復資料

Mysql高階優化(二)

Mysql高階優化(二)

刪除資料或者表

Mysql高階優化(二)

恢復資料

1. 通過日誌檔案節點恢復資料

根據節點需要我們檢視日誌檔案提供給我們的資料庫建立,表建立,資料新增等時建立的語句節點,從而 恢復資料。

Mysql高階優化(二)

Mysql高階優化(二)

Mysql高階優化(二)

其他恢復資料命令

Mysql高階優化(二)

本作品採用《CC 協議》,轉載必須註明作者和本文連結
周嘉偉

相關文章