有关mysql/ target=_blank class=infotextkey>mysql数据库恢复的方法,是指没有通过正常备份的情况下,通过mysql保存的数据文件如何恢复数据库。
问题是这样的:
由于在一台测试机器上打算重新安装mysql数据库,直接卸载了,没有备份公司discuz和redmine使用的mysql数据库。
还好只是卸载掉了mysql的程序,所有的数据文件还是存在的。
下面是在mysql数据库恢复的过程
1. discuz数据库
discuz数据库的恢复非常顺利, 在安装好新版本的mysql后,直接将原来的数据库文件copy到新的数据目录中,重新启动mysql, 就能看到恢复的数据库了
2. redmine数据库
本打算直接使用上面的经验,也能看到所有的表,但是就是执行查询时,总是报错"表不存在".
原因应该是discuz和redmine使用的mysql引擎不一样导致的。
discuz使用的是myisam, 而redmine使用的是innodb.
解决办法:
除了要copy数据目录外,还要记得覆盖ibdata1文件。
转自http://www.cnblogs.com/joeylee/archive/2012/09/27/2705685.html
以表”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服务,就可以了。
总结:
1,在进行mysql数据库备份的或迁移时,尽量备份完成所需要的数据;
2,如果直接拷贝原有数据库文件"*.frm"、"*.myd"、"*.myi"等文件时候,如果原数据库引擎是innodb,切记还需拷贝ibdata1文件。
3,备份数据库时,最好是用相关的工具进行备份或是导出sql文件,以免浪费时间在数据库恢复上。
4,msyql版本或是备份工具的版本不同,也可能引起数据恢复有问题。
1:myisam类型的数据文件可以在不同操作系统中copy,这点很重要,布署时方便点。(只需要拷贝 数据库名字文件夹下面的文件,这样数据库就拷贝完了)
2: innodb类型的 要注意多拷贝 ibdata1 , 最好不要是直接复制文件夹,而是应该用sql导入导出。