首页 > 代码库 > 记一次mysql数据恢复

记一次mysql数据恢复

确切的说更像是一次数据迁移。

背景介绍:

         操作系统:Windows Server 2008 R2

         数据库版本:MySQL 5.5

         数据库的安装目录与数据文件目录不在同一个磁盘,数据文件所在的目录磁盘损坏。而后通过数据恢复工具恢复数据文件。前期研发的同事尝试启动恢复数据库,不成功,多轮尝试不成功后找到我。

1.得到同事给的数据文件 ibdata1,Mysql安装目录MySQL\MySQL Server 5.5。调整my.ini文件尝试启动数据库。

技术分享

2.将mysql base dir 拷贝到英文目录D:\test,重新配置my.ini。切换目录尝试启动。

技术分享

3.启动另外一个窗口尝试登录

技术分享

4.尝试跳过密码验证,设置参数skip-grant-tables

技术分享

技术分享

5.查看数据库

技术分享

6.并没有发现业务库,进一步查看用户。

7.查看搜索引擎,InnoDB启动了。

8.查看错误日志

170121 11:31:27  InnoDB: Error: page 7 log sequence number 1055477743InnoDB: is in the future! Current system log sequence number 566049292.InnoDB: Your database may be corrupt or you may have copied the InnoDBInnoDB: tablespace but not the InnoDB log files. SeeInnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.htmlInnoDB: for more information.170121 11:31:27  InnoDB: Error: page 1 log sequence number 1055476531InnoDB: is in the future! Current system log sequence number 566049292.InnoDB: Your database may be corrupt or you may have copied the InnoDBInnoDB: tablespace but not the InnoDB log files. SeeInnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.htmlInnoDB: for more information.

9.看到了报错,日志文件与数据文件内容不符。 证明数据文件是读到了的,只是,没有业务用户,没有表的定义。重新与报表工程师沟通,得知业务库数据库名为JD,用户也为JD。开始感觉有地方不对劲了,如果只是Innodb的数据文件损坏,mysql.user中应该是有用户记录的呀,怀疑这个安装目录不是原始的Mysql安装目录。

10.找到原始安装目录,进行目录替换。

11.可以查到数据了。尝试通过mysqldump 的方式导出数据。

mysqldump --database jd > jd_db.sql

之后搭建好新的环境,导入数据库,创建好用户,授权。(唯一注意的一点是字符集的问题)

至此整个数据恢复工作完成。

记一次mysql数据恢复