Hi,你們好!我是白日夢!本文是MySQL專題的第 24 篇。mysql
今天我要跟你分享的MySQL話題是:「自導自演的數據庫面試現場--談談MySQL的10種文件」web
換一種寫做風格,自導自演面試現場!感受這樣仍是比較有趣的,歡迎你們訂閱個人MySQL專題,公衆號首發!持續更新中~
面試
歡迎關注白日夢,公衆號首發!持續連載中
bash
你好,看你簡歷中有寫熟悉MySQL數據庫啊。要不咱聊聊數據庫? 服務器
嗯,好啊! 網絡
平常工做中你有沒有留意MySQL有哪些文件?隨便說幾個,順便說說它們各自有什麼用? app
好啊(心裏:這泥馬)
平常工做中我有了解10個MySQL相關文件。 分別是:一、參數配置文件 二、錯誤日誌文件 三、慢查詢文件 四、查詢日誌文件 五、binlog文件 六、socket文件 七、pid文件 八、表結構定義文件 九、表空間文件 十、redolog文件
你知道的還挺多,那你說說MySQL的參數配置文件叫什麼?
MySQL的參數配置文件叫:my.cnf MySQL在啓動的時候
會去讀取加載這個配置文件中的參數。並使用這個參數啓動。
並且這個my.cnf 並非必須的,由於在大部分參數在編譯時都有
本身的默認值。
我怎麼找到MySQL的配置文件呢?
你可使用命令:mysql--help | grep my.cnf找到這個配置文件。
嗯,你說的沒錯!你剛纔還說了MySQL有:錯誤日誌文件,
那你接着說一下你對MySQL錯誤日誌文件的瞭解吧!
錯誤日誌文件中會記錄MySQL的 啓動、運行、關閉的信息。通常
當咱們發現MySQL啓動不了時,第一時間都會去查看這個日誌中
都記錄了哪些錯誤信息。
通常狀況下,咱們都會在my.cnf中加入配置:
這樣當數據庫啓動異常時,咱們就去 /home/mysql/mysql/log/目錄下找對應當錯誤日誌,排錯。
嗯,能夠的!
你剛纔說你還了解MySQL的慢查詢日誌,說說看!
慢查詢其實就是在說,SQL執行的速度很慢。具體多慢算是慢查詢呢?這個咱們能夠經過配置文件人爲的控制。
好比我能夠在 my.cnf 這樣配置:
另外,默認狀況下 MySQL不會幫咱們記錄慢查詢日誌,而是須要咱們主動經過配置開啓。
開啓慢查詢日誌後,默認狀況下,MySQL會認爲執行時間超過10s的SQL纔是慢SQL,纔會記錄到慢查日誌中。
嗯,慢查說的還能夠。你繼續說下其它的日誌吧!
再說一下MySQL的查詢日誌吧。
見名知意,查詢日誌中會記錄:全部對MySQL請求的信息,不管SQL有沒有被正確的執行,都會被記錄進這個查詢日誌中。
一樣的我能夠在 my.cnf 中這樣配置,來控制查詢日誌的記錄位置
嗯,瞭解!瞭解MySQL的binlog嗎?談談看!
binlog就是傳說中的MySQL的二進制日誌,和查詢日誌不一樣的是:全部對數據庫產生修改的操做纔會被記錄到binlog中。
因此像select 、show xxx這種不會對數據庫產生修改的類型的SQL只能在slow log中才能找到。像update delete 這樣的SQL纔會被記錄進binlog中。
嗯,你接着說說binlog通常有什麼用吧!
binlog常見的做用有以下幾點:
一、主從複製(replication)咱們線上使用的數據庫都是一主兩從或者是一主多從的數據庫集羣。目的是爲了作讀寫分離嘛。也就是讓從庫承擔主庫的讀流量。
二、數據恢復:好比線上的數據被不當心誤刪除了,能夠藉助binlog將數據恢復如初。
三、審計:能夠經過審計binlog來分析,是否存在SQL注入的請況。
MySQL的 bin log有啥用?在哪裏?誰寫的?怎麼配置?
小夥子能夠!方纔你還說了什麼 socket文件、pid文件。
你再跟我說說這兩個文件分別是MySQL的什麼文件吧!
先說下這個socket文件吧,它通常是在/tmp目錄下。在Unix操做系統中本地登錄MySQL時其實就是藉助於這個socket文件實現的。
嘖嘖嘖,什麼叫本地登錄?
哦!直觀的看,本地登錄就是你先登錄上操做系統,進入bash中,而後再經過 mysql -uroot -p的方式登錄MySQL。
遠程登錄就好比你在你的筆記本上經過網絡遠程登錄百度雲上的MySQL。
嗯,你接着說。
再說下pid文件吧。在Linux操做系統中,全部的程序都是有本身的進程ID的,MySQL也不例外。MySQL實例啓動以後會把本身的進程ID寫入到一個文件中,這個文件就叫作PID文件。
默認這個PID文件會在數據庫目錄下,文件名爲:主機名.pid
嗯,瞭解,你還知道哪些MySQL的文件?接着說
嗯,我還了解MySQL有:表結構定義文件 和 表空間文件。
先說下這個表結構定義文件吧!
在MySQL中數據是以數據表的形式組織起來的,無論你使用的哪一種存儲引擎,每一個數據表都會有一個對應的表結構定義文件。它裏面記錄了表結構定義信息。
通常這個表結構定義文件的後綴都是 .frm
好比就像下面這樣:
再有就是表空間文件。
嗯,那你說說啥是表空間文件
表空間文件是數據庫真正存儲數據的文件。通常表空間文件的後綴名是 .ibd , 以下圖:
一提到表空間你們都會說什麼:共享表空間、獨立表空間等等。本質上它們沒啥差異,都是MySQL用來存儲業務數據的文件。
能夠啊小夥子,這些文件都被你給說了個遍啊!
沒,我還了解一點MySQL的redo日誌文件......
那你說說看!
redo log,見名知意他是MySQL的重作日誌文件。這個redo log仍是挺厲害的。它讓MySQL擁有了崩潰恢復的能力。
所謂崩潰恢復是指,服務器宕機、或者MySQL意外Crash後,MySQL重啓啓動能夠將崩潰前內存中的數據恢復如初的能力。
嗯!最後再問一下問題吧!
上面你說了那麼多日誌,那寫日誌難道不會拖累MySQL
的性能嗎?
嗯,首先來講,寫日誌確定會拖累MySQL的總體的性能。
好比說:默認狀況下,像binlog、慢查詢日誌,MySQL都不會幫咱們主動記錄,而是須要咱們經過配置去主動開啓!
這實際上是在必定程度上暗示使用者,若是你不須要寫該日誌給你帶來的種種好處,那麼你能夠選擇不讓MySQL記錄那種日誌從而換來性能上的提高。
可是MySQL記錄日誌的形式是:順序的磁盤IO,只是追加寫,並非隨機磁盤IO,全部其實寫日誌整體性能也沒有那麼的差!
並且記錄日誌天然有記錄日誌的好處,就好比MySQL記錄binlog,可能會下降1%的性能,可是MySQL就擁有了 搭建集羣、數據備份、審計的能力啊。難道它不香嗎?
寫redolog後,MySQL就擁有了崩潰恢復的能力,這不香嗎?
嗯!自圓其說的能夠,我沒有問題了,你還有什麼想問個人嗎?
嗯嗯,面試官大佬,您看我行嗎?
總體感受還能夠,應該會進入下一面。好好準備,
期待你下一面優秀的表現