概述
日志檔案記錄 MySQL 資料庫運行期間發生的變化,當資料庫遭到意外的損害時,可以通過日志檔案查詢出錯原因,并進件資料恢復
MySQL 日志檔案可以分成以下幾類:
- 二進制日志:記錄所有更改資料的陳述句,可以用于主從復制
- 錯誤日志:記錄 MySQL 服務出現的問題
- 查詢日志:記錄建立的客戶端連接和執行的陳述句
- 慢查詢陳述句:記錄所有執行時間超過 long_query_time 的所有查詢或不適用索引的查詢
- 中繼日志:記錄復制時從服務器從主服務器收到的資料該表
- 資料定義陳述句日志:記錄資料定義陳述句執行的元資料操作
操作二進制日志
1. 啟動二進制日志
默認情況下,二進制檔案是關閉的,可以通過以下 SQL 陳述句來查詢二進制開關
SHOW VARIABLES LIKE 'log_bin%';
修改 my.cnf 或 my.ini 檔案,以 Windows 系統為例,打開 MySQL 目錄下的 my.ini 檔案,將 log-bin 加入 [mysqld] 組
[mysqld]
log-bin
server-id=201811
expire_logs_days=10
max_binding_size=100M
重新啟動 MySQL 服務,再執行上述的 SQL 陳述句,看到 log_bin 變數的值為 ON,表明二進制日志已經打開
如果想改變日志檔案的目錄和名稱,可以對 my.ini 中的 log_bin 引數修改如下:
[mysqld]
log-bin="d:\mysql\logs"
2. 查看二進制日志
當 MySQL 創建二進制日志檔案時,先創建一個 binlog.000001 檔案,以后 MySQL 服務重新啟動一次,以 .000001 為后綴的檔案就會增加一個,后綴名按 1 遞增,如果日志長度超過了 max_binlog_size 的上限,就會創建一個新的日志檔案
SHOW BINARY LOGS;
二進制日志檔案不能直接查看,可以使用 mysqlbinlog 命令查看
mysqlbinlog [日志檔案路徑]
3. 使用二進制日志恢復資料庫
如果 MySQL 服務器啟用了二進制日志,在資料庫出現意外丟失資料時,可以使用 MySQLbinlog 工具從指定的時間點開始恢復資料
mysqlbinlog [option] filename|mysql -uroot -p;
- option 是一些可選的選項:
- --start-date:指定恢復資料庫的起始時間點
- --stop-date:指定恢復資料庫的結束時間點
- --start-position:指定恢復資料庫的起始位置
- --stop-position:指定恢復資料庫的結束位置
- filename 是日志檔案名
4. 暫停二進制日志
在組態檔設定了 log-bin 選項以后,MySQL 服務會一直開啟二進制日志功能,洗掉該選項就可以停止二進制日志功能
MySQL 提供暫時停止二進制日志功能的陳述句,如果用戶不希望自己執行的某些 SQL 陳述句記錄在二進制日志,可以使用 SET 陳述句來暫停二進制日志功能,0 表示停止,1 表示恢復
SET SQL_LOG_BIN={0|1}
5. 洗掉二進制日志
MySQL 的二進制檔案可以配置自動洗掉,同時 MySQL 也提供手動洗掉二進制檔案的方法
使用 PURGE MASTER LOGS 陳述句洗掉指定日志檔案
# 洗掉創建時間比指定日志檔案早的日志檔案,以后綴為判斷標準
PURGE {MASTER|BINARY} LOGS TO 'log_name'
# 洗掉指定時間前的日志檔案
PURGE {MASTER|BINARY} LOGS BEFORE 'date'
使用 RESET MASTER 陳述句洗掉所有二進制日志檔案
RESET MASTER
執行完該陳述句,所有二進制日志將被洗掉,MySQL 會重新創建二進制檔案,新的日志檔案擴展名將重新從 000001 開始
操作錯誤日志
1. 啟動錯誤日志
在 MySQL 資料庫中,錯誤日志是默認開啟的,并且無法被禁止,錯誤日志檔案的名稱默認為 hostname.err,其中 hostname 表示 MySQL 服務器的主機名
2. 查看錯誤日志
SHOW VARIABLES LIKE 'log_err%';
3. 洗掉錯誤日志
MySQL 的錯誤日志是以文本形式存盤的,可以直接洗掉
通用查詢日志
1. 啟動通用查詢日志
MySQL 默認沒有開啟通用查詢日志,可以通過修改 my.cnf 或 my.ini 組態檔來設定
[mysqld]
general_log=ON
general_log_file=[path[filename]]
重啟 MySQL,在 MySQL 的 data 目錄下生成新的通用查詢日志
從 5.1.6 以后開始,MySQL 支持全域級別的動態修改,不需要重啟
SET GLOBAL general_log=on;
SET GLOBAL general_log=off;
SET GLOBAL general_log_file='path/filename';
2. 查看通用查詢日志
SHOW VARIABLES LIKE 'general_log%';
3. 停止通用查詢日志
MySQL 停止通用查詢日志功能有兩種方式,一種是在組態檔把 general_log 值設定為 off,再重啟 MySQL,另一種是使用 SET 陳述句設定,即動態修改
4. 洗掉通用查詢日志
通用查詢日志可以手動洗掉,也可以使用命令洗掉
mysqladmin -uroot -p flush-logs
此種方式新的通用查詢日志會直接覆寫舊日志
慢查詢日志
1. 啟動慢查詢日志
MySQL 慢查詢日志默認是關閉的,可以通過修改 my.cnf 或 my.ini 組態檔來設定
[mysqld]
long_query_time=n
slow_query_log=ON
slow_query_log_file=[path[filename]]
- long_query_time 設定慢查詢的閾值,超出此設定值的 SQL 都會被記錄,默認為 10 秒
MySQL 也支持 SET 陳述句開啟
set global slow_query_log=ON;
set global long_query_time=2;
set session long_query_time=2;
2. 查看慢查詢日志
查看慢查詢日志所在目錄
SHOW VARIABLES LIKE '%slow_query_log_file%';
查看慢查詢日志的超時時長
SHOW VARIABLES LIKE '%long_query_time%';
3. 停止慢查詢日志
可以在組態檔把 slow_query_log 的值設為 OFF,重啟 MySQL,也可以使用 SET 陳述句
4. 洗掉慢查詢日志
慢查詢日志可以手動洗掉,也可以使用命令洗掉
mysqladmin -uroot -p flush-logs
此種方式新的慢查詢日志會直接覆寫舊日志
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/469626.html
標籤:MySQL
下一篇:慢查詢SQL排查