MySQL InnoDB 数据库恢复方法
上周末我的Blog突然打不开了,页面显示:Error establishing a database connection。查看虚拟主机的phpmyadmin,发现数据表都在,但是数据没有了,点击和修复表都显示:Incorrect information in file xxxx.frm。立即联系虚拟空间提供商,说数据库发生错误了,并查资料协助他们很快就解决了。
因为我的WordPress的MySQL用的是InnoDB类型的表,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还有“*.MYD,*.MYI”文件,所以不能直接复制数据库文件来恢复使用,但是MyISAM类型的表是可以的。那么InnoDB类型的表恢复的解决方法如下:
同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服 务,如果不能成功的话,查看data文件夹中有个“*.err”错误日志文件,其中会对启动失败的原因有所描述的。比如我碰到过两种错误原因。
一种是类似这样的错误信息:
- INIFile code
-
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->InnoDB: Error: log file .\ib_logfile0 is of different size 0 10485760 bytes InnoDB: than specified in the .cnf file 0 25165824 bytes!
这是因为在mysql配置文件中配置的日志文件大小与实际的不相符。
解决方法是直接删掉旧的“ib_logfile0”等日志文件,重启MySQL后会自动生成新的日志文件的。
另一中则是这样的错误信息
- INIFile code
-
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->InnoDB: Operating system error number 5 in a file operation. InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory. It may also be you have created a subdirectory InnoDB: of the same name as a data file. InnoDB: File name .\ibdata1 InnoDB: File operation call: 'open'. InnoDB: Cannot continue operation.
经检查原来是“ibdata1”文件在复制的过程中不知怎的被加上只读属性了。
解决方法是去掉“ibdata1”文件的只读属性便可。

不大懂数据库…