MySQL:日誌管理
阿新 • • 發佈:2021-01-19
MySQL日誌型別
- MySQL有幾個不同的日誌檔案,可以幫助你找出mysqld內部發生的事情:
日誌檔案 | 記入檔案中的資訊型別 |
錯誤日誌 | 記錄啟動、執行或停止時出現的問題 |
查詢日誌 | 記錄建立的客戶端連線和執行的語句 |
二進位制日誌 | 記錄所有更改資料的語句。主要用於複製和即時點恢復 |
慢日誌 | 記錄所有執行時間超過long_query_time秒的所有查詢或不使用索引的查詢 |
事務日誌 | 記錄InnoDB等支援事務的儲存引擎執行事務時產生的日誌 |
- 預設情況下,所有日誌創建於mysqld資料目錄中。通過重新整理日誌,你可以強制
1.錯誤日誌
- 伺服器啟動和關閉過程中的資訊
- 伺服器執行過程中的錯誤資訊
- 事件排程器執行一個時間是產生的資訊
- 在從伺服器上啟動從伺服器程序是產生的資訊
定義:
可以用--log-error[=file_name]選項來指定mysqld儲存錯誤日誌檔案的位置。如果沒有給定file_name值,mysqld
- 檢視當前錯誤日誌配置:
mysql> show global variables like '%log_error%';
- 是否記錄警告日誌
mysql> SHOW GLOBAL VARIABLES LIKE '%log_warnings%';
2.通用查詢日誌
- 啟動開關:general_log={ON|OFF}
- 日誌檔案變數:general_log_file[=/PATH/TO/file]
- 全域性日誌開關:log={ON|OFF} 該開關開啟後,所有日誌都會被啟用
- 記錄型別:log_output={TABLE|FILE|NONE}:
因此,要啟用通用查詢日誌,需要至少配置general_log=ON,log_output={TABLE|FILE}。而general_log_file如果沒有指定,預設名是host_name.log。
看看上述幾個值的預設配置:SHOW GLOBAL VARIABLES LIKE '%general_log%';
mysql> SHOW GLOBAL VARIABLES LIKE '%log_output%';
3.慢查詢日誌
- MySQL如果啟用了slow_query_log=ON選項,就會記錄執行時間超過long_query_time的查詢(初使表鎖定的時間不算作執行時間)。日誌記錄檔案為slow_query_log_file[=file_name],如果沒有給出file_name值, 預設為主機名,字尾為-slow.log。如果給出了檔名,但不是絕對路徑名,檔案則寫入資料目錄。
mysql> SHOW GLOBAL VARIABLES LIKE '%slow_query_log%';
- 預設沒有啟用慢查詢,為了伺服器調優,建議開啟
SET GLOBAL slow_query_log=ON; 當前生效,永久有效配置檔案中設定
- 使用mysqldumpslow命令獲得日誌中顯示的查詢摘要來處理慢查詢日誌
- 那麼多久算是慢呢?
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';
4.二進位制日誌
二進位制日誌啟動開關:log-bin [= file_name]
在
5
.6
及以上版本一定要手動指定。
5
.6
以下版本預設
file_name
為
$datadir/mysqld-
binlog
- 檢視二進位制日誌的工具為:mysqlbinlog
檢視二進位制日誌是否開啟:
mysql> show global variables like 'log_bin';
永久開啟方式:
[[email protected] ~]# vim /etc/my.cnf
在[mysqld]下新增:
log_bin
server_id=36 //需要配置server_id,這裡取ip地址後兩位,注意不要重複
重啟服務systemctl restart mysqld,進入mysql中。
mysql> show global variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.01 sec)
二進位制日誌的管理
[[email protected] ~]# ls /var/lib/mysql //可以看到存放日誌的檔案
我們可以給存放二進位制日誌的檔案起名,與系統預設起名區分開來
日誌滾動
- 每次重啟MySQL服務,日誌都會自動滾動一次。
- 另外如果需要手動滾動,則使用命令 mysql> FLUSH LOGS。
在sql裡重新整理或輸入指令,重啟mysql服務之後,會看到新的日誌檔案
日誌檢視
- 檢視有哪些二進位制日誌檔案:
mysql> SHOW BINARY LOGS;
- 檢視當前正在使用的是哪一個二進位制日誌檔案:
mysql> SHOW MASTER STATUS;
- 檢視二進位制日誌內容:
mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002';
//該語句還可以加上Position(位置),指定顯示從哪個Position(位置)開始:
mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002' FROM 203;
- 使用命令mysqlbinlog檢視二進位制日誌內容:
mysqlbinlog [options] log-files
- 使用二進位制日誌還原資料:
[[email protected] mysql]# mysqlbinlog mysqld-binlog.000002 >/root/temp_date.sql
刪除二進位制日誌檔案
- 二進位制日誌檔案不能直接刪除的,如果使用rm等命令直接刪除日誌檔案,可能導致資料庫的崩潰。
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
mysql> purge binary logs to 'mysql-bin.000002'; //刪除2號之前的日誌檔案
Query OK, 0 rows affected (0.01 sec)
用reset master命令刪除所有日誌,新日誌重新從000001開始編號
用 purge master logs to 'filename.******' 命令可以刪除指定編號前的所有日誌