案例場景:
需求將 源庫 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存儲引擎,切源庫與目標庫版本及表結構一樣