當前位置: 華文世界 > 科技

如何將MySQL遷移到TiDB,完成無縫業務切換?

2024-08-29科技

當 MySQL 數據庫的單表數據量達到了億級,會發生什麽 ?

這個現象表示公司的業務上了一個台階,隨著數據量的增加,公司規模也進一步擴大了,是非常喜人的一個改變 ,然而隨之而來的其他變化,就沒那麽討喜了。

首先,你會發現 MySQL 數據庫的查詢效能下降明顯,單個查詢的響應時間更久了。雖然索引有點幫助,但是數據量越大,索引也會越來越大,尋找索引的開銷也在增加。

緊接著,由於表太大,表結構的維護操作會變得很困難,一個 DDL 操作將耗費很久的時間,同時造成的鎖表會給業務帶來很大的影響。

再然後,儲存空間吃緊了,億級數據量的單表可不是吃素的,正常情況下,檔大小能達到數百個 GB 乃至數 TB。

更重要的是,針對大表所在數據庫的單點寫入會使其所在伺服器到達效能瓶頸,舉個例子,淘寶在雙十一的高峰期每秒會有幾百萬筆訂單的寫入 ,這對 CPU、記憶體以及磁盤 I/O 都將造成非常大的壓力,最終導致業務響應緩慢。

由於 MySQL 主要依賴垂直擴充套件來提升效能以及儲存,你就需要不停地堆疊硬件配置來滿足業務需求,隨之而來的,就是數據庫成本的大幅增加以及與支出不成正比的微弱收益。

當面臨這種狀況的時候,分庫分表是個好辦法,把一個表的數據分別存在不同的數據庫例項中,這能解決大部份數據處理的難題,但卻引入了新的復雜性,對運維和開發都造成了不小的挑戰。

那有沒有什麽低成本且效率高的解決方案?當然有!用 TiDB 就能完美解決這些問題。

TiDB 是啥?

