mysql日志系統的簡單使用教程
前言
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。
在任何一種數據庫中,都會有各種各樣的日志,記錄著數據庫工作的方方面面,以幫助數據庫管理員追蹤數據庫曾 經發生過的各種事件。
在 MySQL 中,有 4 種不同的日志,分別是
- 錯誤日志
- 二進制日志 (BINLOG 日志)
- 查詢日志
- 慢查詢日志
這些日志記錄著數據庫在不同方面的蹤跡,學會使用mysql日志對我們使用和維護數據庫有很大幫助。
一、錯誤日志
錯誤日志是 MySQL 中最重要的日志之一,它記錄瞭當 mysqld 啟動和停止時,以及服務器在運行過程中發生任何嚴重錯誤時的相關信息。當數據庫出現任何故障導致無法正常使用時,可以首先查看此日志。
該日志是默認開啟的 , 默認存放目錄為 mysql 的數據目錄(var/lib/mysql), 默認的日志文件名為 hostname.err(hostname是主機名)。
1、查看日志位置
show variables like 'log_error%';
2、查看日志內容
tail -f /var/lib/mysql/xxx.err
二、二進制日志
二進制日志(BINLOG)記錄瞭所有的 DDL(數據定義語言)語句和 DML(數據操縱語言)語句,但是不包括數據查詢語句。此日志對於災難時的數據恢復起著極其重要的作用,MySQL的主從復制, 就是通過該binlog實現的。
1、開啟二進制日志
二進制日志,默認情況下是沒有開啟的,需要到MySQL的配置文件中開啟,並配置MySQL日志的格式。
- 配置文件位置 : /etc/my.cnf
- 日志存放位置 : 配置時,給定瞭文件名但是沒有指定路徑,日志默認寫入Mysql的數據目錄。
#配置開啟binlog日志, 日志的文件前綴為 mysqlbin -----> 生成的文件名如 : mysqlbin.000001,mysqlbin.000002 log_bin=mysqlbin #配置二進制日志的格式 binlog_format=STATEMENT
2、二進制日志格式
(1)STATEMENT
該日志格式在日志文件中記錄的都是SQL語句(statement),每一條對數據進行修改的SQL都會記錄在日志文件中,通過Mysql提供的mysqlbinlog工具,可以清晰的查看到每條語句的文本。主從復制的時候,從庫(slave)會將日志解析為原文本,並在從庫重新執行一次。
(2)ROW
該日志格式在日志文件中記錄的是每一行的數據變更,而不是記錄SQL語句。比如,執行SQL語句 :update tb_book set status=’1′ , 如果是STATEMENT 日志格式,在日志中會記錄一行SQL文件; 如果是ROW,由於是對全表進行更新,也就是每一行記錄都會發生變更,ROW 格式的日志中會記錄每一行的數據變更。
(3)MIXED
這是目前MySQL默認的日志格式,即混合瞭STATEMENT 和 ROW兩種格式。默認情況下采用STATEMENT,但是在一些特殊情況下采用ROW來進行記錄。MIXED 格式能盡量利用兩種模式的優點,而避開他們的缺點。
3、日志讀取
由於日志以二進制方式存儲,不能直接讀取,需要用mysqlbinlog工具來查看,語法如下
mysqlbinlog log-file;
4、查看STATEMENT格式日志
(1)執行插入語句
insert into tb_book values(null,'Lucene','2088-05-01','0');
(2)在mysql數據文件目錄找到二進制文件
mysqlbin.index是日志索引文件,記錄日志的文件名。mysql-bin.000001是日志文件
(3)查看日志文件
5、查看ROW格式日志
(1)在配置文件中進行配置
#配置開啟binlog日志, 日志的文件前綴為 mysqlbin -----> 生成的文件名如 : mysqlbin.000001,mysqlbin.000002 log_bin=mysqlbin #配置二進制日志的格式 binlog_format=ROW
註:每次修改配置文件都記得重啟mysql服務
service mysql restart
(2)插入數據
如果日志格式是ROW,直接查看數據是看不懂的,可以在mysqlbinlog後面加上參數-vv使用–no-defaults參數可以避免字符集帶來的影響
6、
6、日志刪除
對於比較繁忙的系統,由於每天生成日志量大 ,這些日志如果長時間不清楚,將會占用大量的磁盤空間。下面講解幾種刪除日志的常見方法
(1)方法一
通過 Reset Master 指令刪除全部 binlog 日志,刪除之後,日志編號,將從 xxxx.000001重新開始 。
刪除之前 ,先查詢下日志文件 :
執行刪除日志指令
Reset Master
再查詢一下
最後剩下的000001是一個空的配置文件
(2)方法二
purge master logs to 'mysqlbin.******
該命令將刪除******
編號之前的所有日志
(3)方法三
purge master logs vefore 'yyyy-mm-dd hh24:mi:ss'
該命令將刪除yyyy-mm-dd hh24:mi:ss
之前產生的所有日志
(4)方法四
設置參數 expire_logs_days=#
,此參數的含義是設置日志的過期天數,過瞭指定的天數後日志將被自動刪除,這樣有利於減少DBA管理日志的工作量
三、查詢日志
查詢日志中記錄瞭客戶端的所有操作語句,而二進制日志不包含查詢數據的SQL語句。
默認情況下, 查詢日志是未開啟的。如果需要開啟查詢日志,可以設置以下配置
#該選項用來開啟查詢日志 , 可選值 : 0 或者 1 ; 0 代表關閉, 1 代表開啟 general_log=1 #設置日志的文件名 , 如果沒有指定, 默認的文件名為 host_name.log general_log_file=file_name
1、開啟查詢日志
2、執行一組操作
3、查看查詢日志
四、慢查詢日志
慢查詢日志記錄瞭所有執行時間超過參數 long_query_time 設置值並且掃描記錄數不小於min_examined_row_limit 的所有的SQL語句的日志。long_query_time 默認為 10 秒,最小為 0, 精度可以到微秒。
1、文件位置和格式
慢查詢日志默認是關閉的 。可以通過兩個參數來控制慢查詢日志
# 該參數用來控制慢查詢日志是否開啟, 可取值: 1 和 0 , 1 代表開啟, 0 代表關閉 slow_query_log=1 # 該參數用來指定慢查詢日志的文件名 slow_query_log_file=slow_query.log # 該選項用來配置查詢的時間限制, 超過這個時間將認為值慢查詢, 將需要進行日志記錄, 默認10s long_query_time=10
一般設置成2s左右就可以瞭,在我的實驗中,為瞭完成慢查詢,我設置成瞭0.5s
在mysql客戶端下可以查詢到當前的long_query_time
2、執行查詢操作
(1)查詢之前先看一眼慢查詢日志
(2)執行一個比較快的查詢動作
(3)執行一個慢的查詢動作
如果慢查詢日志內容很多, 直接查看文件,比較麻煩, 這個時候可以借助於mysql自帶的 mysqldumpslow 工具, 來對慢查詢日志進行分類匯總。
由於這裡隻有一條慢查詢記錄,沒有體現出mysqldumpslow的作用,但如果慢查詢記錄多,就可以分類匯總
總結
到此這篇關於mysql日志系統的簡單使用教程的文章就介紹到這瞭,更多相關mysql日志系統內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!