[toc] # Linux運維工程師面試題(5) > 祝各位小伙伴們早日找到自己心儀的工作。 > 持續學習才不會被淘汰。 > 地球不爆炸,我們不放假。 > 機會總是留給有有準備的人的。 > 加油,打工人! ## 1 SELECT 語句處理的順序 查詢執行路徑中的組件:查詢緩存、解析器、預處理器、優化 ...
目錄
Linux運維工程師面試題(5)
祝各位小伙伴們早日找到自己心儀的工作。
持續學習才不會被淘汰。
地球不爆炸,我們不放假。
機會總是留給有有準備的人的。
加油,打工人!
1 SELECT 語句處理的順序
查詢執行路徑中的組件:查詢緩存、解析器、預處理器、優化器、查詢執行引擎、存儲引擎
SELECT語句的執行流程:
FROM Clause --> WHERE clause --> GROUP BY --> HAVING clause --> SELECT --> ORDER BY --> LIMIT
2 MySQL 高可用方案有哪些
- 主從複製+mycat 讀寫分離
- MHA(Master High Availability)
- Galera Cluster
3 mysql 主從複製原理
用戶提交數據更新到主庫,主庫會生成二進位日誌,寫入到 bin log 中;主庫開啟 dump 線程,用來給從庫的 io 線程傳送 bin log;從庫的 io 線程去請求主庫的 bin log,並將得到的 bin log 寫入到中繼日誌(relay log)中,sql 線程會讀取 relay log 文件中的日誌,並解析成具體的操作,來執行資料庫更新,保證主庫和從庫數據一致,完成主從複製。
4 mycat 讀寫分離原理
Mycat 的原理中最重要的一個動詞是"攔截",它攔截了用戶發送過來的 SQL 語句,首先對 SQL 語句做了—些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然後將此 SQL 發往後端的真實資料庫,並將返回的結果做適當的處理,最終再返回給用戶。
5 MHA 高可用原理
- 從宕機崩潰的 master 保存二進位日誌事件(bin log events);
- 識別含有最新更新的 slave;
- 應用差異的中繼日誌(relay log)到其他的 slave;
- 應用從 master 保存的二進位日誌事件(bin log events);
- 提升—個 slave 為新的 master;
- 使其他的 slave 連接新的 master 進行複製。
6 mysqldump 備份的原理
是一個 mysql 的客戶端命令,通過 mysql 協議連接至 mysql 伺服器進行備份。mysqldump 命令將資料庫中的數據備份成一個文本文件。表的結構和表中的數據將存儲在生成的文本文件中。它先使用 select 查出需要備份表的數據和需要備份的表的結構,再在文本文件中生成一個 CREATE 語句。然後將表中的所有記錄轉換成一條 INSERT 語句。然後通過這些語句,就能夠創建表並插入數據。其實就是相當於模擬mysql客戶端去連接資料庫,將mysql中的數據生成一個標準輸出,在屏幕列印,一般配合標準輸出重定向,導入到一個文件中。mysqldump 整體備份的基本流程如下:
- 調用 FTWRL(flush tables with read lock),全局禁止寫。
- 開啟快照讀,獲取此時的快照(僅對 innodb 表起作用)。
- 備份非 innodb 表數據( .frm、.myi、.myd 等)。
- 非 innodb 表備份完畢後,釋放 FTWRL 鎖。
- 逐一備份 innodb 表數據。
- 備份完成。
7 drop, delete 與 truncate 的區別,哪個最快
drop 直接刪掉表;truncate 刪除表中數據,再插⼊時自增長id又從1開始;delete 刪除表中數據,可以加 where 子句。想要刪除部分數據用 delete;想要刪除表用 drop; 想保留表但是把數據刪除,如果和事務無關用 truncate。
- delete 語句執⾏刪除的過程是每次從表中刪除⼀⾏,並且同時將該⾏的刪除操作作為事務記錄在⽇志中保存以便進⾏回滾操作。truncate table則⼀次性地從表中刪除所有的數據並不把單獨的刪除操作記錄記⼊⽇志保存,刪除⾏是不能恢復的。並且在刪除的過程中不會激活與表有關的刪除觸發器,執⾏速度快。
- 表和索引所占空間。當表被 truncate 後,這個表和索引所占⽤的空間會恢復到初始⼤⼩,⽽ delete 操作不會減少表或索引所占⽤的空間。drop 語句將表所占⽤的空間全釋放掉。
- ⼀般⽽⾔,在刪除速度上,drop > truncate > delete。
- 應⽤範圍:truncate 只能對 table,delete 可以是 table 和 view。
- truncate 和 delete 只刪除數據,⽽ drop 則刪除整個表(結構和數據)。
- truncate 與不帶 where 的 delete:只刪除數據,⽽不刪除表的結構(定義);drop 語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index);依賴於該表的存儲過程/函數將被保留,但其狀態會變為:invalid。
8 判斷主從延遲的方法
通過命令 show slave status 查看 seconds_behind_master 的值來判斷
NULL - 表示 io_thread 或是 sql_thread 有任何一個發生故障,也就是該線程的 Running 狀態是 No,而非Yes。
0 - 該值為零,是我們極為渴望看到的情況,表示主從複製狀態正常。
9 MySQL 主要的索引類型
- 普通索引:是最基本的索引,它沒有任何限制;
- 唯一索引:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一;
- 主鍵索引:是一種特殊的唯一索引,一個表只能有一個主鍵,不允許有空值;
- 組合索引:指多個欄位上創建的索引,只有在查詢條件中使用了創建索引時的第一個欄位,索引才會被使用。使用組合索引時遵循最左首碼集合;
- 全文索引:主要用來查找文本中的關鍵字,而不是直接與索引中的值相比較,mysql 中 MyISAM 支持全文索引而 InnoDB 不支持;
10 MySQL 中 myisam 與 innodb 的區別
- innodb⽀持事物, myisam不⽀持事物
- innodb⽀持⾏級鎖, myisam⽀持表級鎖
- innodb⽀持MVC, myisam不⽀持
- innodb⽀持外鍵, myisam不⽀持
- innodb不⽀持全⽂索引,myisam⽀持
關於我
全網可搜《阿賢Linux》
CSDN、知乎、嗶哩嗶哩、博客園、51CTO、掘金、思否、開源中國、阿裡雲、騰訊雲、華為雲、今日頭條、百家號、GitHub、個人博客
公眾號:阿賢Linux
個人博客:blog.waluna.top
https://blog.waluna.top/
原文鏈接: Linux運維工程師面試題(5).