TiDB 是一款開源的分布式關系型數據庫管理系統,由PingCAP開發,旨在解決傳統關系型數據庫在擴充套件性和靈活性上的局限。它有很多的優點:

  • TiDB 是開源產品 :TiDB 具有一個相當成熟的社區,並且具有相當數量並持續增長的程式碼貢獻者,這使 TiDB 的成熟度越來越高。
  • 相容 MySQL 生態 :TiDB 相容 MySQL 協定和大部份 MySQL 的 SQL 語法,應用程式只需要做少量的改動甚至不需要改動即可執行在 TiDB 上。
  • 強大的可延伸性 :TiDB 是一個分布式數據庫,有著非常好的讀、寫擴充套件性,尤其是寫擴充套件性,可以儲存海量的數據,數百 TB 數據輕松儲存。
  • 存算分離架構 :使使用者可以單獨為計算資源或儲存資源進行擴容,避免其中一方資源的浪費。
  • HTAP 能力 :OLTP 和 OLAP 能力相融合,提供 HTAP 的混合負載能力,賦予 TiDB 強大的業務處理能力和數據查詢能力。
  • 線上擴縮容與升級 :在 TiDB 的存算分離架構下,數據庫的擴縮容和升級再也不用停機了,對於長期線上的業務系統來說尤為重要。
  • 這些特性讓快要被撐爆的 MySQL 有了近乎完美的解決方案,我們只需要把 MySQL 完整遷移到 TiDB 就行了。這裏我們需要用到 NineData 來完成這個工作,NineData 的數據復制能力可以輕松地在同、異構資料來源之間進行數據傳輸,並且具備如下優秀的特性:

    1. 遷移過程業務不停機

    NineData 提供結構遷移、全量數據遷移及增量數據遷移能力。在數據庫遷移過程中,源端可正常提供服務。NineData 可自動完成結構遷移、全量數據遷移,並自動啟動 Binlog 的即時監聽、采集、解析及復制能力,源端的增量更新數據會被即時復制到目標中。當 NineData 進入到增量數據遷移階段且復制無延遲時,業務可以在 MySQL 中進行唯讀驗證,並借助 NineData 數據對比工具進行數據一致性驗證。業務驗證透過後,可進行業務停機切換,整個遷移過程業務停機時間非常短。

    2. 強勁的復制效能

    在數據庫遷移過程中,遷移速度無疑是影響業務能否成功切換割接的重要因素。在此過程中,NineData 針對 MySQL > TiDB 數據復制進行深度效能最佳化,基於日誌分析、智能分片、動態攢批、數據合並、特有數據格式等技術,有效保障全量數據復制、增量數據復制的效能。當前 NineData 全量復制效能高達 200 GB/小時,增量數據復制效能高達 2 萬記錄/秒。

    3. 完善的數據質素保障方案

    NineData 提供了多種數據一致性校驗方案,包括全量精準校驗、快速驗及增量校驗,可以對遷移數據進行數據一致性強驗證。同時,當出現數據不一致時,能夠提供一鍵修復能力。基於 NineData 數據一致性校驗能力,可以有效規避因數據質素導致的業務遷移故障。

    下面,就手把手教你如何用 NineData 進行遷移。

    步驟一:錄入源和目標資料來源

    1. 登入 NineData 控制台,單擊 資料來源管理>資料來源 ,然後在頁面中單擊 建立資料來源 ,選擇需要錄入的資料來源。

    2. 根據頁面提示進行配置,然後單擊 建立資料來源 完成建立。

    步驟二:配置同步鏈路

    1. 登入 NineData 控制台,單擊 數據復制>數據復制 ,然後單擊 建立復制

    2. 根據頁面提示配置復制任務,由於我們想要實作不停機即時數據遷移,需要在 復制類別 處額外勾選 增量復制

    3. 配置完成後啟動任務,針對您配置的所有同步物件,NineData 會先對所有的存量數據進行全量遷移,接下來就是即時遷移 MySQL 中新增的增量數據,所有新寫入的數據都將一條不漏地同步到 TiDB,每當目標端的增量數據追平源端時,任務面板中的延遲在零點幾秒或幾秒之間徘徊時,代表當前 TiDB 中的數據已是最新的。

    步驟三(可選):校驗目標端同步數據的完整性

    除了同步功能以外,NineData 還提供了同步後源端和目標端同步數據的對比功能,以確保目標端數據的完整性。

    1. 登入 NineData 控制台,單擊 數據復制>數據復制 ,然後單擊步驟二中建立的復制任務 ID。

    2. 單擊 數據對比 頁簽,即可展示對比結果(如果步驟二的任務配置中未勾選 開啟數據一致性對比 ,則此處還需要單擊 開啟數據對比 )。

    3. 您可以在一段時間後,單擊頁面中的 重新對比 ,校驗最新增量數據的同步結果。

    步驟四(可選):配置任務異常告警

    由於數據量過於龐大,您可能需要系統即時監控任務狀態,在任務有異常時即刻通知您。

    1. 登入 NineData 控制台,單擊 數據復制>數據復制 ,然後單擊步驟二中建立的復制任務 ID。

    2. 單擊右上角的 配置告警

    3. 輸入 策略名稱 ,單擊 保存配置 即可。您可以直接使用內建的預設規則,在任務執行失敗,或復制延遲大於等於 10 分鐘的時候,發送短訊提醒您。您也可以自訂建立規則,根據您的需求來進行通知。

    最後

    完成了遷移之後,就可以進行一系列的測試,以確保應用程式能夠完全相容 TiDB ,由於 TiDB 本身對於 MySQL 協定的高度相容性,業務幾乎可以無縫從 MySQL 銜接至 TiDB。但事無絕對,測試到 TiDB 沒能很好地相容應用程式,也不用擔心,NineData 提供的不停機遷移可以保證業務的連續性,遷移過程完全不會對業務造成任何影響。

    至於有些同學關心的費用問題,首先 TiDB 是開源的,NineData 的全量遷移也是完全免費的,還贈送一條增量遷移服務,以實作本文中介紹的不停機遷移,因此從 MySQL 遷移到 TiDB 的過程不會產生費用。