Error handling in InnoDB
is not always the same
as specified in the SQL standard. According to the standard, any
error during an SQL statement should cause the rollback of that
statement. InnoDB
sometimes rolls back only
part of the statement, or the whole transaction. The following
items describe how InnoDB
performs error
handling:
-
If you run out of file space in the tablespace, you get the MySQL
Table is full
error andInnoDB
rolls back the SQL statement. -
A transaction deadlock or a timeout in a lock wait causes
InnoDB
to roll back the whole transaction. -
A duplicate-key error rolls back the SQL statement, if you have not specified the
IGNORE
option in your statement. -
A
row too long error
rolls back the SQL statement. -
Other errors are mostly detected by the MySQL layer of code (above the
InnoDB
storage engine level), and they roll back the corresponding SQL statement. Locks are not released in a rollback of a single SQL statement.
During implicit rollbacks, as well as during the execution of an
explicit ROLLBACK
SQL command, SHOW
PROCESSLIST
displays Rolling back
in
the State
column for the relevant connection.
The following is a non-exhaustive list of common
InnoDB
-specific errors that you may
encounter, with information about why they occur and how to
resolve the problem.
-
1005 (ER_CANT_CREATE_TABLE)
Cannot create table. If the error message string refers to
errno
150, table creation failed because a foreign key constraint was not correctly formed. -
1016 (ER_CANT_OPEN_FILE)
Cannot find the
InnoDB
table from theInnoDB
data files though the.frm
file for the table exists. See Sección 15.17.1, “Resolver problemas de las operaciones del diccionario de datos deInnoDB
”. -
1114 (ER_RECORD_FILE_FULL)
InnoDB
has run out of free space in the tablespace. You should reconfigure the tablespace to add a new data file. -
1205 (ER_LOCK_WAIT_TIMEOUT)
Lock wait timeout expired. Transaction was rolled back.
-
1213 (ER_LOCK_DEADLOCK)
Transaction deadlock. You should rerun the transaction.
-
1216 (ER_NO_REFERENCED_ROW)
You are trying to add a row but there is no parent row, and a foreign key constraint fails. You should add the parent row first.
-
1217 (ER_ROW_IS_REFERENCED)
You are trying to delete a parent row that has children, and a foreign key constraint fails. You should delete the children first.
To print the meaning of an operating system error number, use the perror program that comes with the MySQL distribution.
The following table provides a list of some common Linux system error codes. For a more complete list, see Linux source code.
-
1 (EPERM)
Operation not permitted
-
2 (ENOENT)
No such file or directory
-
3 (ESRCH)
No such process
-
4 (EINTR)
Interrupted system call
-
5 (EIO)
I/O error
-
6 (ENXIO)
No such device or address
-
7 (E2BIG)
Arg list too long
-
8 (ENOEXEC)
Exec format error
-
9 (EBADF)
Bad file number
-
10 (ECHILD)
No child processes
-
11 (EAGAIN)
Try again
-
12 (ENOMEM)
Out of memory
-
13 (EACCES)
Permission denied
-
14 (EFAULT)
Bad address
-
15 (ENOTBLK)
Block device required
-
16 (EBUSY)
Device or resource busy
-
17 (EEXIST)
File exists
-
18 (EXDEV)
Cross-device link
-
19 (ENODEV)
No such device
-
20 (ENOTDIR)
Not a directory
-
21 (EISDIR)
Is a directory
-
22 (EINVAL)
Invalid argument
-
23 (ENFILE)
File table overflow
-
24 (EMFILE)
Too many open files
-
25 (ENOTTY)
Inappropriate ioctl for device
-
26 (ETXTBSY)
Text file busy
-
27 (EFBIG)
File too large
-
28 (ENOSPC)
No space left on device
-
29 (ESPIPE)
Illegal seek
-
30 (EROFS)
Read-only file system
-
31 (EMLINK)
Too many links
The following table provides a list of some common Windows system error codes. For a complete list see the Microsoft website.
-
1 (ERROR_INVALID_FUNCTION)
Incorrect function.
-
2 (ERROR_FILE_NOT_FOUND)
The system cannot find the file specified.
-
3 (ERROR_PATH_NOT_FOUND)
The system cannot find the path specified.
-
4 (ERROR_TOO_MANY_OPEN_FILES)
The system cannot open the file.
-
5 (ERROR_ACCESS_DENIED)
Access is denied.
-
6 (ERROR_INVALID_HANDLE)
The handle is invalid.
-
7 (ERROR_ARENA_TRASHED)
The storage control blocks were destroyed.
-
8 (ERROR_NOT_ENOUGH_MEMORY)
Not enough storage is available to process this command.
-
9 (ERROR_INVALID_BLOCK)
The storage control block address is invalid.
-
10 (ERROR_BAD_ENVIRONMENT)
The environment is incorrect.
-
11 (ERROR_BAD_FORMAT)
An attempt was made to load a program with an incorrect format.
-
12 (ERROR_INVALID_ACCESS)
The access code is invalid.
-
13 (ERROR_INVALID_DATA)
The data is invalid.
-
14 (ERROR_OUTOFMEMORY)
Not enough storage is available to complete this operation.
-
15 (ERROR_INVALID_DRIVE)
The system cannot find the drive specified.
-
16 (ERROR_CURRENT_DIRECTORY)
The directory cannot be removed.
-
17 (ERROR_NOT_SAME_DEVICE)
The system cannot move the file to a different disk drive.
-
18 (ERROR_NO_MORE_FILES)
There are no more files.
-
19 (ERROR_WRITE_PROTECT)
The media is write protected.
-
20 (ERROR_BAD_UNIT)
The system cannot find the device specified.
-
21 (ERROR_NOT_READY)
The device is not ready.
-
22 (ERROR_BAD_COMMAND)
The device does not recognize the command.
-
23 (ERROR_CRC)
Data error (cyclic redundancy check).
-
24 (ERROR_BAD_LENGTH)
The program issued a command but the command length is incorrect.
-
25 (ERROR_SEEK)
The drive cannot locate a specific area or track on the disk.
-
26 (ERROR_NOT_DOS_DISK)
The specified disk or diskette cannot be accessed.
-
27 (ERROR_SECTOR_NOT_FOUND)
The drive cannot find the sector requested.
-
28 (ERROR_OUT_OF_PAPER)
The printer is out of paper.
-
29 (ERROR_WRITE_FAULT)
The system cannot write to the specified device.
-
30 (ERROR_READ_FAULT)
The system cannot read from the specified device.
-
31 (ERROR_GEN_FAILURE)
A device attached to the system is not functioning.
-
32 (ERROR_SHARING_VIOLATION)
The process cannot access the file because it is being used by another process.
-
33 (ERROR_LOCK_VIOLATION)
The process cannot access the file because another process has locked a portion of the file.
-
34 (ERROR_WRONG_DISK)
The wrong diskette is in the drive. Insert %2 (Volume Serial Number: %3) into drive %1.
-
36 (ERROR_SHARING_BUFFER_EXCEEDED)
Too many files opened for sharing.
-
38 (ERROR_HANDLE_EOF)
Reached the end of the file.
-
39 (ERROR_HANDLE_DISK_FULL)
The disk is full.
-
87 (ERROR_INVALID_PARAMETER)
The parameter is incorrect. (If you get this error on Windows, and you have set
innodb_file_per_table
inmy.cnf
ormy.ini
, then add the lineinnodb_flush_method=unbuffered
to yourmy.cnf
ormy.ini
file.) -
112 (ERROR_DISK_FULL)
The disk is full.
-
123 (ERROR_INVALID_NAME)
The filename, directory name, or volume label syntax is incorrect.
-
1450 (ERROR_NO_SYSTEM_RESOURCES)
Insufficient system resources exist to complete the requested service.