自導自演的面試現場,趣學MySQL的10種檔案

賜我白日夢發表於2021-01-29

導讀

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

今天我要跟你分享的MySQL話題是:“自導自演的資料庫面試現場--談談MySQL的10種檔案”

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

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

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

1
好!我們開始吧! 













                              

自導自演的面試現場,趣學MySQL的10種檔案

你好,看你簡歷中有寫熟悉MySQL資料庫啊。要不我們聊聊資料庫?自導自演的面試現場,趣學MySQL的10種檔案


嗯,好啊!


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

日常工作中你有沒有留意MySQL有哪些檔案?隨便說幾個自導自演的面試現場,趣學MySQL的10種檔案,順便說說它們各自有什麼用?自導自演的面試現場,趣學MySQL的10種檔案


好啊(內心:這泥馬自導自演的面試現場,趣學MySQL的10種檔案


自導自演的面試現場,趣學MySQL的10種檔案

日常工作中我有了解10個MySQL相關檔案。自導自演的面試現場,趣學MySQL的10種檔案 分別是:1、引數配置檔案 2、錯誤日誌檔案 3、慢查詢檔案  4、查詢日誌檔案 5、binlog檔案 6、socket檔案  7、pid檔案 8、表結構定義檔案 9、表空間檔案 10、redolog檔案自導自演的面試現場,趣學MySQL的10種檔案


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

你知道的還挺多自導自演的面試現場,趣學MySQL的10種檔案,那你說說MySQL的引數配置檔案叫什麼?自導自演的面試現場,趣學MySQL的10種檔案


MySQL的引數配置檔案叫:my.cnf    MySQL在啟動的時候

會去讀取載入這個配置檔案中的引數。並使用這個引數啟動。


而且這個my.cnf 並不是必須的,因為在大部分引數在編譯時都有

自己的預設值。


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

我怎麼找到MySQL的配置檔案呢?自導自演的面試現場,趣學MySQL的10種檔案


你可以使用命令:mysql--help | grep my.cnf找到這個配置檔案。


自導自演的面試現場,趣學MySQL的10種檔案


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

嗯,你說的沒錯!自導自演的面試現場,趣學MySQL的10種檔案你剛才還說了MySQL有:錯誤日誌檔案,

那你接著說一下你對MySQL錯誤日誌檔案的瞭解吧!自導自演的面試現場,趣學MySQL的10種檔案


錯誤日誌檔案中會記錄MySQL的 啟動、執行、關閉的資訊。一般

當我們發現MySQL啟動不了時,第一時間都會去檢視這個日誌中

都記錄了哪些錯誤資訊。


一般情況下,我們都會在my.cnf中加入配置:

自導自演的面試現場,趣學MySQL的10種檔案


這樣當資料庫啟動異常時,我們就去 /home/mysql/mysql/log/目錄下找對應當錯誤日誌,排錯。


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

嗯,可以的! 自導自演的面試現場,趣學MySQL的10種檔案

你剛才說你還了解MySQL的慢查詢日誌,說說看!自導自演的面試現場,趣學MySQL的10種檔案


慢查詢其實就是在說,SQL執行的速度很慢。具體多慢算是慢查詢呢?這個我們可以通過配置檔案人為的控制。


比如我可以在 my.cnf 這樣配置:

自導自演的面試現場,趣學MySQL的10種檔案


另外,預設情況下 MySQL不會幫我們記錄慢查詢日誌,而是需要我們主動通過配置開啟。 


開啟慢查詢日誌後,預設情況下,MySQL會認為執行時間超過10s的SQL才是慢SQL,才會記錄到慢查日誌中。


自導自演的面試現場,趣學MySQL的10種檔案

白日夢補充:更多關於慢查相關的知識點,可以參考前面的文章:聊聊什麼是慢查、如何監控?如何排查?

自導自演的面試現場,趣學MySQL的10種檔案

嗯,慢查說的還可以。你繼續說下其它的日誌吧!自導自演的面試現場,趣學MySQL的10種檔案


再說一下MySQL的查詢日誌吧。


見名知意,查詢日誌中會記錄:所有對MySQL請求的資訊,無論SQL有沒有被正確的執行,都會被記錄進這個查詢日誌中。


同樣的我可以在 my.cnf 中這樣配置,來控制查詢日誌的記錄位置


自導自演的面試現場,趣學MySQL的10種檔案


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

嗯,瞭解!瞭解MySQL的binlog嗎?談談看!自導自演的面試現場,趣學MySQL的10種檔案


binlog就是傳說中的MySQL的二進位制日誌,和查詢日誌不同的是:所有對資料庫產生修改的操作才會被記錄到binlog中。


所以像select 、show xxx這種不會對資料庫產生修改的型別的SQL只能在slow log中才能找到。像update delete 這樣的SQL才會被記錄進binlog中。


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

嗯,你接著說說binlog一般有什麼用吧!自導自演的面試現場,趣學MySQL的10種檔案


binlog常見的作用有如下幾點:


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


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


3、審計:可以通過審計binlog來分析,是否存在SQL隱碼攻擊的請況。


自導自演的面試現場,趣學MySQL的10種檔案

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

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

瞭解bin log的寫入機制嗎?說說你們線上如何調整引數的!

bin log有哪些格式?有啥區別?優缺點?線上用哪種格式?


自導自演的面試現場,趣學MySQL的10種檔案

小夥子可以!方才你還說了什麼 socket檔案、pid檔案。

你再跟我說說這兩個檔案分別是MySQL的什麼檔案吧!自導自演的面試現場,趣學MySQL的10種檔案


先說下這個socket檔案吧,它一般是在/tmp目錄下。在Unix作業系統中本地登陸MySQL時其實就是藉助於這個socket檔案實現的。


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

嘖嘖嘖,什麼叫本地登陸?自導自演的面試現場,趣學MySQL的10種檔案


哦!直觀的看,本地登陸就是你先登陸上作業系統,進入bash中,然後再通過 mysql -uroot -p的方式登陸MySQL。


遠端登陸就比如你在你的筆記本上通過網路遠端登陸百度雲上的MySQL。


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

嗯,你接著說。


再說下pid檔案吧。在Linux作業系統中,所有的程式都是有自己的程式ID的,MySQL也不例外。MySQL例項啟動之後會把自己的程式ID寫入到一個檔案中,這個檔案就叫做PID檔案。


預設這個PID檔案會在資料庫目錄下,檔名為:主機名.pid


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

嗯,瞭解自導自演的面試現場,趣學MySQL的10種檔案,你還知道哪些MySQL的檔案?接著說自導自演的面試現場,趣學MySQL的10種檔案


嗯,我還了解MySQL有:表結構定義檔案 和 表空間檔案。


先說下這個表結構定義檔案吧!


在MySQL中資料是以資料表的形式組織起來的,不管你使用的哪種儲存引擎,每個資料表都會有一個對應的表結構定義檔案。它裡面記錄了表結構定義資訊。


一般這個表結構定義檔案的字尾都是 .frm


比如就像下面這樣:

自導自演的面試現場,趣學MySQL的10種檔案


再有就是表空間檔案。


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

嗯,那你說說啥是表空間檔案自導自演的面試現場,趣學MySQL的10種檔案


表空間檔案是資料庫真正儲存資料的檔案。一般表空間檔案的字尾名是 .ibd , 如下圖:


自導自演的面試現場,趣學MySQL的10種檔案


一提到表空間大家都會說什麼:共享表空間、獨立表空間等等。本質上它們沒啥差別,都是MySQL用來儲存業務資料的檔案。


自導自演的面試現場,趣學MySQL的10種檔案

白日夢補充:
大家常說的表空間到底是什麼?究竟什麼又是資料表呢?

自導自演的面試現場,趣學MySQL的10種檔案

可以啊小夥子自導自演的面試現場,趣學MySQL的10種檔案,這些檔案都被你給說了個遍啊!自導自演的面試現場,趣學MySQL的10種檔案


沒,我還了解一點MySQL的redo日誌檔案......


自導自演的面試現場,趣學MySQL的10種檔案

自導自演的面試現場,趣學MySQL的10種檔案

那你說說看!自導自演的面試現場,趣學MySQL的10種檔案


redo log,見名知意他是MySQL的重做日誌檔案。這個redo log還是挺厲害的。它讓MySQL擁有了崩潰恢復的能力。


所謂崩潰恢復是指,伺服器當機、或者MySQL意外Crash後,MySQL重啟啟動可以將崩潰前記憶體中的資料恢復如初的能力。


自導自演的面試現場,趣學MySQL的10種檔案

白日夢補充:
傳說中的MySQL的redo log是什麼?談談看!
全網最牛X的!MySQL兩階段提交串講!沒有之一!

自導自演的面試現場,趣學MySQL的10種檔案

嗯!最後再問一下問題吧!  自導自演的面試現場,趣學MySQL的10種檔案

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

的效能嗎?


嗯,首先來說,寫日誌肯定會拖累MySQL的整體的效能。  自導自演的面試現場,趣學MySQL的10種檔案


比如說:預設情況下,像binlog、慢查詢日誌,MySQL都不會幫我們主動記錄,而是需要我們通過配置去主動開啟!


這其實是在一定程度上暗示使用者,如果你不需要寫該日誌給你帶來的種種好處,那麼你可以選擇不讓MySQL記錄那種日誌從而換來效能上的提升。



自導自演的面試現場,趣學MySQL的10種檔案


但是MySQL記錄日誌的形式是:順序的磁碟IO,只是追加寫,並不是隨機磁碟IO,所有其實寫日誌總體效能也沒有那麼的差!自導自演的面試現場,趣學MySQL的10種檔案


而且記錄日誌自然有記錄日誌的好處,就比如MySQL記錄binlog,可能會降低1%的效能,但是MySQL就擁有了 搭建叢集、資料備份、審計的能力啊。難道它不香嗎?自導自演的面試現場,趣學MySQL的10種檔案


寫redolog後,MySQL就擁有了崩潰恢復的能力,這不香嗎?自導自演的面試現場,趣學MySQL的10種檔案


自導自演的面試現場,趣學MySQL的10種檔案


自導自演的面試現場,趣學MySQL的10種檔案

嗯!自圓其說的可以自導自演的面試現場,趣學MySQL的10種檔案,我沒有問題了,你還有什麼想問我的嗎?


嗯嗯,面試官大佬,您看我行嗎?自導自演的面試現場,趣學MySQL的10種檔案


自導自演的面試現場,趣學MySQL的10種檔案


自導自演的面試現場,趣學MySQL的10種檔案

整體感覺還可以,應該會進入下一面。好好準備,

期待你下一面優秀的表現自導自演的面試現場,趣學MySQL的10種檔案



推薦閱讀

  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種檔案(已釋出)

相關文章