DBMotion——MySQL遷移利器
最近有一批 MySQL 資料庫要做一下資料遷移 , 由於之前經歷過大批次資料庫遷移 , 心力憔悴 。 因此 , 接手這個任務的時候 , 感覺肝部有些隱隱作痛 。
由於遷移的時候有各種場景 , 如同版本 、 跨版本 、 全量遷 、 部分遷 、 可停機 、 不可停機等 , 所以需要事先部署各種開源工具 。 比如 xtrabackup 、 mydumper 、 pt - table - checksum 等工具 , 來進行物理遷移 、 邏輯遷移以及資料校驗 。 另外 , 還要提前進行檢查 、 評估 、 跨部門會議 、 遷移 、 校驗 、 回退等各項繁雜的規劃 。 在無數個深夜裡 , 各種命令列指定一頓敲 , 敲的時候還要找幾個人趴在螢幕上一字一句的核對 , 簡直要瞎了一雙狗眼 。 就沒有一款能讓我端著咖啡點點選選就把遷移給做完的工具嗎 ? 我默默地在心底發出疑問 。
經朋友推薦 , 瞭解到了 DBMotion 這個工具 。 看了下簡介和演示 , 好像很符合我期望中遷移工具的形態 , 那用起來到底怎麼樣呢 ? 於是我用這個工具做了一些驗證 。
首先是 DBMmotion 的獲取方式 , 在瀏覽器輸入 squids.cn 進入網頁 , 然後翻到最下面 , 找到智慧小工具 , 點選 DB M otion 進入 DBM otion 的主頁 。
DBMotion 主頁中有演示影片 , 對 DBMotion 做了一些介紹 。 使用的話 , 可以本地利用 docker 搭建 , 或者點選免費試用直接適用線上環境 。 在這裡 , 點選免費使用 , 用一下線上環境 。
點選免費使用後進入到了 DBMotion 的控制檯 , 頁面比較簡潔 , 資料傳輸裡面就一個新增任務的按鈕 , 點一下試試 。
點選新增任務後 , 看到了熟悉的介面 。 無非是輸入源端目標端的的資料庫 IP 、 埠 、 賬號 、 密碼 , 另外給了遷移所需要的最小許可權的授權語句 . 由於我對賬號沒做什麼限制 , 就直接用 root 賬號了 。 遷移方式這裡還提供了三種遷移方式 , 分別是 M y SQL to M y SQL 、 M y SQL to C lick H ouse , M ongo to M ongo , 這裡主要關注 M y SQL to M y SQL 。
輸入源端目標端的資料庫資訊後
,
測試連線透過後
,
就進入了遷移選項頁面
。
頁面中可以選擇需要遷移的使用者和
DB
,
還可以指定併發數
、
遷移結構
、
資料及是否同步增量資料
。
這裡選了一個測試的 DB , 包含 10 張 500 W 的表及測試使用者 。 做一下全量 + 增量的遷移 , 點選下一步就進入了預檢查的頁面 。 預檢查頁面會有遷移的內容 , 遷移的資料量大小及耗時評估 。 11 G 預估 5 分鐘遷移完 , 每秒大概 30 多 M , 速度還不錯 。 不過這應該是指最大速度 , 我兩個環境之間的頻寬是 40 M 的 , 能達到 5 M / s 就不錯了 , 這裡預估的時候應該沒考慮到頻寬 。 另外 , 還有一些影響遷移及遷移後使用的一些檢查 , 並會給出修復建議 , 省了自行檢查的功夫 。 細看了下預檢查的項 , 還有 binlog 保留時間以及 procedure 等物件的定義者檢查 。 之前踩過這方面的坑 , 感覺預檢查的內容還是挺全面的 。
看完預檢查後點選建立就進入了正式遷移 , 在控制檯生成了此次遷移的任務 。
點選任務名稱進入遷移詳情 , 看看都有些啥 。 可以看到有物件遷移 、 全量遷移等欄目 , 增量遷移和資料校驗等都是灰色的 , 因為還沒有進入到增量遷移的步驟 。 看了下物件遷移 , 主要是顯示錶結構 、 儲存過程 、 函式等物件的遷移情況 。 又著重看了下全量遷移的顯示 , 可以看到遷移進行的時間 、 預計剩餘的時間以及遷移進度及速度 。 感覺還不錯 , 能讓人心裡對當前遷移的進度有個直觀的判斷 , 方便向領導彙報進度 , 比之前命令列的方式感受要好很多 。 此外還有每個表的遷移詳情 , 看起來更加直觀 。 另外實時速度有 4 M 左右 , 基本已經把頻寬打滿了 , 也符合了我之前對遷移預估時間的猜測 。
遷移過程中 , 我到源庫中 genral log 以及 show processlist 看了一下 , 沒有發現加鎖的情況 , 感覺比較奇怪 , 不加鎖怎麼保證我資料的一致性呢 ? 後面諮詢了下官方的技術人員 , 得知 DBMotion 遷移過程中不會對資料庫加鎖 , 因為增量的時候會將全量遷移時刻開始的資料往後重做一遍 , insert 會改為 replace ,delete 刪除成功就刪除了,刪除失敗就忽略, update 只要不更新主鍵就做成 replace ,如果是更新主鍵,就做成 delete+replace , 但前提是全量遷移過程中不要做 DDL 。 按照這個邏輯推演了一下 , 確實可以實現最終一致性 , 至於全量過程中不做 DDL , 這個提前和業務宣告一下就好了 。
遷移全程無鎖 , 想想感覺就很舒服 。 之前遷移的時候 , 老是有某些連線沒停乾淨 , 導致我做備份加鎖失敗 , 去掉加鎖後還能實現資料一致性 , 在這裡給個好評 。
全量完成後 , 增量遷移的詳情也可以點進去了 。 主要想關注下增量進度的顯示 , 看到有專門的延遲顯示 , 還是符合期望值的 。
然後再看一下資料校驗 。 諮詢了下官方客服 , 校驗的時候要停業校驗 , 看來沒有做成 pt - table - checksum 那種線上的方式 , 不過也能接受 。 停止測試增量資料的壓測 , 點選一下執行校驗 , 可以看到校驗了各種物件結構以及資料 , 資料採用了行數和 checksum 的雙重校驗方式 。
這裡模擬下不一致 , 看看能不能校驗出來 。 模擬字符集和資料不一致後重新執行校驗 , 檢視結果 , 都給我校驗出來了 , 再次好評 。 資料校驗對遷移來說還是很重要的 , 這是一個兜底的功能 , 資料校驗不透過我頂多不做業務切換 , 要是資料有問題但是沒有校驗出來 , 那可就麻煩了 。 經過我大量的不一致模擬 , 發現 DBMotion的校驗功能還是非常靠譜的 。 千奇百怪的不一致都能給我校驗出來 , 用起來非常踏實 , 不過目前沒有重新同步不一致的功能 , 加上這個功能的話就更完美了 。
校驗透過後 , 點選結束遷移就可以完成這次遷移了 。 全程我只需要輸入一下遷移庫的資訊 , 選擇一些要遷移的內容 , 剩下的就完全自動化 , 並有視覺化頁面的及時反饋 。 用我匱乏的成語儲備來形容一下整個過程 , 就是雲淡風輕 。
嘗試了 DBMotion 工具 , 終於實現了我點點選選喝著咖啡完成遷移的願望了 。 我想以後我的肝會變好 , 眼睛也會變好了 。 點點選選 , 操作簡單 , 全程無鎖 , 速度喜人 。 更有強大的校驗功能來兜底 , 你不想擁有一個嗎 ?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024580/viewspace-2925198/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 映象批次遷移利器:image-transfer
- 【遷移】SqlServer 遷移到 MySQL 方法ServerMySql
- [譯] Courier: Dropbox 的 gRPC 遷移利器RPC
- Microsoft SQL Server 遷移利器,Babelfish for Aurora PostgreSQL 上線!ROSSQLServerBabel
- MySQL分割槽如何遷移MySql
- Mysql資料遷移方法MySql
- Mysql for nagios 遷移方案MySqliOS
- mysql 大表mysqldump遷移方案MySql
- 遷移MySQL 5.7資料庫MySql資料庫
- mysql檔案複製遷移MySql
- MySQL備份遷移之mydumperMySql
- MySQL 資料遷移Oracle工作MySqlOracle
- mysql資料庫遷移 mysqldumpMySql資料庫
- Mysql百萬級資料遷移,怎麼遷移?實戰過沒?MySql
- MySQL資料遷移那些事兒MySql
- linux mysql資料庫遷移LinuxMySql資料庫
- mysql遷移oracle週末計劃MySqlOracle
- K8s叢集備份還原與遷移利器-VeleroK8S
- MySQL兩千萬資料優化&遷移MySql優化
- MySQL遷移檔案的小問題MySql
- MySQL與SQLite的區別及遷移MySqlSQLite
- MySql資料庫遷移圖文展示MySql資料庫
- yugong之多張表oracle到mysql遷移GoOracleMySql
- 不同場景下 MySQL 的遷移方案MySql
- mysqldump從mysql遷移資料到OceanBaseMySql
- KVM線上遷移(動態遷移)
- [原]不同場景下MySQL的遷移方案MySql
- mysql 備份與遷移 資料同步方法MySql
- MySQL 遷移表空間,備份單表MySql
- Django資料從sqlite遷移資料到MySQLDjangoSQLiteMySql
- Linux+PHP+MySql網站遷移配置LinuxPHPMySql網站
- sqlldr 完成mysql到oracle的資料遷移MySqlOracle
- yugong之單張表oracle到mysql遷移GoOracleMySql
- 【遷移】使用rman遷移資料庫資料庫
- 【Golang+mysql】記一次mysql資料庫遷移(一)GolangMySql資料庫
- MySQL資料庫遷移與MySQL資料庫批量恢復MySql資料庫
- 1.0 ORACLE到MYSQL資料遷移方式選型OracleMySql
- Laravel 透過遷移指令碼建立MySQL檢視Laravel指令碼MySql