導讀
Hi,大家好!我是白日夢!本文是MySQL專題的第 24 篇。
今天我要跟你分享的MySQL話題是:“自導自演的資料庫面試現場--談談MySQL的10種檔案”
換一種寫作風格,自導自演面試現場!感覺這樣還是比較有趣的,歡迎大家訂閱我的MySQL專題,公眾號首發!持續更新中~
歡迎關注白日夢,公眾號首發!持續連載中
你好,看你簡歷中有寫熟悉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隱碼攻擊的請況。
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就擁有了崩潰恢復的能力,這不香嗎?
嗯!自圓其說的可以,我沒有問題了,你還有什麼想問我的嗎?
嗯嗯,面試官大佬,您看我行嗎?
整體感覺還可以,應該會進入下一面。好好準備,
期待你下一面優秀的表現
推薦閱讀
- MySQL的修仙之路,圖文談談如何學MySQL、如何進階!(已釋出)
- 面前突擊!33道資料庫高頻面試題,你值得擁有!(已釋出)
- 大家常說的基數是什麼?(已釋出)
- 講講什麼是慢查!如何監控?如何排查?(已釋出)
- 對NotNull欄位插入Null值有啥現象?(已釋出)
- 能談談 date、datetime、time、timestamp、year的區別嗎?(已釋出)
- 瞭解資料庫的查詢快取和BufferPool嗎?談談看!(已釋出)
- 你知道資料庫緩衝池中的LRU-List嗎?(已釋出)
- 談談資料庫緩衝池中的Free-List?(已釋出)
- 談談資料庫緩衝池中的Flush-List?(已釋出)
- 瞭解髒頁刷回磁碟的時機嗎?(已釋出)
- 用十一張圖講清楚,當你CRUD時BufferPool中發生了什麼!以及BufferPool的優化!(已釋出)
- 聽說過表空間沒?什麼是表空間?什麼是資料表?(已釋出)
- 談談MySQL的:資料區、資料段、資料頁、資料頁究竟長什麼樣?瞭解資料頁分裂嗎?談談看!(已釋出)
- 談談MySQL的行記錄是什麼?長啥樣?(已釋出)
- 瞭解MySQL的行溢位機制嗎?(已釋出)
- 說說fsync這個系統呼叫吧! (已釋出)
- 簡述undo log、truncate、以及undo log如何幫你回滾事物! (已釋出)
- 我勸!這位年輕人不講MVCC,耗子尾汁! (已釋出)
- MySQL的崩潰恢復到底是怎麼回事? (已釋出)
- MySQL的binlog有啥用?誰寫的?在哪裡?怎麼配置 (已釋出)
- MySQL的bin log的寫入機制 (已釋出)
- 刪庫後!除了跑路還能幹什麼?(已釋出)
- 自導自演的面試現場,趣學資料庫的10種檔案(已釋出)