天天看點

MySQL之檔案

1.參數檔案

  當MySQL執行個體啟動時,資料庫會先去讀一個配置參數檔案,用來尋找資料庫的各種檔案所在的位置以及指定某些初始化參數,這些參數通常定義了某種記憶體結構有多大等。在預設輕快下,MySQL執行個體會按照一定的順序在指定的位置進行讀取,使用者隻需要通過指令mysql --help | grep my.cnf 來尋找即可

 1.1參數類型

  MySQL資料庫中的參數可以分為兩類:

動态參數

靜态參數 

  動态參數意味着可以在MySQL執行個體中進行更改,靜态則不能。可以通過SET指令對動态的參數值進行修改,文法如下:

  set [global | session] key = value

  其中global和session關鍵字表明該參數的修改是基于目前會話還是整個執行個體的生命周期。需要注意的是,即使使用global對變量的全局值進行了修改,但MySQL執行個體本身不會對參數檔案中的該值進行修改,也就是說,在下次啟動時MySQL執行個體還是會讀取參數檔案。如果想保留修改,可以直接自行修改參數檔案。

2.日志檔案

  日志檔案記錄了影響MySQL資料庫的各種類型的活動。MySQL資料庫中常見的日志檔案有:

錯誤日志

二進制日志

慢查詢日志

查詢日志

 2.1錯誤日志

  錯誤日志檔案對MySQL的啟動、運作、關閉過程進行了記錄。在遇到問題時可以通過錯誤日志定位問題,該檔案不僅記錄了所有的錯誤資訊,也記錄了一些警告資訊或正确的資訊。可以通過指令 SHOW VARIABLES LIKE 'log_error' 來定位該檔案

 2.2慢查詢日志

  慢查詢日志可以幫助我們定位可能存在問題的SQL語句,進而進行SQL語句層面的優化。例如,可以在MySQL啟動時設一個門檻值,将運作時間超過該值的所有SQL語句都記錄到慢查詢日志檔案中。每隔一段時間對其進行檢查,确認是否有SQL語句需要優化。改門檻值可以通過參數 long_query_time 來設定,預設值為10,代表10秒。

  在預設情況下,MySQL資料庫不會啟動慢查詢日志,需要手動将 log_slow_queries 這個參數設定為ON。

 2.3查詢日志

  查詢日志記錄了所有對MySQL資料庫請求的資訊,無論這些請求是否得到了正确的執行。預設檔案名為:主機名.log。

 2.4二進制日志

  二進制日志記錄了對MySQL資料庫執行更改的所有操作,其實這次更改操作并沒有導緻資料庫發生變化。二進制日志主要有以下幾種作用。

恢複:某些資料的恢複需要二進制日志。例如,在一個資料庫全備檔案恢複後,可以通過二進制日志進行 point-in-time 的恢複

複制:原理與恢複類似,通過複制和執行二進制日志時一台原創的MySQL資料庫(slave)與一台MySQL資料庫(master)進行試試同步

審計:可以通過二進制日志中的資訊來進行審計,判斷是否有對資料庫進行注入的攻擊

3.套接字檔案

  在UNIX系統下本地連接配接MySQL可以采用UNIX域套接字方式,這種方式需要一個套接字(socket)檔案。套接字檔案可由參數socket控制。一般在 /tmp 目錄下,名為 mysql.sock

4.pid檔案

  當MySQL執行個體啟動時,會将自己的程序ID寫入pid檔案中,該檔案可由參數 pid_file 控制,預設位于資料庫目錄下,檔案名為 主機名.pid

5.表結構定義檔案

  因為MySQL插件式存儲引擎的體系結構的關系,MySQL資料的存儲是更具表進行的,每個表都會有對應的檔案。但不論表采用什麼存儲引擎,MySQL都有一個以frm為字尾名的檔案,這個檔案記錄了該表的表結構定義。

  frm還用來存放視圖的定義,該檔案是文本檔案,可以直接使用 cat 指令進行檢視

6.存儲引擎檔案(InnoDB)

 6.1表空間檔案

  InnoDB采用将存儲的資料按表空間進行存放的設計。在預設配置下會有一個初始大小為10MB,名為ibdata1的表空間檔案。

 6.2重做日志檔案

  在預設情況下,在InnoDB存儲引擎的資料目錄下會有兩個名為ib_logfile0和ib_logfile1的檔案。當執行個體或媒體失敗時,InnoDB存儲引擎會使用重做日志恢複到失敗前的時刻,以此來保證資料的完整性。

  每個InnoDB存儲引擎至少有一個重做日志檔案組,每個檔案組下至少有2個重做日志檔案。為了得到更高的可靠性,也可以設定多個鏡像日志組,将不同的檔案組放在不同的磁盤上。

摘自MySQL技術内幕InnoDB存儲引擎第2版