一 简介: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较快是因为读取文件速度远远大于读取表数据的速度,因为文件已经预先进行了读取