7、MySQL日誌管理

<--目錄-->

1)前言

2)日誌種類介紹 

3)日誌說明

4)操作二進制日誌

5)操作錯誤日誌

6)操作通用查詢日誌

7)操作慢查詢日誌

8)MySQL5.6開啓慢查詢日誌方法


【前言】

    爲了維護MySQL服務器,經常需要在MySQL軟件中進行日誌操作,包啓啓動日誌文件、查看日誌文件、停止日誌文件,這些操作是數據庫管理中最基本、最重要的操作


【日誌種類介紹】

二進制日誌:該日誌文件會以二進制形式記錄數據庫的各種操作,但是卻不記錄查詢操作

錯誤日誌:該日誌文件會記錄MySQL服務器啓動、關閉和運行時出錯等信息

慢查詢日誌:記錄執行時間超過指定時間的各種操作,通過工具分析慢查詢日誌可以定們MySQL服務器性                       能瓶頸所在。

通用查詢日誌:該日誌記錄MySQL服務器的啓動和關閉信息、客戶端的連接信息、更新數據記錄SQL語句                           和查詢數據記錄SQL語句


【說明】

    在MySQL軟件所支持的日誌文件裏,除了二進制以外,其它日誌都是文本文件。默認情況下,MySQL軟件只會啓動錯誤日誌文件,而其它日誌文件則需要手動啓動纔會可以被啓動

重點掌握學習:錯誤日誌、二進制日誌、慢查詢日誌


【操作二進制日誌】

介紹:二進制的日誌包括啓動二進制日誌、查看二制日誌、停止二進制日誌和刪除二制日誌


1)啓動二進制日誌

爲什麼要使用二進制日誌?

     如果MySQL數據庫意外停止,可以通過二進制日誌文件來查看用戶執行了哪些操作,對數據庫文件做了哪些更改,然後根據二進制日誌文件中的記錄來恢復數據庫服務器

     默認情況下,二進制日誌是關閉的,如果想啓動二進制日誌,可以通過設置MySQL服務器的my.cnf實現,具體內容如下

[mysqld]

log-bin=[dir\[filename]]

     在上述語句中,參數dir是用來指定二進制文件的存儲路徑:參數filename用來指定二進制文件的文件名,具體格式爲filename.number,其中numname的格式爲000001、000002、000003等

在具體啓動二進制文件時,如果沒有設置參數dir和filename,二進制日誌文件將使用默認名字主機名-bin.number,保存到默認目錄-數據庫數據文件裏

     注意:每次重啓MySQL服務器都生成一個新的二進制日誌文件,這些日誌文件的文件名裏filename部會不會改變,但是number的值會不斷增加,在MySQL軟件中,與二進制日誌相關的文件除了保存內容的filname.number文件外,還有一個關於二進制日誌文件列表的文件filename.index。

示例:

cat /etc/my.cnf

...

[mysqld]

log-bin

expire_logs_days = 7   #超過7天的binlog日誌文件刪除

...


全局變量修改保留binlog日誌數

mysql> show variables like 'expire%';

mysql> set global expire_logs_days=1;   #只保留1天的binlog

mysql> flush privileges;


    提示:在啓動二進制日誌時,二制進文件最好不要與數據庫的數據文件放在同一磁盤上,這樣當存放數據庫的磁盤遭到破壞後,就可以通過二進制日誌文件進行恢復


2)查看二進制日誌

查看二進制需要通過執行命令mysqlbinlog命令來實現,語法格式如下:

mysqlbinlog wsyht-bin.000001


3)停止二進制日誌

法1:針對想要關閉二進制日誌不再使用的情況

註釋掉my.cnf配置文件裏的log-bin即可

法2:針對在某些操作上不需要記錄到二進制日誌裏,事後再開啓的情況

mysql> set sql_log_bin=0

mysql> set sql_log_bin=1

在上述命令中,當設置sql_log_bin=0時,表示暫停二進制日誌功能,當設置sql_log_bin=1時,表示重新開啓二進制日誌功能


4)刪除二進制日誌

具體語法格式如下

mysql> help reset       #查看幫助

mysql> help purge       #查看幫助

mysql> reset master;    #刪除所有二進制文件

mysql> purge master logs to 'wsyht-bin.0000010' #刪除編號小於0000010的所有二進制文件

mysql> purge master logs before 'yyyy-mm-dd hh:MM:ss' #刪除yyyy-mm-dd hh:MM:ss這個時間之前                                                                    創建的所有二進制文件

5)二進制日誌備份恢復

mysql> mysqlbinlog mysql-bin.000020 > all.sql  #所有庫恢復

mysql> mysqlbinlog -d wsyht mysql-bin.000020 > wsyht.sql  #備份wsyht庫的,-d截取指定庫的binlogmysqlbinlog mysql> mysql-bin.000020 --start-position=510 --stop-position=756 -r pos.sql #-r相當於重定向,按照位置截 取,從510點開始備份,在756點停止

mysqlbinlog mysql-bin.000020 --start-datetime='2015-12-04 17:15:12' --stop-datetime='2015-12-04 17:18:12' -r time.sql #從2015-12-04 17:15:12時間開始備份,在2015-12-04 17:18:12開始停止



【操作錯誤日誌】

1)啓動錯誤日誌

   在MySQL數據庫服務器裏,錯誤日誌默認是開啓的,同時該類型的日誌文件也是無法被禁止。如果想修改錯誤日誌的存放目錄,可以通過設置MySQL服務器的配置文件my.cnf來實現,具體內容如下

[mysqld]

error-bin[=dir\[filename]]

