如何恢复Mysql数据库的详细介绍

 更新时间:2013年09月30日 17:00:05   作者:  
这里说的MySql恢复数据库,是指没有通过正常备份的情况下,通过Mysql保存的数据文件如何恢复数据库

由于在一台测试机器上打算重新安装Mysql数据库,由于简单粗暴的直接卸载了,没有备份公司Discuz和Redmine使用的Mysql数据库,过程可想的悲惨。

还好的是只是卸载掉了Mysql的程序,所有的数据文件还是存在的。

下面是在恢复数据库的过程

1. Discuz数据库

Discuz数据库的恢复非常顺利, 在安装好新版本的Mysql后,直接将原来的数据库文件copy到新的数据目录中,重新启动mysql, 就能看到恢复的数据库了

2. Redmine数据库

本打算直接使用上面的经验,也能看到所有的表,但是就是执行查询的时候,总是报错"表不存在".

后来查了一些资料,发现,原因应该是Discuz和Redmine使用的Mysql引擎不一样导致的。

Discuz使用的是MyISAM, 而Redmine使用的是InnoDB.

解决的办法是,

除了要copy数据目录外,还要记得覆盖ibdata1文件。

以表”Table”为例: 如类型是MyISAM, 数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中. 如类型是InnoDB, 数据文件则存储在”$innodb_data_home_dir/″中的ibdata1文件中(一般情况),结构文件存在于table_name.frm中. MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。 而使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。 MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。解决方法就是:

同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务 由于MySQL这样数据混杂的形式, 往往很容易让使用者在备份时忘记了备份InnoDB, 从而导致了上述错误.

意思就是说在数据库引擎类型为InnoDB时,拷贝数据文件的同时还需要拷贝ibdata1,于是把ibdata1也拷贝过去覆盖,发现还是有点问题,于是停止mysql服务,将目录下的ib_logfile*文件全部删除掉,重新启动mysql服务,well done,可以了

高兴啊,于是稍微总结了,希望以后遇到相同的问题,能够快速解决。

1,在进行mysql数据库备份的或迁移的时候,尽量备份完成所需要的数据;

2,如果直接拷贝原有数据库文件"*.frm"、"*.MYD"、"*.MYI"等文件时候,如果原数据库引擎是InnoDB,切记还需拷贝ibdata1文件

3,备份数据库的时候,最好是用相关的工具进行备份或是导出sql文件,以免浪费时间在数据库恢复上

4,msyql版本或是备份工具的版本不同,也可能引起数据恢复有问题。

实践证明以上问题是存在的,解决方案是可行的,哈哈,为了以后方便,写了这篇博客随笔,希望大牛看到了不要鄙视,欢迎拍砖。

 1:MyISAM类型的数据文件可以在不同操作系统中COPY,这点很重要,布署的时候方便点。(只需要拷贝 数据库名字文件夹下面的文件,这样数据库就拷贝完了)

2:  InnoDB类型的 要注意多拷贝 ibdata1 , 最好不要是直接复制文件夹,而是应该用sql导入导出

相关文章

  • mysql之查找所有数据库中没有主键的表问题

    mysql之查找所有数据库中没有主键的表问题

    这篇文章主要介绍了mysql之查找所有数据库中没有主键的表问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • mysql中find_in_set函数的基本使用方法

    mysql中find_in_set函数的基本使用方法

    这篇文章主要给大家介绍了关于mysql中find_in_set函数的基本使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySQL 配置文件 my.cnf / my.ini 区别解析

    MySQL 配置文件 my.cnf / my.ini 区别解析

    充分理解 MySQL 配置文件中各个变量的意义对我们有针对性的优化 MySQL 数据库性能有非常大的意义,这篇文章主要介绍了MySQL 配置文件 my.cnf / my.ini 区别,需要的朋友可以参考下
    2022-11-11
  • Navicat查询结果不能修改的原因及解决方法

    Navicat查询结果不能修改的原因及解决方法

    下面小编就为大家带来一篇Navicat查询结果不能修改的原因及解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • MySQL max_allowed_packet的坑

    MySQL max_allowed_packet的坑

    max_allowed_packet是 MySQL 中的一个设定参数,用于设定所接受的包的大小,根据情形不同,其缺省值可能是 1M 或者 4M,本文主要介绍了MySQL max_allowed_packet的坑,感兴趣的可以了解一下
    2024-01-01
  • mysql之数据旧表导新表的实现示例

    mysql之数据旧表导新表的实现示例

    在MySQL中,可以通过INSERT INTO...SELECT * FROM...语句轻松复制两个结构相同或目标表包含源表所有列的表中的数据,本文就来介绍一下mysql之数据旧表导新表的实现示例,感兴趣的可以了解一下
    2024-10-10
  • MySQL数据库基础篇SQL窗口函数示例解析教程

    MySQL数据库基础篇SQL窗口函数示例解析教程

    这篇文章主要为大家介绍了MySQL数据库基础篇之窗口函数示例解析教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • mysql binlog 回滚示例解析

    mysql binlog 回滚示例解析

    严格来说mysqlbinlog 不能算回滚,他只是将过去的数据修改记录 重新执行一遍,但是从结果上来看,他也算把数据恢复到任意时间点了,这篇文章主要介绍了mysql binlog回滚示例解析,需要的朋友可以参考下
    2023-08-08
  • MySQL/MariaDB的Root密码重置教程

    MySQL/MariaDB的Root密码重置教程

    这篇文章主要给大家介绍了关于MySQL/MariaDB的Root密码重置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • mysql sock 文件解析及作用讲解

    mysql sock 文件解析及作用讲解

    这篇文章主要为大家介绍了mysql.sock 文件解析及作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论