一 簡介:mysql5.6+的表空間傳輸
二 目的:復制數據到另一個表
三 步驟
1 create table b like a ->創建一個空表
2 alter table b discard tablespace -> 禁用空表的表空間,用於刪除b的ibd文件
3 alter table a for export ->會生成一個cfg文件,對於全局來說 表是只讀狀態,要非常注意
4 cp a.cfg b.cfg && cp a.ibd b.ibd && chown -R mysql:mysql b.cfg b.ibd->拷貝cfg和ibd文件進行復制授權
5 unlock tables -> 拷貝完成進行解鎖
6 alter table b import tablespace -> 進行數據字典注冊,這里需要注意,因為涉及到數據頁的table_id的修改,可能會耗費時間,但是比dump還是快
7 select count(*) from b 進行驗證
四 總結
mysql表空間的遷移能快速的遷移大表,但是有自身局限性,適用以下場景
1 冷數據表的復制,由於需要鎖表,所以不能遷移熱表
2 大表數據的恢復,線上DDL操作失誤,需要恢復時,利用備份+binlog進行恢復后,表空間遷移進行導入
五 load data:
0 語法
load data infile "/data/mysql/e.sql" into table e fields terminated by ',';
1 過程
1 讀取csv文件,判斷字段是否和表字段相符,然后寫入innodb表中
2 讀完全部csv文件數據
3 進行事務提交,否則事務回滾
2 load data注意事項
1 在遠程客戶端使用load data load infile的話 1 需要添加FILE權限 2需要添加load讀取客戶端文件
2 load data相對file較快是因為讀取文件速度遠遠大於讀取表數據的速度,因為文件已經預先進行了讀取
