體驗一下5分鍾快速遷移mysql近億數據量大表的速度!!!


案例場景:

  需求將 源庫 A服務器mysql實例下日志表t_service_log 遷移到 目標庫  B 服務器 mysql實例下

  t_server_log

  

 

 

   數據量:

  

 

 

 詳細操作步驟:

  1、在服務器B 目標庫下 創建表結構 並執行 ALTER TABLE t_service_log DISCARD TABLESPACE;

  此時表 t_service_log  只剩下 frm 文件
  

 

   2. 源庫,開啟 2 個會話

    a)  session1:執行 FLUSH TABLES t_service_log FOR EXPORT ,該命令會對 t_service_log  加鎖,將 t_service_log  的臟數據從 buffer
      pool 同步到表文件,同時新生成 1 個文件 t_service_log .cfg ,該文件存儲了表的數據字典信息
    b)  session2:保持 session1 打開狀態,此時將 t_service_log.cfg 和 t_service_log.ibd 遠程傳輸到目標庫的數據目錄,
      如果目標庫是主從結構,需要分別傳輸到主從兩個實例,傳輸完畢后修改屬主為 mysql:mysql
      內網傳輸可采用 nc 隧道模式 ,30G 傳輸完成大約在3分鍾左右完成
      

 

      c)  源庫,session1 執行 unlock tables ,解鎖表 t_service_log ,此時 t_service_log 恢復正常讀寫

    d) 目標庫,執行 ALTER TABLE t_service_log IMPORT TABLESPACE ,如果是主從結構,只需要在主庫執行即可
      

 

    e)  此時目標庫 t_service_log  已可用,遷移完成

                      

 

 總結:

    此次利用 mysql 可傳輸復制表空間方案,復制大表 t_service_log 到目錄庫 整個過程耗時在 5分鍾左右  ,主要耗時在 傳輸 ibd 文件
   耗時3分鍾左右與 目標庫 "ALTER TABLE t_service_log IMPORT TABLESPACE " 耗時 2分鍾左右;對比dump+source sql 方案在時間成本上有大利
   
    缺點:在源庫上需要鎖表 傳輸ibd文件的時間;所以對於業務低峰期或日志表可考慮使用,值適用innodb存儲引擎,切源庫與目標庫版本及表結構一樣
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM