你們能夠叫我老張,網名superZS!一直從事數據庫行業10餘年,工做於某數據庫服務公司,兼數據庫資深講師,就面試中你們遇到的比較困惑的數據庫問題,和剛進入數據庫領域的同窗們,我在這裏給你們作一個詳細的總結,但願對你們在工做或者面試中有所幫助,老師會傾囊相授,道行尚淺,你們相互學習!讓咱們努力學習技術,爲了拿到高薪,追到心儀的姑娘,而奮鬥吧!
html
葵花寶典
mysql
Question 1:
面試
你目前接觸的mysql版本是什麼?除了官方版本,還接觸過其餘的mysql分支版本嘛?sql
產生分支的緣由數據庫
許多開發人員認爲有必要將其拆分紅其餘項目,而且每一個分支項目都有本身的專長。該需求以及Oracle對核心產品增加緩慢的擔心,致使出現了許多開發人員感興趣的子項目和分支緩存
三個流行MySQL分支:Drizzle、MariaDB和Percona Server(包括XtraDB引擎)安全
MariaDB不只是mysql的替代品,主要仍是創新和提升mysql自有技術。服務器
新功能介紹網絡
multi-source replication 多源複製session
表的並行複製
galera cluster集羣
spider水平分片
tokuDB存儲引擎
XtraDB是innodb存儲引擎的加強版,可用來更好地發揮最新的計算機硬件系統性能,還包含在高性能模式下的新特性。它能夠向下兼容,由於它是在innodb基礎上構建,因此他有更多的指標和擴展功能。並且它在cpu多核的條件下,能夠更好地使用內存,時數據庫性能提到更高!
Drizzle與mysql的差異就比較大了,而且不能兼容,若是想運行此環境,就須要重寫一些代碼了!
Question 2:
mysql主要的存儲引擎myisam和innodb的不一樣之處?
事務的支持不一樣(innodb支持事務,myisam不支持事務)
鎖粒度(innodb行鎖應用,myisam表鎖)
存儲空間(innodb既緩存索引文件又緩存數據文件,myisam只能緩存索引文件)
存儲結構
(myisam:數據文件的擴展名爲.MYD myData ,索引文件的擴展名是.MYI myIndex)
(innodb:全部的表都保存在同一個數據文件裏面 即爲.Ibd)
5. 統計記錄行數
(myisam:保存有表的總行數,select count(*) from table;會直接取出出該值)
(innodb:沒有保存表的總行數,select count(*) from table;就會遍歷整個表,消耗至關大)
Question 3:
Innodb的體系結構簡單介紹一下?
談及到innodb的體系結構,首先要考慮mysql的體系結構,分爲兩部分mysql的server層和存儲引擎層
先要跟面試官聊清楚mysql的總體方向,而後再去涉及innodb體系結構
建議從三方面介紹innodb體系結構:內存----線程-----磁盤
內存中包含insert_buffer,data_buffer,index_buffer,redo_log_buffer,double_write
內存刷新到磁盤的機制,redo,髒頁,binlog的刷新條件
各類線程的做用,master_thread,purge_thread,redo log thread,read thread,write thread,page cleaner thread
磁盤中存放着數據文件,redo log,undo log,binlog
Question 4:
mysql有哪些索引類型:
數據結構角度上能夠分:B+tree索引,hash索引,fulltext索引(innodb,myisam都支持)
存儲角度上能夠分:彙集索引,非彙集索引
邏輯角度上能夠分:primary key,normal key,單列,複合,覆蓋索引
Question 5:
mysql binlog有幾種格式:
1. statement
優勢:不須要記錄每一行的變化,減小了binlog日誌量,節約了IO,提升性能
缺點:當使用一些特殊函數的時候,或者跨庫操做的時候容易丟失數據
注:在生產中不建議使用
2. row
優勢:清晰記錄每行的數據信息,不會出現跨庫丟數據的狀況
缺點:內容當記錄到日誌中的時候,都將以每行記錄的修改來記錄,但就會產生大量的binlog,對於網絡開銷也比較大
注:生產中推薦使用
3. mixed
是mysql5.1的時候,一個過渡版本,DDL語句會記錄成statement,DML會記錄row。
注:生產中不建議使用
Qusetion 6:
mysql主從複製的具體原理是什麼?
主服務器把數據更新記錄到二進制日誌中,從服務器經過io thread向主庫發起binlog請求,主服務器經過IO dump thread把二進制日誌傳遞給從庫,從庫經過io thread記錄到本身的中繼日誌中。而後再經過sql thread應用中繼日誌中sql的內容。
Qusetion 7:
數據庫中雙一是什麼?
sync_binlog=1
innodb_flush_log_at_trx_commit=1
innodb_flush_log_at_trx_commit和sync_binlog 兩個參數是控制MySQL 磁盤寫入策略以及數據安全性的關鍵參數
innodb_flush_log_at_trx_commit設置爲1,每次事務提交時MySQL都會把log buffer的數據寫入log file,而且刷到磁盤中去。
sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進制日誌binary log時,會使用fdatasync()函數將它的寫二進制日誌binary log同步到磁盤中去
Qusetion 8:
如何監控mysql replication複製延遲?
能夠經過第三方工具 業界中的瑞士×××percona-toolkit中的命令,pt-heartbeat進行主從延遲監控。
傳統方法,經過比較主從服務器之間的position號的差別值。
還能夠經過查看seconds_behind_master估算一下主從延遲時間
Qusetion 9:
大表DDL語句,如何實施,才能把性能影響降到最低?
能夠經過傳統方法導入導出數據,新建一張與原表同樣的表結構,把須要執行的ddl語句在無數據的新表執行,而後把老表中的數據導入到新表中,把新表改爲老表的名字
經過第三方工具 業界中的瑞士×××percona-toolkit中的命令,pt-online-schema-change進行在線操做
對於新版本的mysql(5.7)能夠直接在線online ddl
Qusetion 10:
爲何要爲innodb表設置自增列作主鍵?
1.使用自增列作主鍵,寫入順序是自增的,和B+數葉子節點分裂順序一致
2.表不指定自增列作主鍵,同時也沒有能夠被選爲主鍵的惟一索引,InnoDB就會選擇內置的rowid做爲主鍵,寫入順序和rowid增加順序一致
因此InnoDB表的數據寫入順序能和B+樹索引的葉子節點順序一致的話,這時候存取效率是最高
Qusetion 11:
如何優化一條有問題的sql語句?
針對sql語句的優化,咱們不要上來就回答添加索引,這樣顯得太不專業。咱們能夠從以下幾個角度去分析
迴歸到表的設計層面,數據類型選擇是否合理
大表碎片的整理是否完善
表的統計信息,是否是準確的
審查表的執行計劃,判斷字段上面有沒有合適的索引
針對索引的選擇性,創建合適的索引(就又涉及到大表DDL的操做問題)
Qusetion 12:
服務器負載太高或者網頁打開緩慢,簡單說說你的優化思路 ?
首先咱們要發現問題的過程,經過操做系統,數據庫,程序設計,硬件角度四個維度找到問題所在
找到瓶頸點的位置
制定好優化方案,造成處理問題的體系
體系制定好以後,在測試環境進行優化方案的測試
測試環境若是優化效果很好,再實施到生產環境
作好處理問題的記錄
Qusetion 13:
接觸過哪些mysql的主流架構?架構應用中有哪些問題須要考慮?
M-S
MHA
MM keepalived
PXC
共同存在的問題:主從延遲問題的存在,在主庫宕機,切換過程當中要考慮數據一致性的問題,避免出現主從複製不一致
Qusetion14:
什麼是死鎖?鎖等待?如何優化這類問題?經過數據庫哪些表能夠監控?
死鎖是指兩個或多個事務在同一資源上互相佔用,並請求加鎖時,而致使的惡性循環現象。當多個事務以不一樣順序試圖加鎖同一資源時,就會產生死鎖。
鎖等待:mysql數據庫中,不一樣session在更新同行數據中,會出現鎖等待
重要的三張鎖的監控表innodb_trx,innodb_locks,innodb_lock_waits
Qusetion 15:
處理過mysql哪些案例
咱們能夠簡單從mysql四個知識模塊跟他聊聊mysql體系結構,數據備份恢復,優化,高可用集羣架構
mysql版本的升級
處理mysql集羣的各類坑和問題
根據公司業務類型,設計合理mysql庫,表,架構。
按期進行災備恢復演練
誤刪除數據以後,恢復數據
簡單先從這幾個方向說說,每一個問題再展開分析。
固然還會有一些人事上面的問題,例如爲啥選咱們的公司,你以爲你本身的優點是什麼?你指望的薪資大概是多少?這些問題,就很簡單了。咱們只要過了技術面試,這些都不是啥問題了!
從此還會逐漸展開某個問題的具體剖析,和詳細步驟處理方法!望你們繼續關注後期創做
_____________________________________________________________
打個小廣告,最近老張我開了視頻課程,但願你們多多支持,和個人文章同樣,定會讓你有不小的收穫!
經過對 MySQL 體系結構深刻剖析講解,配合生產環境備份恢復,主從複製,高可用集羣架構和優化等實戰演練,讓同窗們能夠對 MySQL 數據庫有個由淺到深的認識。最後的課程部分還會對面試題總結進行講解,有利於同窗們能夠找到理想的 MySQL DBA 的工做。