本文主要基於MySQL 5.7版本的數據庫環境,總結不一樣類型文件用途,讓更多的人對MySQL技術體系有更全面、更專業的深度瞭解。mysql
1、參數文件sql
一、數據庫的參數文件my.cnf,客戶端、服務端的參數都在這裏配置,MySQL實例啓動時加載生效。數據庫
二、參數分爲動態參數和靜態參數,具體能夠查看官方手冊。json
三、參數文件總體結構vim
其中服務端參數能夠經過命令show variables like %參數名%來查看當前的參數配置,參數文件總體結構:服務器
[client]網絡
#客戶端參數:端口號、字符編碼等多線程
[mysql]架構
#服務端參數:字符編碼併發
[mysqlid]
#服務端參數:端口號、數據目錄地址(datadir參數)、併發鏈接數、各類內存緩衝區大小、慢查詢控制、刷盤策略、字符編碼、二進制日誌文件控制等
[mysqldump]
#服務端參數:備份操做
2、錯誤日誌文件
一、數據庫的錯誤日誌文件默認存放在數據目錄下,以error.log做爲文件名稱後綴。
二、記錄MySQL啓動、運行、關閉過程當中出現的問題,經常使用來輔助定位問題。
三、Warning日誌信息經過對一些優化工做有幫助,好比建議配置explicit_defaults_for_timestamp參數來決定TIMESTAMP類型行爲。
3、二進制日誌文件
一、數據庫的二進制文件默認存放在數據目錄下,默認以主機名稱做爲文件名稱,能夠設置文件名稱前綴、後綴。
二、只會記錄對數據真正進行修改的操做語句DML、DDL,好比select、show默認不會被記錄,若是須要記錄,則須要開啓全量日誌功能。
三、在主從架構環境中,記錄master數據庫上全部真正執行修改行爲的操做記錄,而後經過網絡發送到slave數據庫,完成主從複製。
四、宕機場景,經過mysqlbinlog命令,實現基於時間點和位置的恢復操做。
五、執行命令show binary logs能夠查看當前binlog文件及值的大小。
六、執行命令show master status能夠查看當前的日誌文件名稱及狀態、文件的偏移量。
七、mysql-bin.index文件是二進制日誌的索引文件,記錄產生的二進制日誌的序號。
八、主要參數:
max_binlog_size
binlog_cache_size、binlog_cache_disk_use、binlog_cache_use
binglog_format
sync_binlog
expire_logs_days
binlog_do_db
log_slave_updates
binlog_checksum
log_bin_use_v1_row_events
binlog_row_image
九、二進制文件不能直接使用命令cat、tail、head查看,須要經過mysqlbinlog命令查看二進制日誌並作格式轉換,而後輸出到獨立的文件bin.log後,使用vim等工具查看。
4、慢查詢日誌文件
一、數據庫的慢查詢日誌文件默認存放在數據目錄下,通常以low.log爲文件名稱的後綴。
二、默認是開啓記錄慢查詢日誌的。
三、記錄超過參數long_query_time時間的全部SQL語句,從而輔助優化SQL語句。
四、慢查詢日誌文件逐漸增大,使用命令vim、cat,或使用命令mysqldumpslow都不方便,能夠選擇通過採集併發送到專業的分析平臺方便查看。這方面的開源工具較多。
五、文件的主要內容:數據庫名稱、用戶名稱、語句及執行耗時狀況
5、全量日誌文件
一、數據庫的全量日誌文件general logs默認存放在數據目錄下。
二、記錄數據庫全部操做的SQL語句,包含了select和show,所以文件將會較大。
三、默認是關閉狀態,不會記錄全量日誌。
四、可能會選擇臨時開啓,檢測故障。
五、主要參數:log_output(影響general和show log的存儲方式,推薦使用FILE方式存儲)
6、審計日誌文件
一、數據庫的審計日誌文件默認存放在數據目錄下,通常以audit.log或audit.json爲文件名稱的後綴。
二、實時記錄網絡上的數據庫活動,記錄、分析、彙報用戶訪問數據庫的行爲,主要用於事故的追溯;
三、官方提供的審計組件須要收費,能夠選擇第三方開源組件。
7、中繼日誌文件(relay log)
一、數據庫的中繼日誌文件默認存放在數據目錄下。
二、主從複製場景中,salve服務器上的一個很重要的文件。
slave服務器I/O線程將master服務器的二進制日誌讀取並記錄到slave服務器本地文件中,而後slave服務器的SQL線程會讀取中繼日誌文件的內容並應用到slave服務器。
8、pid文件
一、數據庫的pid文件默認存放在數據目錄下,以主機名做爲文件名稱的前綴。
二、MySQL數據庫是一個單進程多線程模型的數據庫。
三、實例啓動後,會將本身惟一的進程號寫入到本身的pid文件。
9、socket文件
一、數據庫的socket文件默認存放在/tmp/mysql.sock。
二、mysql.sock文件是服務器與本地客戶端進行通訊的UNIX套接字文件。
10、表結構文件
一、以.frm爲文件名稱的後綴,5.8版本以後,改有系統表空間來實現。
11、InnoDB存儲引擎文件
一、InnoDB支持事務,支持MVCC多版本併發控制。
二、InnoDB是索引組織表,每行記錄都實現了三個隱藏字段:
DB_ROW_ID:
DB_TRX_ID:每行記錄的事務ID
DB_ROLL_PTR:每行記錄的回滾指針
三、InnoDB有一個全局的事務鏈表,每一個事務的開始都會把事務ID放到鏈表中。DB_ROLL_PTR指針用於指向undo記錄,構造多版本。
四、redo日誌文件用於記錄事務操做的變化,記錄的是數據被修改以後的值。工做機制是刷新機制。
五、undo日誌文件用於記錄變動前的舊數據
歡迎關注個人我的公衆號