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

Sha*_*awn 23 mysql innodb

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

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

insert into test(...) values(...)
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢.

Sha*_*awn 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.
Run Code Online (Sandbox Code Playgroud)

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

  • 正确的拼写是innodb_force_recovery(而不是force_innodb_recovery) (6认同)

The*_*ear 12

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

ENGINE=MyISAM 与 ENGINE=InnoDB


小智 9

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

$df -ah
Run Code Online (Sandbox Code Playgroud)

如果它显示磁盘为100%,那就是-1右边的原点;)