execute failed: Unknown table engine 'InnoDB' 我用的是linux版的xampp。本来是好的,不过由于今天突然断电,机子重启后,在mysql中执行select语句就遇到这个错误,show engines,发觉只有7条记录,缺少了InnoDB这条记录。再show variables like "have_%",看到have_innodb的value是no。再看my.cnf,skip-innodb那行是注释掉的,文件设置也是对的。请问这种情况,我是不是只能重装xampp了,有没有什么办法不用重装这个软件?谢谢。

解决方案 »

  1.   

    1. 看看错误日志 
    2. 看看my.cnf中有什么实质的相关内容
      

  2.   

    估计是ib_logfile文件坏了 如果没备份要悲剧了
      

  3.   

    请问linux版xampp的mysql的错误日志在哪啊?我怎么找不到。
      

  4.   

    啊,非常谢谢。找到了mysql的错误日志。我重启后,错误日至说明如下:101210 13:17:21 [Note] Plugin 'FEDERATED' is disabled.
    InnoDB: Unable to lock /opt/lampp/var/mysql/ibdata1,error:11
    InnoDB: Check that you do not already have another mysqld process
    InnoDB: using the same InnoDB data or log files.
    101210 13:17:21 InnoDB: Retrying to lock the first data file
    InnoDB: Unable to lock /opt/lampp/var/mysql/ibdata1,error:11
    InnoDB: Check that you do not already have another mysqld process
    InnoDB: using the same InnoDB data or log files.
    .....
      

  5.   

    哦,解决了,删掉ibdata1、ib_logfile0、ib_logfile1就好了。可又出新问题了,我在数据库里,show tables,看到这个那些表,可就是执行select,不让我访问,说这个表不存在。。不会数据库坏了吧?
      

  6.   

    你把IBDATA1都给删除了,INNODB的数据就全没有了。自然这些表就不存在了。INNODB和MYISAM存储引擎不一样,它的数据是放在IBDATA中的。
      

  7.   

    删到是没删,我只是改了个名。我还是可以再改回去的。可是我不把ibdata1删掉,它就会报InnoDB: Unable to lock /opt/lampp/var/mysql/ibdata1,error:11那我那些表还是访问不了啊。
      

  8.   

    做好备份。然后在MY。INI文件中添加参数 innodb_force_recovery=1
    试试,不行就加大这个数字,最大可以加到6.提醒: 做好备份。
      

  9.   

    那我还要把ibdata1还原成原先那个吗?这个备份是做哪个备份?数据库表?还是mysql的系统文件啊?
      

  10.   

    我加了那个参数,现在加到2,还是说Table 'XXX.XXX' doesn't exist我看了下mysql的错误日志,也还是说
    cannot find or open table XXX/XXX from the internal data dictionary of InnoDB though the .frm file for the table exists. Maybe ......改这个数字是不是没有用阿?我如果把ibdata1恢复成以前的那个文件,innodb又启不起来。
      

  11.   

    把ibdata1恢复成以前的那个文件
    然后逐步加这个innodb_force_recovery=1
      

  12.   

    用以前的还是不行,我把值改到4,报的错都是一样的。InnoDB: Unable to lock /opt/lampp/var/mysql/ibdata1, error: 11
    InnoDB: Check that you do not already have another mysqld process
    InnoDB: using the same InnoDB data or log files.
    101210 15:17:41  InnoDB: Unable to open the first data file
    InnoDB: Error in opening /opt/lampp/var/mysql/ibdata1
    101210 15:17:41  InnoDB: Operating system error number 11 in a file operation.
    InnoDB: Error number 11 means 'Resource temporarily unavailable'.
    InnoDB: Some operating system error numbers are described at
    InnoDB: http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.htmlInnoDB: Could not open or create data files.
    InnoDB: If you tried to add new data files, and it failed here,
    InnoDB: you should now edit innodb_data_file_path in my.cnf back
    InnoDB: to what it was, and remove the new ibdata files InnoDB created
    InnoDB: in this failed attempt. InnoDB only wrote those files full of
    InnoDB: zeros, but did not yet use them in any way. But be careful: do not
    InnoDB: remove old data files which contain your precious data!
    101210 15:17:41 [ERROR] Plugin 'InnoDB' init function returned error.
    101210 15:17:41 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.101210 15:17:41 [Note] PrimeBase XT (PBXT) Engine 1.0.08 RC loaded...
      

  13.   

    那这样我就有点不明白了,我把ibdata1、ib_logfile0、ib_logfile1这三个文件删了,重启mysql,系统会重新生成这三个文件,既然原innodb数据没了,这不就等于我重新安装了一个mysql吗?那我要移一个innodb数据库近来,要怎么弄呢?xampp下的mysql,每个数据库就是一个文件夹,里面有.frm .myd .myi这三种文件。
      

  14.   

    InnoDB: Unable to lock /opt/lampp/var/mysql/ibdata1, error: 11
    InnoDB: Check that you do not already have another mysqld process你是不是已经有一个MYSQLD进程启动了?
      

  15.   

    没有啊。我每次都stop mysql的,而且我也查了。会不会是ibdata1这个文件损坏了啊?
      

  16.   

    我用以前的ibdata1,在mysql里直接show engines,都没有innodb的纪录,have_innodb值都是no
      

  17.   

    应该是文件有问题。一般应该试着用 innodb_force_recovery=1试着恢复一下。但显然不是100%都能恢复。恢复的时候,你需要原来的三个文件 ibdata1, ib_logfile0、ib_logfile1
      

  18.   

    那文件有问题了,是不是就没戏啦?那三个文件我也一直没删,只是改了个名。你刚才说了以后,我就改回来,然后改innodb_force_recovery的参数,从1改到4,都报一样的错
    InnoDB: Unable to lock /opt/lampp/var/mysql/ibdata1, error: 11
    InnoDB: Check that you do not already have another mysqld process
    InnoDB: using the same InnoDB data or log files.
    而且mysql启动相当的慢。启动好后,我在mysql环境下对那个innodb数据库进行操作,都说unknown table engine 'InnoDB'。执行show engines,都没有innodb的纪录,have_innodb的值都是no。我想既然innodb引擎都找不到,那貌似该什么值都没用了。我在网上看到有说把这三个文件删掉,innodb引擎就可以起来了,然后我就把这三个文件移走了,重启mysql,innodb的问题解决了,但现在不认数据库里的table了。其实我这个数据库是bugzilla的数据库,数据库的建立是安装bugzilla时软件自动建的。我有用mysqldump备份数据库,是 .sql文件,我是不是source一下就可以啦?还是对于innodb型数据库,导入sql文件有别的说法啊?我现在都不敢动了。
      

  19.   

    谢谢,搞定了,用了以前的ibdata1的备份文件,改宿主名为nobody:nobody,删掉ib_logfile0和1这两个文件。重启mysql,就ok了。不过这几天的记录都没了。
      

  20.   


    我也碰到这问题了 也是把备份复制过去不能启动INNODB引擎 请问楼主“改宿主名为nobody:nobody”这句是什么意思
      

  21.   

    一次断电引发的innodb表空间错误,引发的innodb引擎全瘫血案,看了让人心惊肉跳。
    你啥mysql版本,所有innodb表空间多少G?能给我么?
    ibdata1, ib_logfile0、ib_logfile1
      

  22.   

    show plugin
    查看Innodb这条信息就表示安装好了。
     
    如果没有安装成功或者是在已经安装好mysql的情况下,只要执行下面语句再安装一次就OK。
    install plugin innodb soname 'ha_innodb.so' ;