mysql启动失败

查看日志文件
/var/log/mysql/error.log
错误记录 Plugin ‘InnoDB’ init function returned error.
InnoDB引擎有错误删除目录下/var/lib/mysql 的ibdata*与ib_logfile*文件
重启成功

mysql5.1版本后,innodb不在作为默认的设置。
采用innodb存储引擎,关系到data文件夹下面的一些文件:ib_logfile0、ib_logfile1和ibdata1,另外还有一个就是数据库名下面的众多.frm文件。先对这几个文件作简要介绍。
ib_logfile0和ib_logfile1是关于数据库的一些日志文件;
.frm文件是数据库中很多的表的结构描述文件;
ibdata1文件时数据库的真实数据存放文件。当缺失本文件时,进入数据库,用show tables;命令发现数据库表存在,但是执行select等操作就会出现1146:Table doesn’t exist这个错误了。可使用mysql –console命令对环境进行测试。

其实这是由ibdata1文件的错误引起的,这个应该在日志文件ib_logfile0和ib_logfile1中找到,于是把ibdata1文件删除掉,再次执行该命令,发现没有提示错误了,但进入数据库
以后,操作仍就导致1146这个错误。后来仔细一下,也是,你说你把ibdata1文件删除,相当于把数据库的真实数据删除了,这时你就会问为什么数据库表还存在呢,都能看到(其实我当初就是这么想的),因为数据库表结构的描述是在.frm的众多文件中的,所以能通过show tables;查看到。
那么下一个问题就出来了:ibdata1文件是从别人那里拷贝过来的,为什么在那边能用,到我这边就不能用了呢?这就是最核心的问题所在,因为mysql是采用缓冲方式来讲数据写入
到ibdata1文件中的,这正是fflush()函数存在的理由。因此当别人的mysql在运行时,你对data文件夹进行拷贝,即对ibdata1进行拷贝肯定会导致该文件中的数据出错的。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注