使用的是 Mycat 提供的 dataMigrate 腳本進行對數據進行遷移和節點擴容,目前支持的 Mycat 是1.6 版本,由於 Mycat 是由 Java 編寫的因此在做數據遷移及節點擴容時需要安裝JDK等,還有相關的依賴數據庫驅動程序等
准備工作
- 對擴容表的所有數據節點進行備份,以便遷移失敗后的數據恢復
- 安裝JDK 1.8 版本,並設置好環境變量
- 在 Mycat 的 lib 目錄中,增加 MySql 的 JDBC 驅動包
- 在 Mycat 的環境中安裝 MySql 的客戶端程序
- 使用 root 用戶登陸 mycat 環境系統
擴容步驟
- 復制 schema.xml 和 rule.xml 文件並重命名為 newSchema.xml 和 newRule.xml,存放於 conf 目錄
- 修改 newSchema.xml 和 newRule.xml 配置文件為擴容后的 mycat 配置參數(表的數據節點、數據源、路由規則)
-
修改 conf 目錄下的 migrateTables.properties 文件,該配置文件用於告知工具,那些表需要進行擴容或收縮,如果不在該配置文件的表,不會進行數據遷移,示例如下:
-
修改 bin 目錄下的 dataMigrate.sh 腳本文件,參數說明如下:
- tempFileDir:臨時文件路徑,如果目錄不存在則會自動創建
- isAwayUseMaster:默認 true,不論是否發生主備切換,都使用主數據源
- deleteTempFileDir:默認 true,完成數據遷移后是否刪除臨時文件
- threadCount:默認主機環境CPU核心數量 * 2,並行線程數量(用於生成中間文件和導入導出數據)
- delThreadCount:默認主機環境CPU核心數量 / 2,清理冗余數據的並發線程
- queryPageSize:默認10萬,讀取遷移節點全部數據的每次加載數據量
- 停止 mycat 服務,需要保證數據庫不會再有寫操作
-
通過 PuTTY 工具進入 mycat 根目錄下的 bin 目錄,執行 dataMigrate.sh 腳本,開始進行擴容,
顯示遷移信息和遷移數據(此處不需要遷移,因此顯示的是[0 , 0],正常情況應該顯示需要遷移的數據量)
顯示數據遷移驗證結果
- 腳本執行完成,如果最后的數據遷移驗證通過,就可以將之前的 newSchema.xml 和 newRule.xml 替換之前的 schema.xml 和 rule.xml 文件,並重啟 mycat即可。
存在問題
- 目前 Mycat 1.6 提供的數據遷移腳本,只能支持分片字段的值必須是唯一的,不能重復,因此在使用時盡量使用唯一的字段來做分切字段。