通过 ibd 和 frm 文件恢复表结构及数据
2019-11-21 本文已影响0人
Alexander_Zz
一、适用情况
1.1 如果数据库使用的是 InnoDB 存储引擎,并且开启了 innodb_file_pre_table = 1 的情况下,每个数据库中的表会有独立的表空间。
二、利用 frm 文件恢复表结构
2.1 步骤
# 安装一个新的数据库,并且建立需要恢复数据的库同名的数据库
mysql> CREATE DATABASE dbname;
# 在此库下创建所需恢复的数据表同名的数据表
mysql> SHOW CREATE TABLE tbname\G # 可显示创建表的语句,如可查看可利用此语句创建新表
# 关闭数据库
~]# /etc/init.d/mysqld stop
# 备份新建立数据库的 frm 文件,后将之前的 frm 文件覆盖至新建的数据路径下
~]# mv /DBDIR/DBNAME/TBNAME.frm{,.bak} # 备份新 frm 文件
# 修改覆盖后的 frm 文件权限,可参考其他 frm 文件权限
~]# chown mysql.mysql /DBDIR/DBNAME/TBNAME.frm # 修改属主属组
# 重启数据库,查看表结构
~]# /etc/init.d/mysqld start
三、利用 ibd 文件恢复表数据
3.1 步骤
# 登录数据库
~]# mysql -uUSERNAME -pPASSWORD DBNAME
# 清除新 ibd 文件
mysql> ALTER TABLE `tbname` DISCARD TABLESPACE;
# 复制之前的 ibd 文件至新数据库路径下
# 修改 ibd 文件权限
~]# chown mysql.mysql /DBDIR/DBNAME/TBNAME.ibd
# 恢复数据
mysql> ALTER TABLE tbname IMPORT TABLESPACE;
# 到此应该就可以查看数据文件了