Linux運(yùn)維工程師面試題(5)

Linux運(yùn)維工程師面試題(5)
1 SELECT 語(yǔ)句處理的順序
2 MySQL 高可用方案有哪些
3 mysql 主從復(fù)制原理
4 mycat 讀寫(xiě)分離原理
5 MHA 高可用原理
6 mysqldump 備份的原理
7 drop, delete 與 truncate 的區(qū)別,哪個(gè)最快
8 判斷主從延遲的方法
9 MySQL 主要的索引類型
10 MySQL 中 myisam 與 innodb 的區(qū)別
祝各位小伙伴們?cè)缛照业阶约盒膬x的工作。
持續(xù)學(xué)習(xí)才不會(huì)被淘汰。
地球不爆炸,我們不放假。
機(jī)會(huì)總是留給有有準(zhǔn)備的人的。
加油,打工人!
查詢執(zhí)行路徑中的組件:查詢緩存、解析器、預(yù)處理器、優(yōu)化器、查詢執(zhí)行引擎、存儲(chǔ)引擎
SELECT語(yǔ)句的執(zhí)行流程:
2 MySQL 高可用方案有哪些
主從復(fù)制+mycat 讀寫(xiě)分離
MHA(Master High Availability)
Galera Cluster
3 mysql 主從復(fù)制原理
用戶提交數(shù)據(jù)更新到主庫(kù),主庫(kù)會(huì)生成二進(jìn)制日志,寫(xiě)入到 bin log 中;主庫(kù)開(kāi)啟 dump 線程,用來(lái)給從庫(kù)的 io 線程傳送 bin log;從庫(kù)的 io 線程去請(qǐng)求主庫(kù)的 bin log,并將得到的 bin log 寫(xiě)入到中繼日志(relay log)中,sql 線程會(huì)讀取 relay log 文件中的日志,并解析成具體的操作,來(lái)執(zhí)行數(shù)據(jù)庫(kù)更新,保證主庫(kù)和從庫(kù)數(shù)據(jù)一致,完成主從復(fù)制。
4 mycat 讀寫(xiě)分離原理
Mycat 的原理中最重要的一個(gè)動(dòng)詞是"攔截",它攔截了用戶發(fā)送過(guò)來(lái)的 SQL 語(yǔ)句,首先對(duì) SQL 語(yǔ)句做了—些特定的分析:如分片分析、路由分析、讀寫(xiě)分離分析、緩存分析等,然后將此 SQL 發(fā)往后端的真實(shí)數(shù)據(jù)庫(kù),并將返回的結(jié)果做適當(dāng)?shù)奶幚?,最終再返回給用戶。
5 MHA 高可用原理
從宕機(jī)崩潰的 master 保存二進(jìn)制日志事件(bin log events);
識(shí)別含有最新更新的 slave;
應(yīng)用差異的中繼日志(relay log)到其他的 slave;
應(yīng)用從 master 保存的二進(jìn)制日志事件(bin log events);
提升—個(gè) slave 為新的 master;
使其他的 slave 連接新的 master 進(jìn)行復(fù)制。
6 mysqldump 備份的原理
是一個(gè) mysql 的客戶端命令,通過(guò) mysql 協(xié)議連接至 mysql 服務(wù)器進(jìn)行備份。mysqldump 命令將數(shù)據(jù)庫(kù)中的數(shù)據(jù)備份成一個(gè)文本文件。表的結(jié)構(gòu)和表中的數(shù)據(jù)將存儲(chǔ)在生成的文本文件中。它先使用 select 查出需要備份表的數(shù)據(jù)和需要備份的表的結(jié)構(gòu),再在文本文件中生成一個(gè) CREATE 語(yǔ)句。然后將表中的所有記錄轉(zhuǎn)換成一條 INSERT 語(yǔ)句。然后通過(guò)這些語(yǔ)句,就能夠創(chuàng)建表并插入數(shù)據(jù)。其實(shí)就是相當(dāng)于模擬mysql客戶端去連接數(shù)據(jù)庫(kù),將mysql中的數(shù)據(jù)生成一個(gè)標(biāo)準(zhǔn)輸出,在屏幕打印,一般配合標(biāo)準(zhǔn)輸出重定向,導(dǎo)入到一個(gè)文件中。mysqldump 整體備份的基本流程如下:
調(diào)用 FTWRL(flush tables with read lock),全局禁止寫(xiě)。
開(kāi)啟快照讀,獲取此時(shí)的快照(僅對(duì) innodb 表起作用)。
備份非 innodb 表數(shù)據(jù)( .frm、.myi、.myd 等)。
非 innodb 表備份完畢后,釋放 FTWRL 鎖。
逐一備份 innodb 表數(shù)據(jù)。
備份完成。
7 drop, delete 與 truncate 的區(qū)別,哪個(gè)最快
drop 直接刪掉表;truncate 刪除表中數(shù)據(jù),再插?時(shí)自增長(zhǎng)id又從1開(kāi)始;delete 刪除表中數(shù)據(jù),可以加 where 子句。想要?jiǎng)h除部分?jǐn)?shù)據(jù)用 delete;想要?jiǎng)h除表用 drop; 想保留表但是把數(shù)據(jù)刪除,如果和事務(wù)無(wú)關(guān)用 truncate。
delete 語(yǔ)句執(zhí)?刪除的過(guò)程是每次從表中刪除??,并且同時(shí)將該?的刪除操作作為事務(wù)記錄在?志中保存以便進(jìn)?回滾操作。truncate table則?次性地從表中刪除所有的數(shù)據(jù)并不把單獨(dú)的刪除操作記錄記??志保存,刪除?是不能恢復(fù)的。并且在刪除的過(guò)程中不會(huì)激活與表有關(guān)的刪除觸發(fā)器,執(zhí)?速度快。
表和索引所占空間。當(dāng)表被 truncate 后,這個(gè)表和索引所占?的空間會(huì)恢復(fù)到初始??,? delete 操作不會(huì)減少表或索引所占?的空間。drop 語(yǔ)句將表所占?的空間全釋放掉。
?般??,在刪除速度上,drop > truncate > delete。
應(yīng)?范圍:truncate 只能對(duì) table,delete 可以是 table 和 view。
truncate 和 delete 只刪除數(shù)據(jù),? drop 則刪除整個(gè)表(結(jié)構(gòu)和數(shù)據(jù))。
truncate 與不帶 where 的 delete:只刪除數(shù)據(jù),?不刪除表的結(jié)構(gòu)(定義);drop 語(yǔ)句將刪除表的結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger),索引(index);依賴于該表的存儲(chǔ)過(guò)程/函數(shù)將被保留,但其狀態(tài)會(huì)變?yōu)椋篿nvalid。
8 判斷主從延遲的方法
通過(guò)命令 show slave status 查看 seconds_behind_master 的值來(lái)判斷
NULL - 表示 io_thread 或是 sql_thread 有任何一個(gè)發(fā)生故障,也就是該線程的 Running 狀態(tài)是 No,而非Yes。
0 - 該值為零,是我們極為渴望看到的情況,表示主從復(fù)制狀態(tài)正常。
9 MySQL 主要的索引類型
普通索引:是最基本的索引,它沒(méi)有任何限制;
唯一索引:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一;
主鍵索引:是一種特殊的唯一索引,一個(gè)表只能有一個(gè)主鍵,不允許有空值;
組合索引:指多個(gè)字段上創(chuàng)建的索引,只有在查詢條件中使用了創(chuàng)建索引時(shí)的第一個(gè)字段,索引才會(huì)被使用。使用組合索引時(shí)遵循最左前綴集合;
全文索引:主要用來(lái)查找文本中的關(guān)鍵字,而不是直接與索引中的值相比較,mysql 中 MyISAM 支持全文索引而 InnoDB 不支持;
10 MySQL 中 myisam 與 innodb 的區(qū)別
innodb?持事物, myisam不?持事物
innodb?持?級(jí)鎖, myisam?持表級(jí)鎖
innodb?持MVC, myisam不?持
innodb?持外鍵, myisam不?持
innodb不?持全?索引,myisam?持
以上面試題僅僅個(gè)人總結(jié),想到什么就寫(xiě)什么,沒(méi)有任何順序,寫(xiě)的有什么不對(duì)的地方請(qǐng)各位大佬評(píng)論、留言,我會(huì)及時(shí)更正。
原文鏈接: [Linux運(yùn)維工程師面試題(5)](https://blog.waluna.top/2023/03/05/1355/).
Linux運(yùn)維工程師面試題(5)的評(píng)論 (共 條)
