2012-03-07 36 views
20

我有一個myism表「測試」,它包含一些過時的數據,現在我想重新創建表,所有列都是相同的,只是我將存儲從myism到innodb。我用重新創建表的傾倒SQL是這樣的:Mysql'從存儲引擎出現錯誤-1'錯誤

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

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

這就是我得到了錯誤「遇到錯誤-1從存儲引擎」,我用Google搜索周圍,大多數的結果集中在損壞的InnoDB表。雖然對於我的情況,我不認爲它是壞的,但這只是我在下降時錯過了並創造了聲明。

另一件事就是在執行上面的sql之後,所有剩下的用於表測試的文件是一個名爲file.frm的文件,我想innodb表需要一些其他的東西來運行但不知道是什麼。

我該如何解決這個問題?而且我可能需要做更多這類任務,放棄myism表並將它們重新創建爲innodb的正確過程是什麼?

謝謝。

+0

你的意思是'myisam'? – 2012-03-07 04:31:56

回答

56

好的。我找到了解決方案。 該問題是由innodb_force_recovery在my.cnf參數引起的,這是設置爲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

+6

正確的拼寫是innodb_force_recovery(而不是force_innodb_recovery) – 2012-08-30 13:41:46

+0

這真的有幫助!謝謝! :) – 2017-01-16 07:57:16

8

-1錯誤的常見原因是完整的磁盤。我有不同的小虛擬機用於測試目的,並且innodb只是填補它們(我一直在忘記它)。

$df -ah 

如果您展示了100%的磁盤,這就是-1的起源就在那裏;)

+1

我不同意.. ..磁盤滿的代碼是28 ..就像「從存儲引擎得到錯誤28」 – 2016-04-12 08:54:27

+0

是的,28是磁盤滿的代碼。 – 2017-01-16 07:57:44

+0

我錯誤-1,因爲我的光盤已滿 – Gerfried 2018-02-05 10:20:31

0

轉到在/etc/my.cnf

註釋行innodb_force_recovery = 1

保存文件並重新啓動mysql

0

要發現錯誤代碼是在unix或linux系統上的任何系統錯誤代碼,請查看errno.h。我的Mac上,我可以這樣做:

$ grep的28 /usr/include/sys/errno.h中
的#define ENOSPC 28/*沒有剩餘空間設備*/

在其它操作系統上,如作爲linux,由於machine layer sub包含了其他一些層。但是,您應該能夠查看這些文件並找到這些錯誤定義。

或者,使用'man'命令在操作系統部分的'2'部分下查找「intro」或其他手冊頁。