1. 程式人生 > 資料庫 >MySQL日誌檔案之錯誤日誌,二進位制日誌,慢日誌

MySQL日誌檔案之錯誤日誌,二進位制日誌,慢日誌

MySQL日誌檔案


(一)錯誤日誌配置

vim /etc/my.cnf
log-error=/var/log/mysql.log
查詢錯誤日誌位置
show variables like '%log_error%'

一般查詢日誌一般都不開啟,這樣會導致日誌檔案異常的大,審計的時候會開啟


(二)二進位制日誌配置

mkdir /data/binlog -p
chown -R mysql.mysql /data/binlog

set sql_log_bin=0 //做資料備份或恢復時,臨時關閉二進位制日誌

vim /etc/my.cnf //控制開啟二進位制日誌
[mysqld]
log-bin=/data/binlog/my-bin //my-bin是二進位制日誌檔名的字首,這也是永久開啟二進位制日誌的方式

binlog_format=row //statement格式直接記錄操作的語句,量級小,但函式類語句不準確;row行模式更加準確,量級大,建議用row模式
sync_binlog=1 //1表示每次提交commit時,就會將資料寫入磁碟。一般設定成1

#粗略檢視二進位制日誌
show binary logs;
show binlog events in 'my-bin.000002' //檢視某個二進位制檔案具體的內容,事件資訊
show master status;

#擷取二進位制日誌
mysqlbinlog --base64-output=decode-rows -v my-bin.000002 //** 命令列處,通過該命令可以看到二進位制日誌裡面的具體語句。

mysqlbinlog --start-position=120 --stop-position=721 my-bin.000002 //可以通過擷取部分二進位制日誌,對誤刪除等操作進行資料庫的恢復
mysqbinlog --start-position=340 --stop-position=721 my-bin.000002 >/tmp/binlog.sql

#重新整理日誌
flush logs;

#設定二進位制日誌保留時間
vim /etc/my.cnf
expire_logs_days=90

#刪除二進位制:
預設情況下,不會刪除舊的日誌檔案,二進位制日誌太重要了!
根據存在時間刪除日誌:
SET GLOBAL expire_logs_days = 90;

…或者…
PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day; //手工刪除二進位制日誌
根據檔名刪除日誌:
PURGE BINARY LOGS TO 'mysql-bin.000010'; //手工刪除二進位制日誌

reset master; //清空所有二進位制日誌,然後從新開始記錄二進位制日誌


(三)MySQL的慢查詢日誌

功能:
slow-log,記錄所有條件內的慢的SQL語句
優化的一種工具日誌。幫我們定位問題。
是將mysql伺服器中影響資料庫效能的相關SQL語句記錄到日誌檔案
通過對這些特殊的SQL語句分析,改進以達到提高資料庫效能的目的。

慢日誌設定:
long_query_time    :  設定慢查詢的閥值,超出次設定值的SQL即被記錄到慢查詢日誌,預設值為10s
slow_query_log      :  指定是否開啟慢查詢日誌
slow_query_log_file :  指定慢日誌檔案存放位置,可以為空,系統會給一個預設的檔案host_name-slow.log
min_examined_row_limit:查詢檢查返回少於該引數指定行的SQL不被記錄到慢查詢日誌
log_queries_not_using_indexes: 不使用索引的慢查詢日誌是否記錄到索引

配置例子: //一般只開啟下列4項就可以了
slow_query_log=1  //開啟慢日誌
slow_query_log_file=/data/slow/slow.log //data/slow目錄提前建立好,許可權等 mkdir -p /data/slow, chown -R mysql:mysql /data/slow,否則沒法生成檔案
long_query_time=0.5 //0.5秒
log_queries_not_using_indexes //記錄慢查詢裡面,不使用索引的語句記錄下來

處理慢日誌:
mysqldumpslow命令

mysqldumpslow -s c -t 10 /data/slow/slow.log //按次數排序
mysqldumpslow -s at -t 10 /data/slow/slow.log //按時間排序,倒序

這會輸出記錄次數最多的10條SQL語句,
其中:-s是表示按照何種方式排序c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序。
ac、at、al、ar,表示相應的倒敘。
-t是top n的意思,即為返回前面多少條的資料;

慢日誌演示例項:
插入資料
mysql> create table city_bak select from city; //建立新表,並且把city表輸入匯入
mysql> insert into city_bak select
from city_bak;
mysql> select sleep(3);

mysql慢日誌常用工具:(已經幫你排序好了,只需要逐條優化即可)
pt-query-diagest (是percona-toolkit工具箱裡面的工具)
mysqlsla