大型面試現場,趣學MySQL的10種文件

導讀

Hi,你們好!我是白日夢!本文是MySQL專題的第 24 篇。mysql

今天我要跟你分享的MySQL話題是:「自導自演的數據庫面試現場--談談MySQL的10種文件」web

換一種寫做風格,自導自演面試現場!感受這樣仍是比較有趣的,歡迎你們訂閱個人MySQL專題,公衆號首發!持續更新中~
面試

點擊閱讀原文,格式會好看一點哦~sql

點擊閱讀原文,格式會好看一點哦~數據庫

點擊閱讀原文,格式會好看一點哦~緩存

歡迎關注白日夢,公衆號首發!持續連載中

bash

1
好!咱們開始吧! 













                              


你好,看你簡歷中有寫熟悉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注入的請況。



白日夢補充:更多關於binlog的筆記。

MySQL的 bin log有啥用?在哪裏?誰寫的?怎麼配置?

瞭解bin log的寫入機制嗎?說說大家線上如何調整參數的!

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的redo log是什麼?談談看!
全網最牛X的!MySQL兩階段提交串講!沒有之一!


嗯!最後再問一下問題吧!  

上面你說了那麼多日誌,那寫日誌難道不會拖累MySQL

的性能嗎?


嗯,首先來講,寫日誌確定會拖累MySQL的總體的性能。  


好比說:默認狀況下,像binlog、慢查詢日誌,MySQL都不會幫咱們主動記錄,而是須要咱們經過配置去主動開啓!


這實際上是在必定程度上暗示使用者,若是你不須要寫該日誌給你帶來的種種好處,那麼你能夠選擇不讓MySQL記錄那種日誌從而換來性能上的提高。




可是MySQL記錄日誌的形式是:順序的磁盤IO,只是追加寫,並非隨機磁盤IO,全部其實寫日誌整體性能也沒有那麼的差!


並且記錄日誌天然有記錄日誌的好處,就好比MySQL記錄binlog,可能會下降1%的性能,可是MySQL就擁有了 搭建集羣、數據備份、審計的能力啊。難道它不香嗎?


寫redolog後,MySQL就擁有了崩潰恢復的能力,這不香嗎?




嗯!自圓其說的能夠,我沒有問題了,你還有什麼想問個人嗎?


嗯嗯,面試官大佬,您看我行嗎?




總體感受還能夠,應該會進入下一面。好好準備,

期待你下一面優秀的表現



推薦閱讀

  1. MySQL的修仙之路,圖文談談如何學MySQL、如何進階!(已發佈)
  2. 面前突擊!33道數據庫高頻面試題,你值得擁有!(已發佈)
  3. 你們常說的基數是什麼?(已發佈)
  4. 講講什麼是慢查!如何監控?如何排查?(已發佈)
  5. 對NotNull字段插入Null值有啥現象?(已發佈)
  6. 能談談 date、datetime、time、timestamp、year的區別嗎?(已發佈)
  7. 瞭解數據庫的查詢緩存和BufferPool嗎?談談看!(已發佈)
  8. 你知道數據庫緩衝池中的LRU-List嗎?(已發佈)
  9. 談談數據庫緩衝池中的Free-List?(已發佈)
  10. 談談數據庫緩衝池中的Flush-List?(已發佈)
  11. 瞭解髒頁刷回磁盤的時機嗎?(已發佈)
  12. 用十一張圖講清楚,當你CRUD時BufferPool中發生了什麼!以及BufferPool的優化!(已發佈)
  13. 據說過表空間沒?什麼是表空間?什麼是數據表?(已發佈)
  14. 談談MySQL的:數據區、數據段、數據頁、數據頁究竟長什麼樣?瞭解數據頁分裂嗎?談談看!(已發佈)
  15. 談談MySQL的行記錄是什麼?長啥樣?(已發佈)
  16. 瞭解MySQL的行溢出機制嗎?(已發佈)
  17. 說說fsync這個系統調用吧! (已發佈)
  18. 簡述undo log、truncate、以及undo log如何幫你回滾事物! (已發佈)
  19. 我勸!這位年輕人不講MVCC,耗子尾汁! (已發佈)
  20. MySQL的崩潰恢復究竟是怎麼回事? (已發佈)
  21. MySQL的binlog有啥用?誰寫的?在哪裏?怎麼配置 (已發佈)
  22. MySQL的bin log的寫入機制 (已發佈)
  23. 刪庫後!除了跑路還能幹什麼?(已發佈)
  24. 自導自演的面試現場,趣學數據庫的10種文件(已發佈)
相關文章
相關標籤/搜索