换了操作系统之后 MySQL 数据的恢复

先容我发泄一下。。。

最近一段时间忙着开发一个软件,不过又刚好装了新的 linuxmint,为了贪个新鲜,想在上面试着开发 java,昨天下了个 intelij-ideaIC 玩,感觉很不错,打算就用这个来代替原来 windows 下的 eclipse,因为这个软件要用到 MySQL,所以打算把原来 windows 上的 MySQL 数据库中的内容导出,放到 linux 这边来。
可是很不巧,今儿个早不知道怎么的进 Win7 就卡在 logo 画面无限循环了,想着可能是引导之类的小问题,用 fsck 进去弄了下,不行,再用 ntfsfix,可是怎么弄也进不去。

马上感觉不对劲了,初步判断可能是 winload 之类的问题。于是拿出 U 盘进 PE,居然卡死!只能进安全模式,可是一用修复工具去读 C 盘的时候马上修复工具就假死了。

接着拿出 win7 启动光盘出来,进入正常的 win7 安装流程,点修复计算机,出乎我预料的连这个都假死了。
于是按照一些人的的说法把硬盘拆下来挂到盒子上去用另外一台 Win7 去修复。chkdsk 过了,无效,磁盘整理,DG 分区表修复什么的都试了一遍,不行。

实在是受不了了,感觉不是这么简单的问题了,可能是硬盘出问题了,于是用 HD tune 看了一下,果然,当前待映射扇区数那黄了。。。用硬盘检测工具扫了一下,还真有坏道了。。。。瞬间心情就糟糕下来了,因为以前犯过一次错,无视硬盘问题继续疯狂使用,结果造成了不小的数据损失,所以我已经不想去修复坏道了。。直接就去下单了一个 7200 转的日立 2.5 寸 HDD。开始备份数据。

于是就在 linuxmint 上搞了起来,原来 windows 下的 MySQL 数据库中的数据怎么搬过来呢?

想着以前有听说过只要把 data 文件夹转移就行。我就亲手实践了一下,折腾了老半天,终于弄好了,这个方法果然可行!
下面就说下方法:

1
sudo apt-get install mysql-server-5.6 mysql-client-5.6

一路上照常的样子安装就行,安装好之后进

1
mysql -u root -p

回车,直接进入 mysql,如果登录失败,可能是服务没打开,用这个启动 mysql 的服务

1
service mysql start

启动好之后再进就没问题了,如果忘记了 mysql 的密码,也可以 mysqladmin 设置一下

1
mysqladmin -u root password '你的密码'

接着我们要弄数据库的话,首先要知道这个数据库的存放在哪里,直接进 mysql 然后查 mysql 的系统变量看看

1
show variables like 'datadir';

查到再 / var/lib/mysql 下,接着开始干正活,找到原来 windows 下的数据库的位置,这个就要自己手动找了,找到了 my.ini 的位置就算找到了。(想不到我当初我放在 SSD 上了,找了好久!)

找到之后进 data 文件夹,这下就看到了很熟悉的东西了,没错就是这里!我建的数据库,一眼就认出来了!
(我当时兴高采烈的直接就把 data 下的所有东西直接复制到 / var/lib/mysql / 下,结果 mysql 打不开了 = =)

这时候不要着急,看看里面的文件夹,像 mysql,performance_schema 之类的目录明显就是原来的默认数据库,这个不能动,动了的话,原来的数据库中的用户数据信息就会覆盖现在的数据库中的用户信息,会出错的。
原来数据库中的 gcu_games 对应了这里的 gcu_games 目录,classinfo 对应了这里的 classinfo 目录,所以现在要在新的 mysql 里面建立对应的数据库,比如

1
create database classinfo;

这样 / var/lib/mysql 中就会多出 classinfo 这个目录,这个时候就能把原来 classinfo 目录中的数据覆盖过来了,这时候试一下看看。

1
2
use classinfo
show tables;

看到了表里面有东西了,可是这个时候用 select 语句去查询的话会出 Mysql table ‘’ doesn`t exist 这个问题,这是因为 InnoDB 类型的数据库,他的数据会存在 ibdata1 这个文件里,具体的可以参考 这里
所以要把原来的 ibdata1 也搬过来,不过这个时候要先关掉 mysql 服务了,在 terminal 里面输入

1
service mysql stop

然后再把 ibdata1 这个文件搬过来,搬之前最好把原来的文件做个备份。
这个时候最好改一下 / var/lib/mysql 这个目录的权限,不然可能会遇到 access denied 之类的问题

1
chmod -R +777 /var/lib/mysql

改完之后再启动 mysql 服务,

1
service mysql start

这时候应该就能进 mysql 里面用 select 正常的查询数据库了,大功告成!

参考资料:

http://blog.zuobus.com/archives/68.html
http://blog.csdn.net/yxwmzouzou/article/details/14165467
http://blog.csdn.net/qysh123/article/details/11695637
http://blog.sina.com.cn/s/blog_a23e4a880101h2d4.html
http://yunjiechao-163-com.iteye.com/blog/1305048