MySQL备份恢复单个innodb表
背景
之前用过mysql通过备份数据目录来实现数据库全量迁移,非常方便快速。当时尝试恢复单个表而没有成功,此时再次尝试终于如愿以偿。
本文将要说说怎么移动或复制部分或全部的表到另一台服务器上,而所要用到的技术点就是transportable tablespace特性,这就意味着MySQL5.6.6以及以上版本才支持。
表空间传输特性允许表空间从一个实例移动到另一个实例上。这在以前版本上,这对InnoDB表空间是不可能的,因为所有的表数据都是系统表空间的一部分。
实现
- 将拷贝的数据文件 “qqq.idb”放在自己的数据目录下的数据库中
- “qqq.idb” 改个名字–>”qqq–.idb”, 主要是避免冲突
- 执行 create table qqq(…) 语句,此时除了会生成一个 qqq.frm, 文件,还会新生成一个qqq.idb文件
- 执行 ALTER TABLE qqq DISCARD TABLESPACE; 会自动删除 新生成的qqq.idb 文件
- 改回 “qqq–.idb”文件名为 “qqq.idb”
- 赋给qqq.idb权限:chown mysql:mysql -R qqq.idb
- ALTER TABLE qqq IMPORT TABLESPACE; SHOW WARNINGS;
恢复完成!
如果import tablespace 的时候,报错 ibd文件与表的 ROW_TYPE_COMPACT 不兼容,则需要在建表语句最后 加上 ROW_FORMAT=COMPACT保持一致!
参考链接
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!