在上述語句中,參數dir用來指定錯誤文件的存儲路徑: 參數filename來指定誤錯文件的文件名,如果沒有在文件my.cnf裏設置錯誤日誌的相關信息,錯誤日誌將使用默認主機名.error,保存到默認目錄-數據庫文件裏。


2)刪除錯誤日誌

語法形試如下:

# mysqladmin -uroot -p flush-logs

執行上述命令,MySQL服務器首先會創建一個新的錯誤日誌,然後將舊的錯誤日誌更名爲filename.err-old;如果數據庫管理員認爲file.err-old沒有任何存在的理由,可以直接刪除



【操作通用查詢日誌】

說明:由於該日誌記錄了客戶端連接MySQL的所有請求,如果當前實例訪問量較大,此日誌會急劇增加,會搶佔系統IO導致影響MySQL的性能,一般建議關閉此日誌,需要時可以通過設置環境變量打開


1)啓用通用查詢日誌

方法1:配置文件啓用

[mysqld]

log[=dir\[filename]]

在上述語句中,參數dir用來指定通用查詢文件的存儲路徑;參數filename來指定用查詢文件的文件名,具體格式爲filename.log,在啓動通用查詢日誌時,如果沒有設置參數dir和filename,日誌文件將使用默認名字主機名.log,保存到默認目錄-數據庫數據文件裏,以上方法是在配置文件裏設置重啓生效


方法2:通過設置MySQL環境變量general_log進行動態的控制通用查詢日誌的開啓與關閉,而不需要重啓MySQL服務

mysql> set global general_log=on;  #設置環境變量,on表示開啓

mysql> show variables like "general_log%" \G;  #查看環境變量


2)停止通用查詢日誌

法1:註釋my.cnf相關本置即可

[mysqld]

# log


法2:通過設置環境變量關閉日誌

mysql> set global general_log=off;   #設置環境變量,off表示關閉

mysql> show variables like "general_log%" \G;  #查看環境變量


3)刪除通用查詢日誌

具體語法格式如下:

mysqladmin -uroot -p flush-logs

執行上述命令,MySQL服務器首先會創建一個新的查詢日誌覆蓋舊的查詢日誌。如果需要備份舊的日誌文件,則必須先將舊的日誌文件復掉出來或者改名,然後再次執地mysqladmin

注意,在具體刪除查詢日誌時,一旦執行mysqladmin命令,就會先刪除舊的通用查詢日誌文件,然後再創建一個新的查詢日誌



【操作慢查詢日誌】

1)啓動慢查詢日誌

方法1:通過配置文件my.cnf來實現,需要重啓

[mysqld]

log-slow-queries[=dir\[filename]]

long_query_time=n

在上述語句中,參數dir用來指定慢查詢文件的存儲路徑;參數filename用來指定慢查詢日誌的文件名,具體格式爲filename-slow.log,如果沒有設置參數dir和filename,慢查詢日誌將使用默認名字主機名-slow.log,保存到默認目錄數據庫文件裏。參數n用來設置時間,該值的單位爲秒。如果沒有設置long_query_time選項,默認時間爲10秒


方法2:針對有業務量訪問不允許重啓的情況,動態控制慢查詢日誌開啓與關閉

       通過MySQL的環境變量slow_qyery_log來進行控制

mysql> set global slow_query_log=on;  #on表示開啓

mysql> set global long_query_time=3;  #設置慢查詢日誌允許的最大時間,單位爲秒

注意:在通過環境變量開啓慢查詢日誌時,slow_query_log針對當前登陸的連接實時生效,而long_query_time針對當前連接並不生效,是針對新增的連接生效,如需啓用修改後的變量值,需要重新連接MySQL


2)分析慢查詢日誌

如果想了解執行時間超過指定時間的查詢語句,以便定位MySQL服務器的性能瓶頸,可以分析慢查詢日誌

MySQL提供了對應的工具用於分析MySQL慢查詢日誌的內容,如果查看慢查詢次數最多的語句或者慢查詢時間最長的誤句,對應的工具爲mysqldumpslow.pl 常用參數如下:

"-s" 爲分析慢查詢日誌時指定的排序參數

可選的有:

"al" 表示平均鎖定時間 

"ar" 表示平均返回記錄數

"at" 表示平均查詢時間 

"-t" 表示只顯示指定的行數

示例:

mysqldumpslow.pl -s at -t 1 wsyht-slow.log

上述示例中,使用mysqldumpslow.pl分析慢查詢日誌,"-s at"表示將分析的結果按平均查詢時間排序,"-t 1"表示只顯示符合條件的第1條

注意:在分析慢查詢日誌時,mysqldump.pl 爲perl誤言編寫的腳本,執行該腳本需要對應的perl語言環境,perl環境的安裝包可以在http://www.perl.org/下載


3)停止慢查詢日誌

法1:通過配置文件my.cnf流釋相應行即可關閉

[mysqld]

#log-slow-queries[=dir\[filename]]

#long_query_time=n


法2:通過設置環境變量關閉

mysql> set gobal slow_query_log=off;  #off表示關閉


4)刪除慢查詢日誌

rm -rf wsyht-slow.log  #刪除日誌

mysqladmin -uroot -p flush-logs #重新刷新慢查詢日誌

執行上述命令,MySQL服務器必會創建一個新的慢查詢日誌,此時慢查詢日誌內容爲空。如果需要備份舊的日誌文件,則必須先將舊的日誌文件複製出來或者改名,然後再次執行命令mysqladmin



【MySQL5.6開啓慢查詢日誌方法】

上述my.cnf開啓慢查詢日誌的方法是MySQL5.5的方法,MySQL5.6方法如下

slow-query-log=1       #1爲開啓慢查詢日誌,0爲關閉

long_query_time = 5    #這個沒變
slow-query-log-file=slow.log   #慢查詢日誌文件名


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