1. 請詳細描述在復制拓撲中參與復制的線程類型以及各自所承擔的功能。
答:當從屬服務器連接到主服務器時,在主服務器上會創建 Binlog 轉儲線程,在從屬服務器上會默 認創建 I/O 線程和 SQL 線程。
- Binlog 轉儲線程用于從二進制日志讀取事件并將其發送到從屬服務器的 I/O 線程。
- I/O 線程從主服務器的 Binlog 轉儲線程讀取事件并將其寫入從屬服務器的中繼日志。
- SQL(或應用)線程在單線程從屬服務器上應用中繼日志事件,在多線程從屬服務器上分配協調 工作者線程應用中繼日志事件。
2. 在從屬服務器上執行 RESET SLAVE 命令時,會發生哪些操作?
答:RESET SLAVE 命令會斷開從屬服務器與主服務器的連接,以重置從屬服務器,具體效果如下:
- 清除 master.info 和 relay.log 資料檔案庫
- 刪除所有中繼日志
- 啟動新的中繼日志文件
- 將 CHANGE MASTER TO 語句中指定的任何 MASTER_DELAY 重置為零
- 會保留連接參數,以便可以在不執行 CHANGE MASTER TO 的情況下重啟從屬服務器。 但發出 RESET SLAVE ALL 時會重置連接參數。
3. 在排除 MySQL 復制故障時,一般會從哪些維度或方向切入?
答:在解決 MySQL 復制故障時,通常考慮的因素如下:
- 查看錯誤日志,錯誤日志可以提供足夠信息來確定和更正復制中的問題
- 在主服務器上發出 SHOW MASTER STATUS 語句,檢查 master 狀態
- 在從屬服務器上發出 SHOW SLAVE STATUS 命令,
????????~ 如果從屬服務器運行正常,Slave_IO_Running 和 Slave_SQL_Running 顯示 Yes
???????? ~ Last_IO_Error 和 Last_SQL_Error 顯示 IO 和 SQL 線程的最新錯誤消息
- 在主服務器和從屬服務器上發出 SHOW PROCESSLIST 命令,檢查 Binlog 轉儲線程、I/O 線程和 SQL 線程的狀態
- 對于突然停止工作的從屬服務器,檢查最近復制的語句
????????~ 如果操作因約束問題或其他錯誤而失敗,則 SQL 線程會停止
????????~ 錯誤日志會記錄包含導致 SQL 線程停止的事件
????????~ 再驗證從屬服務器數據沒有被直接修改(復制之外的)
4. 結合 14-5“體系結構”,請說明你對 InnoDB 集群的整體認知。
答:MySQL 組復制技術是 InnoDB 集群實現的基礎,組復制安裝在集群中的每個服務器實例上。組 復制能夠創建彈性復制拓撲,在群集中的服務器脫機時可以自動重新配置自己。必須至少有三臺 服務器才能組成一個可以提供高可用性的組。組可以在單主模式下運行,一次只有一臺服務器接 受更新;也可以在多主模式下運行,所有服務器都可以接受更新,即使更新是同時發布的。
MySQL Router 位于應用程序和集群之間,用來實現負載均衡。
MySQL Shell 用來管理集群,通過 MySQL Shell 的管理 API,可以使用熟悉的 JavaScript、 Python 或 SQL 命令來管理 MySQL 集群。
5. 請對組復制的原理和功能做一個完整的描述,并說明組復制有哪些先決條件和限制。
答:組復制是 MySQL 的一個插件,它能夠在一組服務器之間進行高可用的復制數據,并自動處理服 務器故障轉移,當成員因崩潰、故障或重新連接而加入或離開組時自動重新配置組,并解決沖突。 集群中的服務器屬于一個復制組(replication group),一個復制組最多9臺最少3臺服務 器,必須使用全局事務標識符(GTID),組成員身份是自動管理的,服務器可以隨時離開和加入 該組,一臺服務器的更改將復制到組的所有成員。 使用組復制技術必須要滿足以下條件和限制:
- 通訊低延遲,要求集群服務器位于本地網絡
- 基于復制沖突檢測的需要,組復制僅適用于 InnoDB 存儲引擎,GTID 要啟用,表有主鍵
- 對于復制配置,要啟用二進制日志記錄和從屬服務器更新,二進制日志用行格式記錄,元數據 必須以 table 格式存儲
6. InnoDB 集群單主模式和多主模式集群結構適用哪些應用場合?
答:InnoDB 集群主要的應用場合如下:
- 彈性復制環境,這種復制基礎架構中涉及的服務器數量非常地不穩定。
- 高可用分片環境,分片是一種流行的寫橫向擴展方法,每個分片可以映射到一個復制組。
- 作為標準主從復制的替代方案使用,更可靠更安全。
7. MySQL Shell(mysqlsh)和 MySQL Router(mysqlrouter)各自提供了什么樣的集群功能?
答:MySQL Shell 提供功能如下:
- MySQL 的高級客戶機和代碼編輯器
- 通過使用 JavaScript、Python 或 SQL 命令提供腳本功能
- 允許通過 API 訪問 MySQL 功能
- 支持制表符分隔、表格和 JSON 格式的輸出
- 通過全局會話對象與 MySQL 服務器交互
MySQL Router 提供功能如下:
- 充當中間件,在客戶端應用程序和后端 MySQL 服務器之間提供透明路由
- 通過自動路由連接來管理故障轉移
- 提供負載均衡,跨服務器池分布數據庫連接以提高性能和可擴展性
- 實現可插入架構,開發人員可以擴展產品并為自定義用例創建插件
8. 面對集群的重大停機事故,請給出你所能采取的恢復集群的辦法和步驟。
答:第一步,重啟集群實例
第二步,連接到一個實例并運行 MySQL Shell
第三步,連接到集群并執行 dba.rebootClusterFromCompleteOutage()