MySQL數據庫和InnoDB引擎的各種類型文件:
- 參數文件:告訴MySQL在實例啓動時在哪裏找到數據庫文件,保存某些初始化參數
- 日誌文件:錯誤日誌文件,二進制日誌文件,慢查詢日誌文件(記錄所有執行時間超過long_query_time秒的所有查詢或者不使用索引的查詢),查詢日誌文件(記錄建立的客戶端連接和執行的語句)等
- socket文件:用UNIX socket方式連接時需要的文件
- pid文件:MySQL實例的進程ID文件
- MySQL表結構文件:存放MySQL表結構定義文件
- 存儲引擎文件:保存存儲引擎相關的文件,真正存儲了記錄和索引等數據。
參數文件
MySQL實例啓動時讀取的配置參數文件,用來尋找數據庫的各種文件位置和指定某些初始化參數(一系列的key-value值)。
參數也分動態和靜態參數
日誌文件
記錄數據庫各種類型活動
錯誤日誌
記錄所有錯誤信息和一些警告/正確信息
慢查詢日誌
可以用來定位可能存在問題的SQL語句,來進行SQL語句層面的優化。他會把執行時間超過閾值的SQL記錄起來。閾值參數long_query_time,默認10秒。如果某個SQL語句沒有使用索引,也會記錄在這裏面,每分鐘記錄沒用到索引的SQL語句次數可通過參數log_throttle_queries_not_using_indexes. 默認0無限制個數。
查詢日誌
記錄所有對MySQL數據庫請求的信息
二進制日誌
記錄了對MySQL數據庫執行更改的所有操作,但不包括SELECT和SHOW這類操作,因爲這類操作對數據本身並沒有修改。
默認情況下不會啓動,需要手動指定參數來啓動。
二進制日誌的作用:
- 恢復:某些數據的恢復需要二進制文件,比如point-in-time恢復
- 複製:通過複製和執行二進制日誌來實時同步遠程MySQL和本地MySQL
- 審計:通過log來判斷是否有對數據庫進行注入攻擊等
未提交時也有緩衝機制來緩存
socket文件
UNIX用socket方式連接時需要的文件,路徑一般是/tmp/mysql.sock
pid文件
MySQL實例啓動時會將自己的PID寫入一個文件,即pid文件
表結構定義文件
MySQL數據的存儲是根據表進行的,每個表都有與之對應的文件, MySQL都有一個以frm爲後綴名的文件,該文件記錄了該表的表結構定義。
InnoDB存儲引擎文件
每個表存儲引擎都有自己獨立文件,包括redo log文件,表空間文件等。
表空間文件
InnoDB採用將存儲的數據按表空間進行存放的設計。默認情況下會有一個10MB大小的表空間文件
重做日誌文件
當數據庫出現掉電等問題時,可以用redo log文件中存儲的最新信息來保證數據的完整性。
每個InnoDB引擎至少有一個redo log日誌文件組,每個組下至少有2個redo log文件。用戶也可以設置其他的鏡像文件來提高可用性和安全性。
redo日誌會循環寫入各個redo log文件,遍歷完後又重頭開始覆寫。
寫入redo log日誌文件的操作不是直接寫,而是先寫入redo log buffer,再按照一定條件順序來寫入日誌文件。redo log buffer寫入redo log文件時每次寫入的大小是最小扇區大小512byte,可以保證寫入必定成功,不需要double write。