MySQL 通过ibd恢复数据

个人学习笔记,谢绝转载!!!

原文:https://www.cnblogs.com/wshenjin/p/14780723.html


故障背景:线上一台老数据库跑在单盘上,因坏道导致ibdata损坏。
恢复前提:表ibd文件正常,开启innodb_file_per_table。

安装mysqlfrm以读取表结构

[root@ ~]#  wget https://downloads.mysql.com/archives/get/p/30/file/mysql-utilities-1.6.5.tar.gz
[root@ ~]#  tar -xvzf mysql-utilities-1.6.5.tar.gz 
[root@ ~]#  cd mysql-utilities-1.6.5
[root@ ~]#  python ./setup.py build
[root@ ~]#  python ./setup.py install

导出故障实例表结构

[root@ ~]#  /usr/bin/mysqlfrm --diagnostic /data/database/mysql/testdb/user_info.frm

恢复数据

新起一个MySQL5.7新实例,在新实例上建相同的表,并卸载表空间

(root@localhost) > alter table testdb.user_info discard tablespace;

将故障库user_info表的ibd文件(testdb/user_info.ibd)拷贝到新实例对应的路径

挂在表空间

(root@localhost) > alter table testdb.user_info import tablespace;

如果报错Error Code: 1808. Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.)
则在建表语句后加上  ROW_FORMAT=COMPACT

至此,user_info表就恢复了。

参考:

https://blog.csdn.net/u012887385/article/details/54406712
https://blog.csdn.net/weixin_31478029/article/details/113171741
https://www.cnblogs.com/gered/p/12524586.html

上一篇:mysql 数据库存储引擎


下一篇:数据库没有备份,没有使用Binlog的情况下,如何恢复数据?极客时间学习笔记