通过 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;

# 到此应该就可以查看数据文件了
上一篇下一篇

猜你喜欢

热点阅读