滬江成立於 2001 年,做爲較早期的教育學習網站,當時技術選型範圍並不大:Java 的版本是 1.2,C# 還沒有誕生,MySQL 尚未被 Sun 收購,版本號是 3.23。工程師們選擇了當時最合適的微軟體系,並在往後的歲月裏,逐步從 ASP 過分到 .net,數據庫也跟隨 SQL Server 進行版本升級。數據庫
十幾年過去了,技術社區已經發生了天翻地覆的變化。滬江部分業務還基本在 .net 體系上,這給業務持續發展帶來了一些限制,在人才招聘、社區生態、架構優化、成本風險方面都面臨挑戰。集團通過慎重考慮,發起了大規模的去 Windows 化項目。這其中包含兩個重點子項目:開發語言從 C# 遷移到 Java,數據庫從 SQL Server 遷移到 MySQL。架構
本文主要向你們介紹,從 SQL Server 遷移到 MySQL 所面臨的問題和咱們的解決方案。工具
遷移方案的基本流程學習
遷移先後的數據一致性;
業務停機時間;
遷移項目是否對業務代碼有侵入;
須要提供額外的功能:表結構重構、字段調整。優化
通過仔細調研,在平衡複雜性和業務方需求後,遷移方案設計爲兩種:停機數據遷移和在線數據遷移。若是業務場景容許數小時的停機,那麼使用停機遷移方案,複雜度低,數據損失風險低。若是業務場景不容許長時間停機,或者遷移數據量過大,沒法在幾個小時內遷移完成,那麼就須要使用在線遷移方案了。網站
數據庫停機遷移的流程:spa
停機遷移邏輯比較簡單,使用 ETL(Extract Translate Load) 工具從 Source 寫入 Target,而後進行一致性校驗,最後確認應用運行 OK,將 Source 表名改掉進行備份。.net