Reputation: 34229
I have a myism table 'test' which holds some out-dated data, now I want to recreate the table, all columns the same except that I changed the storage from myism to innodb. The dumped sql I used to recreate the table is like:
drop table test;
create table test ( ... )
engine=innodb
insert into test(...) values(...)
that's where I got the error "Got Error -1 from storage engine", I have googled around, most of the results focus on corrupted innodb tables. While for my case I don't think it's broken, it's just something I missed at the drop and create statements.
Another thing is that is after a executed the above sql, all that's left for table test is a file named file.frm, I guess innodb table needs some other stuff to run on but not sure what.
How can I fix this problem? And I probably need to do more tasks of this kind, what's the correct procedure to drop myism table and recreate them as innodb ones?
Thanks.
Upvotes: 28
Views: 52338
Reputation: 1
CREATE TABLE IF NOT EXISTS banners
(
id
int(255) NOT NULL AUTO_INCREMENT,
user
int(255) NOT NULL DEFAULT '0',
KEY type
(type
)
)
engine=myisam DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
this code change to
CREATE TABLE IF NOT EXISTS banners
(
id
int(255) NOT NULL AUTO_INCREMENT,
user
int(255) NOT NULL DEFAULT '0',
KEY type
(type
)
)
engine=INNODB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Upvotes: 0
Reputation: 5585
I had this with an SQL import on Azure and needed to change
ENGINE=MyISAM with ENGINE=InnoDB
Upvotes: 14
Reputation: 91
To discover what the error code is for any system error code on a unix or linux system, look in errno.h. On my mac, I can do:
$ grep 28 /usr/include/sys/errno.h
#define ENOSPC 28 /* No space left on device */
On other operating systems, such as linux, there will be some other layers because of machine layer sub includes. But, you should be able to look through those files and find these error definitions.
Alternatively, use the 'man' command to look for "intro" or other manual pages under section '2', the operating system section.
Upvotes: 0
Reputation: 29
Go to /etc/my.cnf
Comment line innodb_force_recovery=1
Save the file and restart mysql
Upvotes: 0
Reputation: 34229
OK. I found the solution. The issue was caused by innodb_force_recovery parameter in my.cnf, that was set to 4.
To solve the problem, set to 0 or completely remove this parameter from my.cnf
If you check error log, during query, mysql will write in human readable language that: It won't let you change anything in table until innodb recovery mode is enabled, exactly next message:
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.
Please refer to: http://bugs.mysql.com/bug.php?id=30225
Upvotes: 62
Reputation: 107
A common cause for the -1 error is a full disk. I have different small VMs for testing purposes, and innodb
just keeps filling them up (and I keep forgetting about it).
$df -ah
If it shows you the disk at 100%, that's the origin of the -1
right there ;)
Upvotes: 9