自導自演的面試現場,趣學MySQL的10種文件

導讀

Hi,大家好!我是白日夢!本文是MySQL專題的第 24 篇。

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

換一種寫作風格,自導自演面試現場!感覺這樣還是比較有趣的,歡迎大家訂閱我的MySQL專題,公眾號首發!持續更新中~

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

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

1
好!我們開始吧! 













                              


你好,看你簡歷中有寫熟悉MySQL資料庫啊。要不咱聊聊資料庫?


嗯,好啊!




日常工作中你有沒有留意MySQL有哪些文件?隨便說幾個,順便說說它們各自有什麼用?


好啊(內心:這泥馬)



日常工作中我有了解10個MySQL相關文件。 分別是:1、參數配置文件 2、錯誤日誌文件 3、慢查詢文件  4、查詢日誌文件 5、binlog文件 6、socket文件  7、pid文件 8、表結構定義文件 9、表空間文件 10、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常見的作用有如下幾點:


1、主從複製(replication)我們線上使用的資料庫都是一主兩從或者是一主多從的資料庫集群。目的是為了做讀寫分離嘛。也就是讓從庫承擔主庫的讀流量。


2、數據恢復:比如線上的數據被不小心誤刪除了,可以藉助binlog將數據恢復如初。


3、審計:可以通過審計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種文件(已發布)
Tags: