陈泽庸
MySQL从.ibd文件恢复表数据
2018-3-1 13:27
阅读:7775

前天,本地wampserver启动不了(黄标),目测是因为这几天进行过太多的数据库操作导致的。结果,一时脑抽,选择了重新安装wampserver。安装很顺利,启动也很正常(绿标),晴天霹雳的是数据库用不了了。哇咔咔,真是脑残的可以!!

搜索了好多资料,也做过好多尝试,终于恢复数据成功。下面记录下数据恢复过程。

网上的资料很多都是误导,其实就两步:

1. 从.frm恢复表结构;

2. 从.ibd恢复数据,这一步难点主要是解决tablespace id问题。

背景:

由于另外一台电脑上有表结构(数据不同),所以就不需要从.frm恢复表结构了。假设数据库名是data,表名是url_list。注:表名和数据库名都要和原来的一致。为了避免干扰到wampserver的mysql环境,本文选择另外建立一个mysql环境(wampserver要退出先)。

mysql版本为5.6.17,解压地址E:\Program Files\mysql-5.6.17-winx64

mysql的下载地址:http://downloads.mysql.com/archives/get/file/mysql-5.6.17-winx64.zip

1. 首先独立安装一个mysql server。

a. 添加环境变量

操作如下:

(1)右键单击我的电脑->属性->高级系统设置(高级)->环境变量

点击系统变量下的新建按钮

输入变量名:MYSQL_HOME

输入变量值:E:\Program Files\mysql-5.6.17-winx64

E:\Program Files\mysql-5.6.17-winx64即为mysql的自定义解压目录。

(2)选择系统变量中的Path

点击编辑按钮

在变量值中添加变量值:%MYSQL_HOME%\bin

注意是在原有变量值后面加上这个变量,用;隔开,不能删除原来的变量值

b.配置my.ini文件,路径为E:\Program Files\mysql-5.6.17-winx64

配置如下:

#########################################################

    [client]

    port=3306

    default-character-set=utf8

    [mysqld]

    port=3306

    character_set_server=utf8

    basedir=E:\\Program Files\\mysql-5.6.17-winx64

    #解压目录

    datadir=E:\\Program Files\\mysql-5.6.17-winx64\\data

    #解压目录下data目录

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    explicit_defaults_for_timestamp=true

    [WinMySQLAdmin]

    E:\\Program Files\\mysql-5.6.17-winx64\\bin\mysqld.exe

#########################################################

注:my.ini文件放在MySQL解压后的根目录下

c.将mysql注册为windows系统服务

(1)从命令提示符(管理员)进入到MySQL解压目录下的 bin 目录下:

(2)输入服务安装命令:

mysqld --install

安装成功后会提示服务安装成功。

注:

命令行要以管理员的权限进入,否则出现:Install/Remove of the Service Denied!

移除服务命令为:mysqld remove

d.启动MySQL服务

net start mysql

启动成功后会提示成功

(3)创建表

CREATE TABLE `url_list` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`url` VARCHAR(250) NOT NULL COLLATE 'utf8_bin',

`type` VARCHAR(20) NOT NULL COLLATE 'utf8_bin',

`done` INT(11) NULL DEFAULT '0',

PRIMARY KEY (`url`),

INDEX `id` (`id`)

)

COLLATE='utf8_bin'

ENGINE=InnoDB

AUTO_INCREMENT=226789

;

(4)丢弃新创建的表的tablespace

alter table url_list discard tablespace; show warnings;

可以看到E:\Program Files\mysql-5.6.17-winx64\data\data文件夹下只剩下url_list.frm文件了,url_list.ibd被删了

(5)恢复数据

将原始的url_list.ibd拷贝到E:\Program Files\mysql-5.6.17-winx64\data\data文件夹下

然后导入tablespace

alter table url_list import tablespace; show warnings;

不出意外,一般会报warning,可以不用理会。数据已经恢复成功!


转载本文请联系原作者获取授权,同时请注明本文来自陈泽庸科学网博客。

链接地址:https://wap.sciencenet.cn/blog-3196388-1101761.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?