Mysql'从存储引擎收到错误-1'错误

时间:2012-03-07 04:29:51

标签: mysql innodb

我有一个myism表'test',它包含一些过时的数据,现在我想重新创建表,所有列都相同,只是我将存储从myism更改为innodb。我用来重新创建表的转储sql就像:

drop table test;
create table test ( ... )
engine=innodb

insert into test(...) values(...)

这就是我收到错误“从存储引擎获得错误-1”的地方,我用Google搜索,大部分结果都集中在损坏的innodb表上。虽然对于我的情况,我认为它没有被破坏,但这只是我在丢弃时遗漏并创建语句的东西。

另一件事是,在执行了上面的sql后,剩下的用于表测试的是一个名为file.frm的文件,我想innodb表需要运行一些其他的东西,但不确定是什么。

如何解决此问题?我可能需要做更多这类任务,什么是放弃神话表并将其重新创建为innodb的正确程序?

感谢。

6 个答案:

答案 0 :(得分:57)

行。我找到了解决方案。 该问题是由my.cnf中的 innodb_force_recovery 参数引起的,该参数设置为4。

要解决此问题,请设置为0或从my.cnf

中完全删除此参数

如果检查错误日志,在查询期间,mysql将使用人类可读的语言编写:在启用innodb恢复模式之前,它不会让你更改表中的任何内容,完全是下一条消息:

InnoDB: A new raw disk partition was initialized or
InnoDB: innodb_force_recovery is on: we do not allow
InnoDB: database modifications by the user. Shut down
InnoDB: mysqld and edit my.cnf so that newraw is replaced
InnoDB: with raw, and innodb_force_... is removed.

请参阅: http://bugs.mysql.com/bug.php?id=30225

答案 1 :(得分:8)

-1错误的常见原因是完整磁盘。我有不同的小型虚拟机用于测试目的,innodb只是不断填充它们(我一直忘记它)。

$df -ah

如果它显示磁盘为100%,那就是那里-1的来源;)

答案 2 :(得分:0)

转到/etc/my.cnf

评论行innodb_force_recovery = 1

保存文件并重启mysql

答案 3 :(得分:0)

要了解unix或linux系统上任何系统错误代码的错误代码,请查看errno.h。在我的Mac上,我可以这样做:

$ grep 28 /usr/include/sys/errno.h
#define ENOSPC 28 / *设备上没有剩余空间* /

在其他操作系统上,例如linux,由于机器层子包含,会有一些其他层。但是,您应该能够查看这些文件并找到这些错误定义。

或者,使用'man'命令查找操作系统部分'2'下的“简介”或其他手册页。

答案 4 :(得分:0)

我在Azure上通过SQL导入进行了此操作,并且需要进行更改

ENGINE = MyISAM和ENGINE = InnoDB

答案 5 :(得分:0)

如果不存在banners,请创建表( id int(255)NOT NULL AUTO_INCREMENT, user int(255)NOT NULL缺省值'0', 键typetype) )
engine = myisam DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;

此代码更改为

如果不存在banners,请创建表( id int(255)NOT NULL AUTO_INCREMENT, user int(255)NOT NULL缺省值'0', 键typetype) )
engine = INNODB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;