Îáðàòíàÿ ñâÿçü

Appendix B. Errors, Error Codes, and Common Problems

This appendix lists common problems and errors that may occur and potential resolutions, in addition to listing the errors that may appear when you call MySQL from any host language. The first section covers problems and resolutions. Detailed information on errors is provided; The first list displays server error messages. The second list displays client program messages.

MySQL Enterprise The MySQL Enterprise Monitor provides a “Virtual DBA” to assist with problem solving. For more information, see http://www.mysql.com/products/enterprise/advisors.html.

B.1. Sources of Error Information

There are several sources of error information in MySQL:

Descriptions of server and client errors are provided later in this Appendix. For information about errors related to InnoDB, see Section 13.6.12, “InnoDB Error Handling”.

B.2. Types of Error Values

When an error occurs in MySQL, the server returns two types of error values:

  • A MySQL-specific error code. This value is numeric. It is not portable to other database systems.

  • An SQLSTATE value. The value is a five-character string (for example, '42S02'). The values are specified by ANSI SQL and ODBC and are more standardized.

A message string that provides a textual description of the error is also available.

When an error occurs, you can access the MySQL error code, the SQLSTATE value, and the message string using C API functions:

For prepared statements, the corresponding error functions are mysql_stmt_errno(), mysql_stmt_sqlstate(), and mysql_stmt_error(). All error functions are described in Section 21.9, “MySQL C API”.

The first two characters of an SQLSTATE value indicate the error class:

  • '00' indicates success.

  • '01' indicates a warning.

  • '02' indicates “not found.” These values are relevant only within the context of cursors and are used to control what happens when a cursor reaches the end of a data set.

  • Other values indicate an exception.

B.3. Server Error Codes and Messages

MySQL programs have access to several types of error information when the server returns an error. For example, the mysql client program displays errors using the following format:

shell> SELECT * FROM no_such_table;
ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist

The message displayed contains three types of information:

  • A numeric error code (1146). This number is MySQL-specific and is not portable to other database systems.

  • A five-character SQLSTATE value ('42S02'). The values are specified by ANSI SQL and ODBC and are more standardized. Not all MySQL error numbers are mapped to SQLSTATE error codes. The value 'HY000' (general error) is used for unmapped errors.

  • A message string that provides a textual description of the error.

Server error information comes from the following source files. For details about the way that error information is defined, see the MySQL Internals manual, available at http://dev.mysql.com/doc/.

  • Error message information is listed in the share/errmsg.txt file. %d and %s represent numbers and strings, respectively, that are substituted into the Message values when they are displayed.

  • The Error values listed in share/errmsg.txt are used to generate the definitions in the include/mysqld_error.h and include/mysqld_ername.h MySQL source files.

  • The SQLSTATE values listed in share/errmsg.txt are used to generate the definitions in the include/sql_state.h MySQL source file.

Because updates are frequent, it is possible that those files will contain additional error information not listed here.

  • Error: 1000 SQLSTATE: HY000 (ER_HASHCHK)

    Message: hashchk

  • Error: 1001 SQLSTATE: HY000 (ER_NISAMCHK)

    Message: isamchk

  • Error: 1002 SQLSTATE: HY000 (ER_NO)

    Message: NO

  • Error: 1003 SQLSTATE: HY000 (ER_YES)

    Message: YES


    Message: Can't create file '%s' (errno: %d)


    Message: Can't create table '%s' (errno: %d)

  • Error: 1006 SQLSTATE: HY000 (ER_CANT_CREATE_DB)

    Message: Can't create database '%s' (errno: %d)


    Message: Can't create database '%s'; database exists

  • Error: 1008 SQLSTATE: HY000 (ER_DB_DROP_EXISTS)

    Message: Can't drop database '%s'; database doesn't exist

  • Error: 1009 SQLSTATE: HY000 (ER_DB_DROP_DELETE)

    Message: Error dropping database (can't delete '%s', errno: %d)

  • Error: 1010 SQLSTATE: HY000 (ER_DB_DROP_RMDIR)

    Message: Error dropping database (can't rmdir '%s', errno: %d)


    Message: Error on delete of '%s' (errno: %d)


    Message: Can't read record in system table

  • Error: 1013 SQLSTATE: HY000 (ER_CANT_GET_STAT)

    Message: Can't get status of '%s' (errno: %d)

  • Error: 1014 SQLSTATE: HY000 (ER_CANT_GET_WD)

    Message: Can't get working directory (errno: %d)

  • Error: 1015 SQLSTATE: HY000 (ER_CANT_LOCK)

    Message: Can't lock file (errno: %d)

  • Error: 1016 SQLSTATE: HY000 (ER_CANT_OPEN_FILE)

    Message: Can't open file: '%s' (errno: %d)

  • Error: 1017 SQLSTATE: HY000 (ER_FILE_NOT_FOUND)

    Message: Can't find file: '%s' (errno: %d)

  • Error: 1018 SQLSTATE: HY000 (ER_CANT_READ_DIR)

    Message: Can't read dir of '%s' (errno: %d)

  • Error: 1019 SQLSTATE: HY000 (ER_CANT_SET_WD)

    Message: Can't change dir to '%s' (errno: %d)

  • Error: 1020 SQLSTATE: HY000 (ER_CHECKREAD)

    Message: Record has changed since last read in table '%s'

  • Error: 1021 SQLSTATE: HY000 (ER_DISK_FULL)

    Message: Disk full (%s); waiting for someone to free some space...

  • Error: 1022 SQLSTATE: 23000 (ER_DUP_KEY)

    Message: Can't write; duplicate key in table '%s'

  • Error: 1023 SQLSTATE: HY000 (ER_ERROR_ON_CLOSE)

    Message: Error on close of '%s' (errno: %d)

  • Error: 1024 SQLSTATE: HY000 (ER_ERROR_ON_READ)

    Message: Error reading file '%s' (errno: %d)

  • Error: 1025 SQLSTATE: HY000 (ER_ERROR_ON_RENAME)

    Message: Error on rename of '%s' to '%s' (errno: %d)

  • Error: 1026 SQLSTATE: HY000 (ER_ERROR_ON_WRITE)

    Message: Error writing file '%s' (errno: %d)

  • Error: 1027 SQLSTATE: HY000 (ER_FILE_USED)

    Message: '%s' is locked against change

  • Error: 1028 SQLSTATE: HY000 (ER_FILSORT_ABORT)

    Message: Sort aborted

  • Error: 1029 SQLSTATE: HY000 (ER_FORM_NOT_FOUND)

    Message: View '%s' doesn't exist for '%s'

  • Error: 1030 SQLSTATE: HY000 (ER_GET_ERRNO)

    Message: Got error %d from storage engine

  • Error: 1031 SQLSTATE: HY000 (ER_ILLEGAL_HA)

    Message: Table storage engine for '%s' doesn't have this option

  • Error: 1032 SQLSTATE: HY000 (ER_KEY_NOT_FOUND)

    Message: Can't find record in '%s'

  • Error: 1033 SQLSTATE: HY000 (ER_NOT_FORM_FILE)

    Message: Incorrect information in file: '%s'

  • Error: 1034 SQLSTATE: HY000 (ER_NOT_KEYFILE)

    Message: Incorrect key file for table '%s'; try to repair it

  • Error: 1035 SQLSTATE: HY000 (ER_OLD_KEYFILE)

    Message: Old key file for table '%s'; repair it!


    Message: Table '%s' is read only

  • Error: 1037 SQLSTATE: HY001 (ER_OUTOFMEMORY)

    Message: Out of memory; restart server and try again (needed %d bytes)


    Message: Out of sort memory; increase server sort buffer size


    Message: Unexpected EOF found when reading file '%s' (errno: %d)

  • Error: 1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR)

    Message: Too many connections


    Message: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space

  • Error: 1042 SQLSTATE: 08S01 (ER_BAD_HOST_ERROR)

    Message: Can't get hostname for your address

  • Error: 1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)

    Message: Bad handshake


    Message: Access denied for user '%s'@'%s' to database '%s'

  • Error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR)

    Message: Access denied for user '%s'@'%s' (using password: %s)

  • Error: 1046 SQLSTATE: 3D000 (ER_NO_DB_ERROR)

    Message: No database selected

  • Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)

    Message: Unknown command

  • Error: 1048 SQLSTATE: 23000 (ER_BAD_NULL_ERROR)

    Message: Column '%s' cannot be null

  • Error: 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR)

    Message: Unknown database '%s'


    Message: Table '%s' already exists

  • Error: 1051 SQLSTATE: 42S02 (ER_BAD_TABLE_ERROR)

    Message: Unknown table '%s'

  • Error: 1052 SQLSTATE: 23000 (ER_NON_UNIQ_ERROR)

    Message: Column '%s' in %s is ambiguous

  • Error: 1053 SQLSTATE: 08S01 (ER_SERVER_SHUTDOWN)

    Message: Server shutdown in progress

  • Error: 1054 SQLSTATE: 42S22 (ER_BAD_FIELD_ERROR)

    Message: Unknown column '%s' in '%s'


    Message: '%s' isn't in GROUP BY

  • Error: 1056 SQLSTATE: 42000 (ER_WRONG_GROUP_FIELD)

    Message: Can't group on '%s'

  • Error: 1057 SQLSTATE: 42000 (ER_WRONG_SUM_SELECT)

    Message: Statement has sum functions and columns in same statement

  • Error: 1058 SQLSTATE: 21S01 (ER_WRONG_VALUE_COUNT)

    Message: Column count doesn't match value count

  • Error: 1059 SQLSTATE: 42000 (ER_TOO_LONG_IDENT)

    Message: Identifier name '%s' is too long

  • Error: 1060 SQLSTATE: 42S21 (ER_DUP_FIELDNAME)

    Message: Duplicate column name '%s'

  • Error: 1061 SQLSTATE: 42000 (ER_DUP_KEYNAME)

    Message: Duplicate key name '%s'

  • Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)

    Message: Duplicate entry '%s' for key %d

  • Error: 1063 SQLSTATE: 42000 (ER_WRONG_FIELD_SPEC)

    Message: Incorrect column specifier for column '%s'

  • Error: 1064 SQLSTATE: 42000 (ER_PARSE_ERROR)

    Message: %s near '%s' at line %d

  • Error: 1065 SQLSTATE: 42000 (ER_EMPTY_QUERY)

    Message: Query was empty

  • Error: 1066 SQLSTATE: 42000 (ER_NONUNIQ_TABLE)

    Message: Not unique table/alias: '%s'

  • Error: 1067 SQLSTATE: 42000 (ER_INVALID_DEFAULT)

    Message: Invalid default value for '%s'

  • Error: 1068 SQLSTATE: 42000 (ER_MULTIPLE_PRI_KEY)

    Message: Multiple primary key defined

  • Error: 1069 SQLSTATE: 42000 (ER_TOO_MANY_KEYS)

    Message: Too many keys specified; max %d keys allowed

  • Error: 1070 SQLSTATE: 42000 (ER_TOO_MANY_KEY_PARTS)

    Message: Too many key parts specified; max %d parts allowed

  • Error: 1071 SQLSTATE: 42000 (ER_TOO_LONG_KEY)

    Message: Specified key was too long; max key length is %d bytes


    Message: Key column '%s' doesn't exist in table

  • Error: 1073 SQLSTATE: 42000 (ER_BLOB_USED_AS_KEY)

    Message: BLOB column '%s' can't be used in key specification with the used table type

  • Error: 1074 SQLSTATE: 42000 (ER_TOO_BIG_FIELDLENGTH)

    Message: Column length too big for column '%s' (max = %lu); use BLOB or TEXT instead

  • Error: 1075 SQLSTATE: 42000 (ER_WRONG_AUTO_KEY)

    Message: Incorrect table definition; there can be only one auto column and it must be defined as a key

  • Error: 1076 SQLSTATE: HY000 (ER_READY)

    Message: %s: ready for connections. Version: '%s' socket: '%s' port: %d


    Message: %s: Normal shutdown

  • Error: 1078 SQLSTATE: HY000 (ER_GOT_SIGNAL)

    Message: %s: Got signal %d. Aborting!


    Message: %s: Shutdown complete

  • Error: 1080 SQLSTATE: 08S01 (ER_FORCING_CLOSE)

    Message: %s: Forcing close of thread %ld user: '%s'

  • Error: 1081 SQLSTATE: 08S01 (ER_IPSOCK_ERROR)

    Message: Can't create IP socket

  • Error: 1082 SQLSTATE: 42S12 (ER_NO_SUCH_INDEX)

    Message: Table '%s' has no index like the one used in CREATE INDEX; recreate the table


    Message: Field separator argument is not what is expected; check the manual


    Message: You can't use fixed rowlength with BLOBs; please use 'fields terminated by'


    Message: The file '%s' must be in the database directory or be readable by all


    Message: File '%s' already exists

  • Error: 1087 SQLSTATE: HY000 (ER_LOAD_INFO)

    Message: Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld

  • Error: 1088 SQLSTATE: HY000 (ER_ALTER_INFO)

    Message: Records: %ld Duplicates: %ld

  • Error: 1089 SQLSTATE: HY000 (ER_WRONG_SUB_KEY)

    Message: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys


    Message: You can't delete all columns with ALTER TABLE; use DROP TABLE instead

  • Error: 1091 SQLSTATE: 42000 (ER_CANT_DROP_FIELD_OR_KEY)

    Message: Can't DROP '%s'; check that column/key exists

  • Error: 1092 SQLSTATE: HY000 (ER_INSERT_INFO)

    Message: Records: %ld Duplicates: %ld Warnings: %ld


    Message: You can't specify target table '%s' for update in FROM clause

  • Error: 1094 SQLSTATE: HY000 (ER_NO_SUCH_THREAD)

    Message: Unknown thread id: %lu


    Message: You are not owner of thread %lu

  • Error: 1096 SQLSTATE: HY000 (ER_NO_TABLES_USED)

    Message: No tables used

  • Error: 1097 SQLSTATE: HY000 (ER_TOO_BIG_SET)

    Message: Too many strings for column %s and SET


    Message: Can't generate a unique log-filename %s.(1-999)


    Message: Table '%s' was locked with a READ lock and can't be updated


    Message: Table '%s' was not locked with LOCK TABLES


    Message: BLOB/TEXT column '%s' can't have a default value

  • Error: 1102 SQLSTATE: 42000 (ER_WRONG_DB_NAME)

    Message: Incorrect database name '%s'

  • Error: 1103 SQLSTATE: 42000 (ER_WRONG_TABLE_NAME)

    Message: Incorrect table name '%s'

  • Error: 1104 SQLSTATE: 42000 (ER_TOO_BIG_SELECT)

    Message: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

  • Error: 1105 SQLSTATE: HY000 (ER_UNKNOWN_ERROR)

    Message: Unknown error

  • Error: 1106 SQLSTATE: 42000 (ER_UNKNOWN_PROCEDURE)

    Message: Unknown procedure '%s'


    Message: Incorrect parameter count to procedure '%s'


    Message: Incorrect parameters to procedure '%s'

  • Error: 1109 SQLSTATE: 42S02 (ER_UNKNOWN_TABLE)

    Message: Unknown table '%s' in %s


    Message: Column '%s' specified twice


    Message: Invalid use of group function


    Message: Table '%s' uses an extension that doesn't exist in this MySQL version


    Message: A table must have at least 1 column


    Message: The table '%s' is full


    Message: Unknown character set: '%s'

  • Error: 1116 SQLSTATE: HY000 (ER_TOO_MANY_TABLES)

    Message: Too many tables; MySQL can only use %d tables in a join

  • Error: 1117 SQLSTATE: HY000 (ER_TOO_MANY_FIELDS)

    Message: Too many columns

  • Error: 1118 SQLSTATE: 42000 (ER_TOO_BIG_ROWSIZE)

    Message: Row size too large. The maximum row size for the used table type, not counting BLOBs, is %ld. You have to change some columns to TEXT or BLOBs

  • Error: 1119 SQLSTATE: HY000 (ER_STACK_OVERRUN)

    Message: Thread stack overrun: Used: %ld of a %ld stack. Use 'mysqld -O thread_stack=#' to specify a bigger stack if needed

  • Error: 1120 SQLSTATE: 42000 (ER_WRONG_OUTER_JOIN)

    Message: Cross dependency found in OUTER JOIN; examine your ON conditions

  • Error: 1121 SQLSTATE: 42000 (ER_NULL_COLUMN_IN_INDEX)

    Message: Table handler doesn't support NULL in given index. Please change column '%s' to be NOT NULL or use another handler

  • Error: 1122 SQLSTATE: HY000 (ER_CANT_FIND_UDF)

    Message: Can't load function '%s'


    Message: Can't initialize function '%s'; %s

  • Error: 1124 SQLSTATE: HY000 (ER_UDF_NO_PATHS)

    Message: No paths allowed for shared library

  • Error: 1125 SQLSTATE: HY000 (ER_UDF_EXISTS)

    Message: Function '%s' already exists


    Message: Can't open shared library '%s' (errno: %d %s)


    Message: Can't find symbol '%s' in library


    Message: Function '%s' is not defined

  • Error: 1129 SQLSTATE: HY000 (ER_HOST_IS_BLOCKED)

    Message: Host '%s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'


    Message: Host '%s' is not allowed to connect to this MySQL server


    Message: You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords


    Message: You must have privileges to update tables in the mysql database to be able to change passwords for others

  • Error: 1133 SQLSTATE: 42000 (ER_PASSWORD_NO_MATCH)

    Message: Can't find any matching row in the user table

  • Error: 1134 SQLSTATE: HY000 (ER_UPDATE_INFO)

    Message: Rows matched: %ld Changed: %ld Warnings: %ld


    Message: Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug


    Message: Column count doesn't match value count at row %ld


    Message: Can't reopen table: '%s'

  • Error: 1138 SQLSTATE: 22004 (ER_INVALID_USE_OF_NULL)

    Message: Invalid use of NULL value

  • Error: 1139 SQLSTATE: 42000 (ER_REGEXP_ERROR)

    Message: Got error '%s' from regexp


    Message: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

  • Error: 1141 SQLSTATE: 42000 (ER_NONEXISTING_GRANT)

    Message: There is no such grant defined for user '%s' on host '%s'


    Message: %s command denied to user '%s'@'%s' for table '%s'


    Message: %s command denied to user '%s'@'%s' for column '%s' in table '%s'


    Message: Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used


    Message: The host or user argument to GRANT is too long

  • Error: 1146 SQLSTATE: 42S02 (ER_NO_SUCH_TABLE)

    Message: Table '%s.%s' doesn't exist


    Message: There is no such grant defined for user '%s' on host '%s' on table '%s'

  • Error: 1148 SQLSTATE: 42000 (ER_NOT_ALLOWED_COMMAND)

    Message: The used command is not allowed with this MySQL version

  • Error: 1149 SQLSTATE: 42000 (ER_SYNTAX_ERROR)

    Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use


    Message: Delayed insert thread couldn't get requested lock for table %s


    Message: Too many delayed threads in use


    Message: Aborted connection %ld to db: '%s' user: '%s' (%s)


    Message: Got a packet bigger than 'max_allowed_packet' bytes


    Message: Got a read error from the connection pipe

  • Error: 1155 SQLSTATE: 08S01 (ER_NET_FCNTL_ERROR)

    Message: Got an error from fcntl()


    Message: Got packets out of order


    Message: Couldn't uncompress communication packet

  • Error: 1158 SQLSTATE: 08S01 (ER_NET_READ_ERROR)

    Message: Got an error reading communication packets


    Message: Got timeout reading communication packets

  • Error: 1160 SQLSTATE: 08S01 (ER_NET_ERROR_ON_WRITE)

    Message: Got an error writing communication packets


    Message: Got timeout writing communication packets

  • Error: 1162 SQLSTATE: 42000 (ER_TOO_LONG_STRING)

    Message: Result string is longer than 'max_allowed_packet' bytes


    Message: The used table type doesn't support BLOB/TEXT columns


    Message: The used table type doesn't support AUTO_INCREMENT columns


    Message: INSERT DELAYED can't be used with table '%s' because it is locked with LOCK TABLES

  • Error: 1166 SQLSTATE: 42000 (ER_WRONG_COLUMN_NAME)

    Message: Incorrect column name '%s'

  • Error: 1167 SQLSTATE: 42000 (ER_WRONG_KEY_COLUMN)

    Message: The used storage engine can't index column '%s'

  • Error: 1168 SQLSTATE: HY000 (ER_WRONG_MRG_TABLE)

    Message: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

  • Error: 1169 SQLSTATE: 23000 (ER_DUP_UNIQUE)

    Message: Can't write, because of unique constraint, to table '%s'


    Message: BLOB/TEXT column '%s' used in key specification without a key length


    Message: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead

  • Error: 1172 SQLSTATE: 42000 (ER_TOO_MANY_ROWS)

    Message: Result consisted of more than one row


    Message: This table type requires a primary key


    Message: This version of MySQL is not compiled with RAID support


    Message: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

  • Error: 1176 SQLSTATE: 42000 (ER_KEY_DOES_NOT_EXITS)

    Message: Key '%s' doesn't exist in table '%s'

  • Error: 1177 SQLSTATE: 42000 (ER_CHECK_NO_SUCH_TABLE)

    Message: Can't open table


    Message: The storage engine for the table doesn't support %s


    Message: You are not allowed to execute this command in a transaction


    Message: Got error %d during COMMIT


    Message: Got error %d during ROLLBACK


    Message: Got error %d during FLUSH_LOGS


    Message: Got error %d during CHECKPOINT


    Message: Aborted connection %ld to db: '%s' user: '%s' host: '%s' (%s)


    Message: The storage engine for the table does not support binary table dump


    Message: Binlog closed, cannot RESET MASTER

  • Error: 1187 SQLSTATE: HY000 (ER_INDEX_REBUILD)

    Message: Failed rebuilding the index of dumped table '%s'

  • Error: 1188 SQLSTATE: HY000 (ER_MASTER)

    Message: Error from master: '%s'

  • Error: 1189 SQLSTATE: 08S01 (ER_MASTER_NET_READ)

    Message: Net error reading from master

  • Error: 1190 SQLSTATE: 08S01 (ER_MASTER_NET_WRITE)

    Message: Net error writing to master


    Message: Can't find FULLTEXT index matching the column list


    Message: Can't execute the given command because you have active locked tables or an active transaction


    Message: Unknown system variable '%s'


    Message: Table '%s' is marked as crashed and should be repaired


    Message: Table '%s' is marked as crashed and last (automatic?) repair failed


    Message: Some non-transactional changed tables couldn't be rolled back


    Message: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again

  • Error: 1198 SQLSTATE: HY000 (ER_SLAVE_MUST_STOP)

    Message: This operation cannot be performed with a running slave; run STOP SLAVE first


    Message: This operation requires a running slave; configure slave and do START SLAVE

  • Error: 1200 SQLSTATE: HY000 (ER_BAD_SLAVE)

    Message: The server is not configured as slave; fix in config file or with CHANGE MASTER TO

  • Error: 1201 SQLSTATE: HY000 (ER_MASTER_INFO)

    Message: Could not initialize master info structure; more error messages can be found in the MySQL error log

  • Error: 1202 SQLSTATE: HY000 (ER_SLAVE_THREAD)

    Message: Could not create slave thread; check system resources


    Message: User %s already has more than 'max_user_connections' active connections


    Message: You may only use constant expressions with SET


    Message: Lock wait timeout exceeded; try restarting transaction

  • Error: 1206 SQLSTATE: HY000 (ER_LOCK_TABLE_FULL)

    Message: The total number of locks exceeds the lock table size


    Message: Update locks cannot be acquired during a READ UNCOMMITTED transaction


    Message: DROP DATABASE not allowed while thread is holding global read lock


    Message: CREATE DATABASE not allowed while thread is holding global read lock


    Message: Incorrect arguments to %s


    Message: '%s'@'%s' is not allowed to create new users


    Message: Incorrect table definition; all MERGE tables must be in the same database

  • Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)

    Message: Deadlock found when trying to get lock; try restarting transaction


    Message: The used table type doesn't support FULLTEXT indexes


    Message: Cannot add foreign key constraint

  • Error: 1216 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW)

    Message: Cannot add or update a child row: a foreign key constraint fails

  • Error: 1217 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED)

    Message: Cannot delete or update a parent row: a foreign key constraint fails

  • Error: 1218 SQLSTATE: 08S01 (ER_CONNECT_TO_MASTER)

    Message: Error connecting to master: %s

  • Error: 1219 SQLSTATE: HY000 (ER_QUERY_ON_MASTER)

    Message: Error running query on master: %s


    Message: Error when executing command %s: %s

  • Error: 1221 SQLSTATE: HY000 (ER_WRONG_USAGE)

    Message: Incorrect usage of %s and %s


    Message: The used SELECT statements have a different number of columns


    Message: Can't execute the query because you have a conflicting read lock


    Message: Mixing of transactional and non-transactional tables is disabled

  • Error: 1225 SQLSTATE: HY000 (ER_DUP_ARGUMENT)

    Message: Option '%s' used twice in statement

  • Error: 1226 SQLSTATE: 42000 (ER_USER_LIMIT_REACHED)

    Message: User '%s' has exceeded the '%s' resource (current value: %ld)


    Message: Access denied; you need the %s privilege for this operation


    Message: Variable '%s' is a SESSION variable and can't be used with SET GLOBAL


    Message: Variable '%s' is a GLOBAL variable and should be set with SET GLOBAL

  • Error: 1230 SQLSTATE: 42000 (ER_NO_DEFAULT)

    Message: Variable '%s' doesn't have a default value

  • Error: 1231 SQLSTATE: 42000 (ER_WRONG_VALUE_FOR_VAR)

    Message: Variable '%s' can't be set to the value of '%s'

  • Error: 1232 SQLSTATE: 42000 (ER_WRONG_TYPE_FOR_VAR)

    Message: Incorrect argument type to variable '%s'

  • Error: 1233 SQLSTATE: HY000 (ER_VAR_CANT_BE_READ)

    Message: Variable '%s' can only be set, not read

  • Error: 1234 SQLSTATE: 42000 (ER_CANT_USE_OPTION_HERE)

    Message: Incorrect usage/placement of '%s'

  • Error: 1235 SQLSTATE: 42000 (ER_NOT_SUPPORTED_YET)

    Message: This version of MySQL doesn't yet support '%s'


    Message: Got fatal error %d from master when reading data from binary log: '%s'


    Message: Slave SQL thread ignored the query because of replicate-*-table rules


    Message: Variable '%s' is a %s variable

  • Error: 1239 SQLSTATE: 42000 (ER_WRONG_FK_DEF)

    Message: Incorrect foreign key definition for '%s': %s


    Message: Key reference and table reference don't match

  • Error: 1241 SQLSTATE: 21000 (ER_OPERAND_COLUMNS)

    Message: Operand should contain %d column(s)

  • Error: 1242 SQLSTATE: 21000 (ER_SUBQUERY_NO_1_ROW)

    Message: Subquery returns more than 1 row


    Message: Unknown prepared statement handler (%.*s) given to %s

  • Error: 1244 SQLSTATE: HY000 (ER_CORRUPT_HELP_DB)

    Message: Help database is corrupt or does not exist


    Message: Cyclic reference on subqueries

  • Error: 1246 SQLSTATE: HY000 (ER_AUTO_CONVERT)

    Message: Converting column '%s' from %s to %s


    Message: Reference '%s' not supported (%s)


    Message: Every derived table must have its own alias

  • Error: 1249 SQLSTATE: 01000 (ER_SELECT_REDUCED)

    Message: Select %u was reduced during optimization


    Message: Table '%s' from one of the SELECTs cannot be used in %s


    Message: Client does not support authentication protocol requested by server; consider upgrading MySQL client


    Message: All parts of a SPATIAL index must be NOT NULL


    Message: COLLATION '%s' is not valid for CHARACTER SET '%s'


    Message: Slave is already running


    Message: Slave already has been stopped


    Message: Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)

  • Error: 1257 SQLSTATE: HY000 (ER_ZLIB_Z_MEM_ERROR)

    Message: ZLIB: Not enough memory

  • Error: 1258 SQLSTATE: HY000 (ER_ZLIB_Z_BUF_ERROR)

    Message: ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)

  • Error: 1259 SQLSTATE: HY000 (ER_ZLIB_Z_DATA_ERROR)

    Message: ZLIB: Input data corrupted


    Message: %d line(s) were cut by GROUP_CONCAT()

  • Error: 1261 SQLSTATE: 01000 (ER_WARN_TOO_FEW_RECORDS)

    Message: Row %ld doesn't contain data for all columns

  • Error: 1262 SQLSTATE: 01000 (ER_WARN_TOO_MANY_RECORDS)

    Message: Row %ld was truncated; it contained more data than there were input columns

  • Error: 1263 SQLSTATE: 22004 (ER_WARN_NULL_TO_NOTNULL)

    Message: Column set to default value; NULL supplied to NOT NULL column '%s' at row %ld

  • Error: 1264 SQLSTATE: 22003 (ER_WARN_DATA_OUT_OF_RANGE)

    Message: Out of range value for column '%s' at row %ld

  • Error: 1265 SQLSTATE: 01000 (WARN_DATA_TRUNCATED)

    Message: Data truncated for column '%s' at row %ld


    Message: Using storage engine %s for table '%s'


    Message: Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'

  • Error: 1268 SQLSTATE: HY000 (ER_DROP_USER)

    Message: Cannot drop one or more of the requested users

  • Error: 1269 SQLSTATE: HY000 (ER_REVOKE_GRANTS)

    Message: Can't revoke all privileges for one or more of the requested users


    Message: Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'


    Message: Illegal mix of collations for operation '%s'


    Message: Variable '%s' is not a variable component (can't be used as XXXX.variable_name)


    Message: Unknown collation: '%s'


    Message: SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started


    Message: Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format


    Message: Field or reference '%s%s%s%s%s' of SELECT #%d was resolved in SELECT #%d


    Message: Incorrect parameter or combination of parameters for START SLAVE UNTIL


    Message: It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart


    Message: SQL thread is not to be started so UNTIL options are ignored

  • Error: 1280 SQLSTATE: 42000 (ER_WRONG_NAME_FOR_INDEX)

    Message: Incorrect index name '%s'


    Message: Incorrect catalog name '%s'

  • Error: 1282 SQLSTATE: HY000 (ER_WARN_QC_RESIZE)

    Message: Query cache failed to set size %lu; new query cache size is %lu

  • Error: 1283 SQLSTATE: HY000 (ER_BAD_FT_COLUMN)

    Message: Column '%s' cannot be part of FULLTEXT index


    Message: Unknown key cache '%s'


    Message: MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work


    Message: Unknown table engine '%s'


    Message: '%s' is deprecated; use '%s' instead


    Message: The target table %s of the %s is not updatable


    Message: The '%s' feature is disabled; you need MySQL built with '%s' to have it working


    Message: The MySQL server is running with the %s option so it cannot execute this statement


    Message: Column '%s' has duplicated value '%s' in %s


    Message: Truncated incorrect %s value: '%s'


    Message: Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause


    Message: Invalid ON UPDATE clause for '%s' column


    Message: This command is not supported in the prepared statement protocol yet

  • Error: 1296 SQLSTATE: HY000 (ER_GET_ERRMSG)

    Message: Got error %d '%s' from %s


    Message: Got temporary error %d '%s' from %s


    Message: Unknown or incorrect time zone: '%s'


    Message: Invalid TIMESTAMP value in column '%s' at row %ld


    Message: Invalid %s character string: '%s'


    Message: Result of %s() was larger than max_allowed_packet (%ld) - truncated


    Message: Conflicting declarations: '%s%s' and '%s%s'


    Message: Can't create a %s from within another stored routine

  • Error: 1304 SQLSTATE: 42000 (ER_SP_ALREADY_EXISTS)

    Message: %s %s already exists

  • Error: 1305 SQLSTATE: 42000 (ER_SP_DOES_NOT_EXIST)

    Message: %s %s does not exist

  • Error: 1306 SQLSTATE: HY000 (ER_SP_DROP_FAILED)

    Message: Failed to DROP %s %s

  • Error: 1307 SQLSTATE: HY000 (ER_SP_STORE_FAILED)

    Message: Failed to CREATE %s %s

  • Error: 1308 SQLSTATE: 42000 (ER_SP_LILABEL_MISMATCH)

    Message: %s with no matching label: %s

  • Error: 1309 SQLSTATE: 42000 (ER_SP_LABEL_REDEFINE)

    Message: Redefining label %s

  • Error: 1310 SQLSTATE: 42000 (ER_SP_LABEL_MISMATCH)

    Message: End-label %s without match

  • Error: 1311 SQLSTATE: 01000 (ER_SP_UNINIT_VAR)

    Message: Referring to uninitialized variable %s

  • Error: 1312 SQLSTATE: 0A000 (ER_SP_BADSELECT)

    Message: PROCEDURE %s can't return a result set in the given context

  • Error: 1313 SQLSTATE: 42000 (ER_SP_BADRETURN)

    Message: RETURN is only allowed in a FUNCTION

  • Error: 1314 SQLSTATE: 0A000 (ER_SP_BADSTATEMENT)

    Message: %s is not allowed in stored procedures


    Message: The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored. This option will be removed in MySQL 5.6.


    Message: The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN. This option will be removed in MySQL 5.6.

  • Error: 1317 SQLSTATE: 70100 (ER_QUERY_INTERRUPTED)

    Message: Query execution was interrupted

  • Error: 1318 SQLSTATE: 42000 (ER_SP_WRONG_NO_OF_ARGS)

    Message: Incorrect number of arguments for %s %s; expected %u, got %u

  • Error: 1319 SQLSTATE: 42000 (ER_SP_COND_MISMATCH)

    Message: Undefined CONDITION: %s

  • Error: 1320 SQLSTATE: 42000 (ER_SP_NORETURN)

    Message: No RETURN found in FUNCTION %s

  • Error: 1321 SQLSTATE: 2F005 (ER_SP_NORETURNEND)

    Message: FUNCTION %s ended without RETURN

  • Error: 1322 SQLSTATE: 42000 (ER_SP_BAD_CURSOR_QUERY)

    Message: Cursor statement must be a SELECT

  • Error: 1323 SQLSTATE: 42000 (ER_SP_BAD_CURSOR_SELECT)

    Message: Cursor SELECT must not have INTO

  • Error: 1324 SQLSTATE: 42000 (ER_SP_CURSOR_MISMATCH)

    Message: Undefined CURSOR: %s


    Message: Cursor is already open

  • Error: 1326 SQLSTATE: 24000 (ER_SP_CURSOR_NOT_OPEN)

    Message: Cursor is not open

  • Error: 1327 SQLSTATE: 42000 (ER_SP_UNDECLARED_VAR)

    Message: Undeclared variable: %s


    Message: Incorrect number of FETCH variables

  • Error: 1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA)

    Message: No data - zero rows fetched, selected, or processed

  • Error: 1330 SQLSTATE: 42000 (ER_SP_DUP_PARAM)

    Message: Duplicate parameter: %s

  • Error: 1331 SQLSTATE: 42000 (ER_SP_DUP_VAR)

    Message: Duplicate variable: %s

  • Error: 1332 SQLSTATE: 42000 (ER_SP_DUP_COND)

    Message: Duplicate condition: %s

  • Error: 1333 SQLSTATE: 42000 (ER_SP_DUP_CURS)

    Message: Duplicate cursor: %s

  • Error: 1334 SQLSTATE: HY000 (ER_SP_CANT_ALTER)

    Message: Failed to ALTER %s %s

  • Error: 1335 SQLSTATE: 0A000 (ER_SP_SUBSELECT_NYI)

    Message: Subquery value not supported


    Message: %s is not allowed in stored function or trigger


    Message: Variable or condition declaration after cursor or handler declaration


    Message: Cursor declaration after handler declaration

  • Error: 1339 SQLSTATE: 20000 (ER_SP_CASE_NOT_FOUND)

    Message: Case not found for CASE statement


    Message: Configuration file '%s' is too big


    Message: Malformed file type header in file '%s'


    Message: Unexpected end of file while parsing comment '%s'


    Message: Error while parsing parameter '%s' (line: '%s')


    Message: Unexpected end of file while skipping unknown parameter '%s'

  • Error: 1345 SQLSTATE: HY000 (ER_VIEW_NO_EXPLAIN)

    Message: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table


    Message: File '%s' has unknown type '%s' in its header

  • Error: 1347 SQLSTATE: HY000 (ER_WRONG_OBJECT)

    Message: '%s.%s' is not %s


    Message: Column '%s' is not updatable


    Message: View's SELECT contains a subquery in the FROM clause


    Message: View's SELECT contains a '%s' clause


    Message: View's SELECT contains a variable or parameter


    Message: View's SELECT refers to a temporary table '%s'

  • Error: 1353 SQLSTATE: HY000 (ER_VIEW_WRONG_LIST)

    Message: View's SELECT and view's field list have different column counts

  • Error: 1354 SQLSTATE: HY000 (ER_WARN_VIEW_MERGE)

    Message: View merge algorithm can't be used here for now (assumed undefined algorithm)


    Message: View being updated does not have complete key of underlying table in it

  • Error: 1356 SQLSTATE: HY000 (ER_VIEW_INVALID)

    Message: View '%s.%s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

  • Error: 1357 SQLSTATE: HY000 (ER_SP_NO_DROP_SP)

    Message: Can't drop or alter a %s from within another stored routine

  • Error: 1358 SQLSTATE: HY000 (ER_SP_GOTO_IN_HNDLR)

    Message: GOTO is not allowed in a stored procedure handler


    Message: Trigger already exists


    Message: Trigger does not exist


    Message: Trigger's '%s' is view or temporary table


    Message: Updating of %s row is not allowed in %strigger


    Message: There is no %s row in %s trigger


    Message: Field '%s' doesn't have a default value

  • Error: 1365 SQLSTATE: 22012 (ER_DIVISION_BY_ZERO)

    Message: Division by 0


    Message: Incorrect %s value: '%s' for column '%s' at row %ld


    Message: Illegal %s '%s' value found during parsing


    Message: CHECK OPTION on non-updatable view '%s.%s'


    Message: CHECK OPTION failed '%s.%s'


    Message: %s command denied to user '%s'@'%s' for routine '%s'

  • Error: 1371 SQLSTATE: HY000 (ER_RELAY_LOG_FAIL)

    Message: Failed purging old relay logs: %s

  • Error: 1372 SQLSTATE: HY000 (ER_PASSWD_LENGTH)

    Message: Password hash should be a %d-digit hexadecimal number


    Message: Target log not found in binlog index


    Message: I/O error reading log index file


    Message: Server configuration does not permit binlog purge

  • Error: 1376 SQLSTATE: HY000 (ER_FSEEK_FAIL)

    Message: Failed on fseek()


    Message: Fatal error during log purge

  • Error: 1378 SQLSTATE: HY000 (ER_LOG_IN_USE)

    Message: A purgeable log is in use, will not purge


    Message: Unknown error during log purge

  • Error: 1380 SQLSTATE: HY000 (ER_RELAY_LOG_INIT)

    Message: Failed initializing relay log position: %s


    Message: You are not using binary logging


    Message: The '%s' syntax is reserved for purposes internal to the MySQL server

  • Error: 1383 SQLSTATE: HY000 (ER_WSAS_FAILED)

    Message: WSAStartup Failed


    Message: Can't handle procedures with different groups yet

  • Error: 1385 SQLSTATE: HY000 (ER_NO_GROUP_FOR_PROC)

    Message: Select must have a group with this procedure

  • Error: 1386 SQLSTATE: HY000 (ER_ORDER_WITH_PROC)

    Message: Can't use ORDER clause with this procedure


    Message: Binary logging and replication forbid changing the global server %s

  • Error: 1388 SQLSTATE: HY000 (ER_NO_FILE_MAPPING)

    Message: Can't map file: %s, errno: %d

  • Error: 1389 SQLSTATE: HY000 (ER_WRONG_MAGIC)

    Message: Wrong magic in %s

  • Error: 1390 SQLSTATE: HY000 (ER_PS_MANY_PARAM)

    Message: Prepared statement contains too many placeholders

  • Error: 1391 SQLSTATE: HY000 (ER_KEY_PART_0)

    Message: Key part '%s' length cannot be 0

  • Error: 1392 SQLSTATE: HY000 (ER_VIEW_CHECKSUM)

    Message: View text checksum failed


    Message: Can not modify more than one base table through a join view '%s.%s'


    Message: Can not insert into join view '%s.%s' without fields list


    Message: Can not delete from join view '%s.%s'

  • Error: 1396 SQLSTATE: HY000 (ER_CANNOT_USER)

    Message: Operation %s failed for %s

  • Error: 1397 SQLSTATE: XAE04 (ER_XAER_NOTA)

    Message: XAER_NOTA: Unknown XID

  • Error: 1398 SQLSTATE: XAE05 (ER_XAER_INVAL)

    Message: XAER_INVAL: Invalid arguments (or unsupported command)

  • Error: 1399 SQLSTATE: XAE07 (ER_XAER_RMFAIL)

    Message: XAER_RMFAIL: The command cannot be executed when global transaction is in the %s state


    Message: XAER_OUTSIDE: Some work is done outside global transaction

  • Error: 1401 SQLSTATE: XAE03 (ER_XAER_RMERR)

    Message: XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency

  • Error: 1402 SQLSTATE: XA100 (ER_XA_RBROLLBACK)

    Message: XA_RBROLLBACK: Transaction branch was rolled back


    Message: There is no such grant defined for user '%s' on host '%s' on routine '%s'


    Message: Failed to grant EXECUTE and ALTER ROUTINE privileges


    Message: Failed to revoke all privileges to dropped routine

  • Error: 1406 SQLSTATE: 22001 (ER_DATA_TOO_LONG)

    Message: Data too long for column '%s' at row %ld

  • Error: 1407 SQLSTATE: 42000 (ER_SP_BAD_SQLSTATE)

    Message: Bad SQLSTATE: '%s'

  • Error: 1408 SQLSTATE: HY000 (ER_STARTUP)

    Message: %s: ready for connections. Version: '%s' socket: '%s' port: %d %s


    Message: Can't load value from file with fixed size rows to variable


    Message: You are not allowed to create a user with GRANT


    Message: Incorrect %s value: '%s' for function %s


    Message: Table definition has changed, please retry transaction

  • Error: 1413 SQLSTATE: 42000 (ER_SP_DUP_HANDLER)

    Message: Duplicate handler declared in the same block

  • Error: 1414 SQLSTATE: 42000 (ER_SP_NOT_VAR_ARG)

    Message: OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger

  • Error: 1415 SQLSTATE: 0A000 (ER_SP_NO_RETSET)

    Message: Not allowed to return a result set from a %s


    Message: Cannot get geometry object from data you send to the GEOMETRY field


    Message: A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes


    Message: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)


    Message: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)


    Message: You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.


    Message: The statement (%lu) has no open cursor.


    Message: Explicit or implicit commit is not allowed in stored function or trigger.


    Message: Field of view '%s.%s' underlying table doesn't have a default value

  • Error: 1424 SQLSTATE: HY000 (ER_SP_NO_RECURSION)

    Message: Recursive stored functions and triggers are not allowed.

  • Error: 1425 SQLSTATE: 42000 (ER_TOO_BIG_SCALE)

    Message: Too big scale %d specified for column '%s'. Maximum is %lu.

  • Error: 1426 SQLSTATE: 42000 (ER_TOO_BIG_PRECISION)

    Message: Too big precision %d specified for column '%s'. Maximum is %lu.

  • Error: 1427 SQLSTATE: 42000 (ER_M_BIGGER_THAN_D)

    Message: For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%s').


    Message: You can't combine write-locking of system tables with other tables or lock types


    Message: Unable to connect to foreign data source: %s


    Message: There was a problem processing the query on the foreign data source. Data source error: %s


    Message: The foreign data source you are trying to reference does not exist. Data source error: %s


    Message: Can't create federated table. The data source connection string '%s' is not in the correct format


    Message: The data source connection string '%s' is not in the correct format


    Message: Can't create federated table. Foreign data src error: %s


    Message: Trigger in wrong schema


    Message: Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack.

  • Error: 1437 SQLSTATE: 42000 (ER_TOO_LONG_BODY)

    Message: Routine body for '%s' is too long


    Message: Cannot drop default keycache


    Message: Display width out of range for column '%s' (max = %lu)

  • Error: 1440 SQLSTATE: XAE08 (ER_XAER_DUPID)

    Message: XAER_DUPID: The XID already exists


    Message: Datetime function: %s field overflow


    Message: Can't update table '%s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.


    Message: The definition of table '%s' prevents operation %s on table '%s'.

  • Error: 1444 SQLSTATE: HY000 (ER_PS_NO_RECURSION)

    Message: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner


    Message: Not allowed to set autocommit from a stored function or trigger


    Message: Definer is not fully qualified

  • Error: 1447 SQLSTATE: HY000 (ER_VIEW_FRM_NO_USER)

    Message: View '%s'.'%s' has no definer information (old table format). Current user is used as definer. Please recreate the view!

  • Error: 1448 SQLSTATE: HY000 (ER_VIEW_OTHER_USER)

    Message: You need the SUPER privilege for creation view with '%s'@'%s' definer

  • Error: 1449 SQLSTATE: HY000 (ER_NO_SUCH_USER)

    Message: The user specified as a definer ('%s'@'%s') does not exist


    Message: Changing schema from '%s' to '%s' is not allowed.

  • Error: 1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2)

    Message: Cannot delete or update a parent row: a foreign key constraint fails (%s)

  • Error: 1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2)

    Message: Cannot add or update a child row: a foreign key constraint fails (%s)

  • Error: 1453 SQLSTATE: 42000 (ER_SP_BAD_VAR_SHADOW)

    Message: Variable '%s' must be quoted with `...`, or renamed

  • Error: 1454 SQLSTATE: HY000 (ER_TRG_NO_DEFINER)

    Message: No definer attribute for trigger '%s'.'%s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.

  • Error: 1455 SQLSTATE: HY000 (ER_OLD_FILE_FORMAT)

    Message: '%s' has an old format, you should re-create the '%s' object(s)


    Message: Recursive limit %d (as set by the max_sp_recursion_depth variable) was exceeded for routine %s


    Message: Failed to load routine %s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)

  • Error: 1458 SQLSTATE: 42000 (ER_SP_WRONG_NAME)

    Message: Incorrect routine name '%s'


    Message: Table upgrade required. Please do "REPAIR TABLE `%s`" or dump/reload to fix it!

  • Error: 1460 SQLSTATE: 42000 (ER_SP_NO_AGGREGATE)

    Message: AGGREGATE is not supported for stored functions


    Message: Can't create more than max_prepared_stmt_count statements (current value: %lu)


    Message: `%s`.`%s` contains view recursion


    Message: non-grouping field '%s' is used in %s clause


    Message: The used table type doesn't support SPATIAL indexes


    Message: Triggers can not be created on system tables


    Message: Leading spaces are removed from name '%s'


    Message: Failed to read auto-increment value from storage engine

  • Error: 1468 SQLSTATE: HY000 (ER_USERNAME)

    Message: user name

  • Error: 1469 SQLSTATE: HY000 (ER_HOSTNAME)

    Message: host name


    Message: String '%s' is too long for %s (should be no longer than %d)


    Message: The target table %s of the %s is not insertable-into


    Message: Table '%s' is differently defined or of non-MyISAM type or doesn't exist


    Message: Too high level of nesting for select


    Message: Name '%s' has become ''


    Message: First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY


    Message: The foreign server, %s, you are trying to create already exists.


    Message: The foreign server name you are trying to reference does not exist. Data source error: %s


    Message: Table storage engine '%s' does not support the create option '%s'


    Message: Syntax error: %s PARTITIONING requires definition of VALUES %s for each partition


    Message: Only %s PARTITIONING can use VALUES %s in partition definition


    Message: MAXVALUE can only be used in last partition definition


    Message: Subpartitions can only be hash partitions and by key


    Message: Must define subpartitions on all partitions if on one partition


    Message: Wrong number of partitions defined, mismatch with previous setting


    Message: Wrong number of subpartitions defined, mismatch with previous setting


    Message: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed


    Message: Expression in RANGE/LIST VALUES must be constant


    Message: Field in list of fields for partition function not found in table


    Message: List of fields is only allowed in KEY partitions


    Message: The partition info in the frm file is not consistent with what can be written into the frm file


    Message: The %s function returns the wrong type


    Message: For %s partitions each partition must be defined


    Message: VALUES LESS THAN value must be strictly increasing for each partition


    Message: VALUES value must be of same type as partition function


    Message: Multiple definition of same constant in list partitioning


    Message: Partitioning can not be used stand-alone in query


    Message: The mix of handlers in the partitions is not allowed in this version of MySQL


    Message: For the partitioned engine it is necessary to define all %s


    Message: Too many partitions (including subpartitions) were defined


    Message: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning


    Message: Failed to create specific handler file


    Message: A BLOB field is not allowed in partition function


    Message: A %s must include all columns in the table's partitioning function

  • Error: 1504 SQLSTATE: HY000 (ER_NO_PARTS_ERROR)

    Message: Number of %s = 0 is not an allowed value


    Message: Partition management on a not partitioned table is not possible


    Message: Foreign key clause is not yet supported in conjunction with partitioning


    Message: Error in list of partitions to %s


    Message: Cannot remove all partitions, use DROP TABLE instead


    Message: COALESCE PARTITION can only be used on HASH/KEY partitions


    Message: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers


    Message: REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs


    Message: %s PARTITION can only be used on RANGE/LIST partitions


    Message: Trying to Add partition(s) with wrong number of subpartitions


    Message: At least one partition must be added


    Message: At least one partition must be coalesced


    Message: More partitions to reorganize than there are partitions


    Message: Duplicate partition name %s

  • Error: 1518 SQLSTATE: HY000 (ER_NO_BINLOG_ERROR)

    Message: It is not allowed to shut off binlog on this command


    Message: When reorganizing a set of partitions they must be in consecutive order


    Message: Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range


    Message: Partition function not supported in this version for this handler


    Message: Partition state cannot be defined from CREATE/ALTER TABLE


    Message: The %s handler only supports 32 bit integers in VALUES


    Message: Plugin '%s' is not loaded

  • Error: 1525 SQLSTATE: HY000 (ER_WRONG_VALUE)

    Message: Incorrect %s value: '%s'


    Message: Table has no partition for value %s


    Message: It is not allowed to specify %s more than once


    Message: Failed to create %s


    Message: Failed to drop %s


    Message: The handler doesn't support autoextend of tablespaces


    Message: A size parameter was incorrectly specified, either number or on the form 10M


    Message: The size number was correct but we don't allow the digit part to be more than 2 billion


    Message: Failed to alter: %s


    Message: Writing one row to the row-based binary log failed


    Message: Table definition on master and slave does not match: %s


    Message: Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events


    Message: Event '%s' already exists


    Message: Failed to store event %s. Error code %d from storage engine.


    Message: Unknown event '%s'


    Message: Failed to alter event '%s'


    Message: Failed to drop %s


    Message: INTERVAL is either not positive or too big


    Message: ENDS is either invalid or before STARTS


    Message: Event execution time is in the past. Event has been disabled


    Message: Failed to open mysql.event


    Message: No datetime expression provided


    Message: Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted


    Message: Cannot load from mysql.%s. The table is probably corrupted


    Message: Failed to delete the event from mysql.event


    Message: Error during compilation of event's body

  • Error: 1551 SQLSTATE: HY000 (ER_EVENT_SAME_NAME)

    Message: Same old and new event name


    Message: Data for column '%s' too long

  • Error: 1553 SQLSTATE: HY000 (ER_DROP_INDEX_FK)

    Message: Cannot drop index '%s': needed in a foreign key constraint


    Message: The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead


    Message: You can't write-lock a log table. Only read access is possible


    Message: You can't use locks with log tables.


    Message: Upholding foreign key constraints for table '%s', entry '%s', key %d would lead to a duplicate entry


    Message: Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysql_upgrade to fix this error.


    Message: Cannot switch out of the row-based binary log format when the session has open temporary tables


    Message: Cannot change the binary logging format inside a stored function or trigger


    Message: The NDB cluster engine does not support changing the binlog format on the fly yet


    Message: Cannot create temporary table with partitions


    Message: Partition constant is out of partition function domain


    Message: This partition function is not allowed

  • Error: 1565 SQLSTATE: HY000 (ER_DDL_LOG_ERROR)

    Message: Error in DDL log


    Message: Not allowed to use NULL value in VALUES LESS THAN


    Message: Incorrect partition name


    Message: Transaction isolation level can't be changed while a transaction is in progress


    Message: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '%s' for key '%s'


    Message: Internal scheduler error %d


    Message: Error during starting/stopping of the scheduler. Error code %u


    Message: Engine cannot be used in partitioned tables


    Message: Cannot activate '%s' log


    Message: The server was not built with row-based replication

  • Error: 1575 SQLSTATE: HY000 (ER_BASE64_DECODE_ERROR)

    Message: Decoding of base64 string failed


    Message: Recursion of EVENT DDL statements is forbidden when body is present

  • Error: 1577 SQLSTATE: HY000 (ER_EVENTS_DB_ERROR)

    Message: Cannot proceed because system tables used by Event Scheduler were found damaged at server start


    Message: Only integers allowed as number here


    Message: This storage engine cannot be used for log tables"


    Message: You cannot '%s' a log table if logging is enabled


    Message: Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'


    Message: Incorrect parameter count in the call to native function '%s'


    Message: Incorrect parameters in the call to native function '%s'


    Message: Incorrect parameters in the call to stored function '%s'


    Message: This function '%s' has the same name as a native function

  • Error: 1586 SQLSTATE: 23000 (ER_DUP_ENTRY_WITH_KEY_NAME)

    Message: Duplicate entry '%s' for key '%s'


    Message: Too many files opened, please execute the command again


    Message: Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.


    Message: Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.


    Message: The incident %s occured on the master. Message: %s


    Message: Table has no partition for some existing values


    Message: Statement may not be safe to log in statement format.


    Message: Fatal error: %s


    Message: Relay log read failure: %s


    Message: Relay log write failure: %s


    Message: Failed to create %s


    Message: Master command %s failed: %s


    Message: Binary logging not possible. Message: %s


    Message: View `%s`.`%s` has no creation context


    Message: Creation context of view `%s`.`%s' is invalid


    Message: Creation context of stored routine `%s`.`%s` is invalid


    Message: Corrupted TRG file for table `%s`.`%s`


    Message: Triggers for table `%s`.`%s` have no creation context


    Message: Trigger creation context of table `%s`.`%s` is invalid


    Message: Creation context of event `%s`.`%s` is invalid


    Message: Cannot open table for trigger `%s`.`%s`


    Message: Cannot create stored routine `%s`. Check warnings


    Message: Ambiguous slave modes combination. %s


    Message: The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.


    Message: Corrupted replication event was detected


    Message: Invalid column reference (%s) in LOAD DATA

  • Error: 1612 SQLSTATE: HY000 (ER_LOG_PURGE_NO_FILE)

    Message: Being purged log %s was not found

  • Error: 1613 SQLSTATE: XA106 (ER_XA_RBTIMEOUT)

    Message: XA_RBTIMEOUT: Transaction branch was rolled back: took too long

  • Error: 1614 SQLSTATE: XA102 (ER_XA_RBDEADLOCK)

    Message: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected


    Message: Prepared statement needs to be re-prepared


    Message: DELAYED option not supported for table '%s'


    Message: The master info structure does not exist


    Message: <%s> option ignored


    Message: Built-in plugins cannot be deleted

  • Error: 1620 SQLSTATE: HY000 (WARN_PLUGIN_BUSY)

    Message: Plugin is busy and will be uninstalled on shutdown


    Message: %s variable '%s' is read-only. Use SET %s to assign the value


    Message: Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted


    Message: Unexpected master's heartbeat data: %s


    Message: The requested value for the heartbeat period %s %s


    Message: Bad schema for mysql.ndb_replication table. Message: %s


    Message: Error in parsing conflict function. Message: %s


    Message: Write to exceptions table failed. Message: %s"


    Message: Comment for table '%s' is too long (max = %lu)


    Message: Comment for field '%s' is too long (max = %lu)


    Message: FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual

  • Error: 1631 SQLSTATE: HY000 (ER_DATABASE_NAME)

    Message: Database

  • Error: 1632 SQLSTATE: HY000 (ER_TABLE_NAME)

    Message: Table


    Message: Partition


    Message: Subpartition


    Message: Temporary

  • Error: 1636 SQLSTATE: HY000 (ER_RENAMED_NAME)

    Message: Renamed


    Message: Too many active concurrent transactions


    Message: Non-ASCII separator arguments are not fully supported


    Message: debug sync point wait timed out


    Message: debug sync point hit limit reached

B.4. Client Error Codes and Messages

Client error information comes from the following source files:

  • The Error values and the symbols in parentheses correspond to definitions in the include/errmsg.h MySQL source file.

  • The Message values correspond to the error messages that are listed in the libmysql/errmsg.c file. %d and %s represent numbers and strings, respectively, that are substituted into the messages when they are displayed.

Because updates are frequent, it is possible that those files will contain additional error information not listed here.

B.5. Problems and Common Errors

This section lists some common problems and error messages that you may encounter. It describes how to determine the causes of the problems and what to do to solve them.

B.5.1. How to Determine What Is Causing a Problem

When you run into a problem, the first thing you should do is to find out which program or piece of equipment is causing it:

  • If you have one of the following symptoms, then it is probably a hardware problems (such as memory, motherboard, CPU, or hard disk) or kernel problem:

    • The keyboard doesn't work. This can normally be checked by pressing the Caps Lock key. If the Caps Lock light doesn't change, you have to replace your keyboard. (Before doing this, you should try to restart your computer and check all cables to the keyboard.)

    • The mouse pointer doesn't move.

    • The machine doesn't answer to a remote machine's pings.

    • Other programs that are not related to MySQL don't behave correctly.

    • Your system restarted unexpectedly. (A faulty user-level program should never be able to take down your system.)

    In this case, you should start by checking all your cables and run some diagnostic tool to check your hardware! You should also check whether there are any patches, updates, or service packs for your operating system that could likely solve your problem. Check also that all your libraries (such as glibc) are up to date.

    It is always good to use a machine with ECC memory to discover memory problems early.

  • If your keyboard is locked up, you may be able to recover by logging in to your machine from another machine and executing kbd_mode -a.

  • Please examine your system log file (/var/log/messages or similar) for reasons for your problem. If you think the problem is in MySQL, you should also examine MySQL's log files. See Section 5.2, “MySQL Server Logs”.

  • If you don't think you have hardware problems, you should try to find out which program is causing problems. Try using top, ps, Task Manager, or some similar program, to check which program is taking all CPU or is locking the machine.

  • Use top, df, or a similar program to check whether you are out of memory, disk space, file descriptors, or some other critical resource.

  • If the problem is some runaway process, you can always try to kill it. If it doesn't want to die, there is probably a bug in the operating system.

If after you have examined all other possibilities and you have concluded that the MySQL server or a MySQL client is causing the problem, it is time to create a bug report for our mailing list or our support team. In the bug report, try to give a very detailed description of how the system is behaving and what you think is happening. You should also state why you think that MySQL is causing the problem. Take into consideration all the situations in this chapter. State any problems exactly how they appear when you examine your system. Use the “copy and paste” method for any output and error messages from programs and log files.

Try to describe in detail which program is not working and all symptoms you see. We have in the past received many bug reports that state only “the system doesn't work.” This doesn't provide us with any information about what could be the problem.

If a program fails, it is always useful to know the following information:

  • Has the program in question made a segmentation fault (did it dump core)?

  • Is the program taking up all available CPU time? Check with top. Let the program run for a while, it may simply be evaluating something computationally intensive.

  • If the mysqld server is causing problems, can you get any response from it with mysqladmin -u root ping or mysqladmin -u root processlist?

  • What does a client program say when you try to connect to the MySQL server? (Try with mysql, for example.) Does the client jam? Do you get any output from the program?

When sending a bug report, you should follow the outline described in Section 1.7, “How to Report Bugs or Problems”.

B.5.2. Common Errors When Using MySQL Programs

This section lists some errors that users frequently encounter when running MySQL programs. Although the problems show up when you try to run client programs, the solutions to many of the problems involves changing the configuration of the MySQL server.

B.5.2.1. Access denied

An Access denied error can have many causes. Often the problem is related to the MySQL accounts that the server allows client programs to use when connecting. See Section 5.4, “The MySQL Access Privilege System”, and Section 5.4.7, “Causes of Access-Denied Errors”.

B.5.2.2. Can't connect to [local] MySQL server

A MySQL client on Unix can connect to the mysqld server in two different ways: By using a Unix socket file to connect through a file in the file system (default /tmp/mysql.sock), or by using TCP/IP, which connects through a port number. A Unix socket file connection is faster than TCP/IP, but can be used only when connecting to a server on the same computer. A Unix socket file is used if you don't specify a host name or if you specify the special host name localhost.

If the MySQL server is running on Windows, you can connect via TCP/IP. If the server is started with the --enable-named-pipe option, you can also connect with named pipes if you run the client on the host where the server is running. The name of the named pipe is MySQL by default. If you don't give a host name when connecting to mysqld, a MySQL client first tries to connect to the named pipe. If that doesn't work, it connects to the TCP/IP port. You can force the use of named pipes on Windows by using . as the host name.

The error (2002) Can't connect to ... normally means that there is no MySQL server running on the system or that you are using an incorrect Unix socket file name or TCP/IP port number when trying to connect to the server. You should also check that the TCP/IP port you are using has not been blocked by a firewall or port blocking service.

The error (2003) Can't connect to MySQL server on 'server' (10061) indicates that the network connection has been refused. You should check that there is a MySQL server running, that it has network connections enabled, and that the network port you specified is the one configured on the server.

Start by checking whether there is a process named mysqld running on your server host. (Use ps xa | grep mysqld on Unix or the Task Manager on Windows.) If there is no such process, you should start the server. See Section, “Starting and Troubleshooting the MySQL Server”.

If a mysqld process is running, you can check it by trying the following commands. The port number or Unix socket file name might be different in your setup. host_ip represents the IP number of the machine where the server is running.

shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h host_ip version
shell> mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version

Note the use of backticks rather than forward quotes with the hostname command; these cause the output of hostname (that is, the current host name) to be substituted into the mysqladmin command. If you have no hostname command or are running on Windows, you can manually type the host name of your machine (without backticks) following the -h option. You can also try -h to connect with TCP/IP to the local host.

Make sure that the server has not been configured to ignore network connections or (if you are attempting to connect remotely) that it has not been configured to listen only locally on its network interfaces. If the server was started with --skip-networking, it will not accept TCP/IP connections at all. If the server was started with --bind-address=, it will listen for TCP/IP connections only locally on the loopback interface and will not accept remote connections.

Check to make sure that there is no firewall blocking access to MySQL. Your firewall may be configured on the basis of the application being executed, or the port number used by MySQL for communication (3306 by default). Under Linux or Unix, check your IP tables (or similar) configuration to ensure that the port has not been blocked. Under Windows, applications such as ZoneAlarm or the Windows XP personal firewall may need to be configured not to block the MySQL port.

Here are some reasons the Can't connect to local MySQL server error might occur:

  • mysqld is not running on the local host. Check your operating system's process list to ensure the mysqld process is present.

  • You're running a MySQL server on Windows with many TCP/IP connections to it. If you're experiencing that quite often your clients get that error, you can find a workaround here: Section B., “Connection to MySQL Server Failing on Windows.

  • You are running on a system that uses MIT-pthreads. If you are running on a system that doesn't have native threads, mysqld uses the MIT-pthreads package. See Section 2.1, “General Installation Guidance”. However, not all MIT-pthreads versions support Unix socket files. On a system without socket file support, you must always specify the host name explicitly when connecting to the server. Try using this command to check the connection to the server:

    shell> mysqladmin -h `hostname` version
  • Someone has removed the Unix socket file that mysqld uses (/tmp/mysql.sock by default). For example, you might have a cron job that removes old files from the /tmp directory. You can always run mysqladmin version to check whether the Unix socket file that mysqladmin is trying to use really exists. The fix in this case is to change the cron job to not remove mysql.sock or to place the socket file somewhere else. See Section B.5.4.5, “How to Protect or Change the MySQL Unix Socket File”.

  • You have started the mysqld server with the --socket=/path/to/socket option, but forgotten to tell client programs the new name of the socket file. If you change the socket path name for the server, you must also notify the MySQL clients. You can do this by providing the same --socket option when you run client programs. You also need to ensure that clients have permission to access the mysql.sock file. To find out where the socket file is, you can do:

    shell> netstat -ln | grep mysql

    See Section B.5.4.5, “How to Protect or Change the MySQL Unix Socket File”.

  • You are using Linux and one server thread has died (dumped core). In this case, you must kill the other mysqld threads (for example, with kill or with the mysql_zap script) before you can restart the MySQL server. See Section B.5.4.2, “What to Do If MySQL Keeps Crashing”.

  • The server or client program might not have the proper access privileges for the directory that holds the Unix socket file or the socket file itself. In this case, you must either change the access privileges for the directory or socket file so that the server and clients can access them, or restart mysqld with a --socket option that specifies a socket file name in a directory where the server can create it and where client programs can access it.

If you get the error message Can't connect to MySQL server on some_host, you can try the following things to find out what the problem is:

  • Check whether the server is running on that host by executing telnet some_host 3306 and pressing the Enter key a couple of times. (3306 is the default MySQL port number. Change the value if your server is listening to a different port.) If there is a MySQL server running and listening to the port, you should get a response that includes the server's version number. If you get an error such as telnet: Unable to connect to remote host: Connection refused, then there is no server running on the given port.

  • If the server is running on the local host, try using mysqladmin -h localhost variables to connect using the Unix socket file. Verify the TCP/IP port number that the server is configured to listen to (it is the value of the port variable.)

  • If you are running under Linux and Security-Enhanced Linux (SELinux) is enabled, make sure you have disabled SELinux protection for the mysqld process.

B. Connection to MySQL Server Failing on Windows

When you're running a MySQL server on Windows with many TCP/IP connections to it, and you're experiencing that quite often your clients get a Can't connect to MySQL server error, the reason might be that Windows doesn't allow for enough ephemeral (short-lived) ports to serve those connections.

The purpose of TIME_WAIT is to keep a connection accepting packets even after the connection has been closed. This is because Internet routing can cause a packet to take a slow route to its destination and it may arrive after both sides have agreed to close. If the port is in use for a new connection, that packet from the old connection could break the protocol or compromise personal information from the original connection. The TIME_WAIT delay prevents this by ensuring that the port cannot be reused until after some time has been allowed for those delayed packets to arrive.

It is safe to reduce TIME_WAIT greatly on LAN connections because there is little chance of packets arriving at very long delays, as they could via the Internet with its comparatively large distances and latencies.

By default, Windows allows 5000 ephemeral (short-lived) TCP ports to the user. After any port is closed it will remain in a TIME_WAIT status for 120 seconds. The port will not be available again until this time expires.

With a small stack of available TCP ports (5000) and a high number of TCP ports being open and closed over a short period of time along with the TIME_WAIT status you have a good chance for running out of ports. There are two ways to address this problem:

  • Reduce the number of TCP ports consumed quickly by investigating connection pooling or persistent connections where possible

  • Tune some settings in the Windows registry (see below)

IMPORTANT: The following procedure involves modifying the Windows registry. Before you modify the registry, make sure to back it up and make sure that you understand how to restore the registry if a problem occurs. For information about how to back up, restore, and edit the registry, view the following article in the Microsoft Knowledge Base: http://support.microsoft.com/kb/256986/EN-US/.

  1. Start Registry Editor (Regedt32.exe).

  2. Locate the following key in the registry:

  3. On the Edit menu, click Add Value, and then add the following registry value:

    Value Name: MaxUserPort
    Data Type: REG_DWORD
    Value: 65534

    This sets the number of ephemeral ports available to any user. The valid range is between 5000 and 65534 (decimal). The default value is 0x1388 (5000 decimal).

  4. On the Edit menu, click Add Value, and then add the following registry value:

    Value Name: TcpTimedWaitDelay
    Data Type: REG_DWORD
    Value: 30

    This sets the number of seconds to hold a TCP port connection in TIME_WAIT state before closing. The valid range is between 0 (zero) and 300 (decimal). The default value is 0x78 (120 decimal).

  5. Quit Registry Editor.

  6. Reboot the machine.

Note: Undoing the above should be as simple as deleting the registry entries you've created.

B.5.2.3. Lost connection to MySQL server

There are three likely causes for this error message.

Usually it indicates network connectivity trouble and you should check the condition of your network if this error occurs frequently. If the error message includes “during query,” this is probably the case you are experiencing.

Sometimes the “during query” form happens when millions of rows are being sent as part of one or more queries. If you know that this is happening, you should try increasing net_read_timeout from its default of 30 seconds to 60 seconds or longer, sufficient for the data transfer to complete.

More rarely, it can happen when the client is attempting the initial connection to the server. In this case, if your connect_timeout value is set to only a few seconds, you may be able to resolve the problem by increasing it to ten seconds, perhaps more if you have a very long distance or slow connection. You can determine whether you are experiencing this more uncommon cause by using SHOW GLOBAL STATUS LIKE 'Aborted_connects'. It will increase by one for each initial connection attempt that the server aborts. You may see “reading authorization packet” as part of the error message; if so, that also suggests that this is the solution that you need.

If the cause is none of those just described, you may be experiencing a problem with BLOB values that are larger than max_allowed_packet, which can cause this error with some clients. Sometime you may see “packet too large” as part of the error message, and that confirms that you need to increase max_allowed_packet.

B.5.2.4. Client does not support authentication protocol

MySQL 5.1 uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older (pre-4.1) clients. If you upgrade the server from 4.0, attempts to connect to it with an older client may fail with the following message:

shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client

To solve this problem, you should use one of the following approaches:

  • Upgrade all client programs to use a 4.1.1 or newer client library.

  • When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.

  • Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function:

        -> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

    Alternatively, use UPDATE and FLUSH PRIVILEGES:

    mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
        -> WHERE Host = 'some_host' AND User = 'some_user';

    Substitute the password you want to use for “newpwd” in the preceding examples. MySQL cannot tell you what the original password was, so you'll need to pick a new one.

  • Tell the server to use the older password hashing algorithm:

    1. Start mysqld with the --old-passwords option.

    2. Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query:

      mysql> SELECT Host, User, Password FROM mysql.user
          -> WHERE LENGTH(Password) > 16;

      For each account record displayed by the query, use the Host and User values and assign a password using the OLD_PASSWORD() function and either SET PASSWORD or UPDATE, as described earlier.


In older versions of PHP, the mysql extension does not support the authentication protocol in MySQL 4.1.1 and higher. This is true regardless of the PHP version being used. If you wish to use the mysql extension with MySQL 4.1 or newer, you may need to follow one of the options discussed above for configuring MySQL to work with old clients. The mysqli extension (stands for "MySQL, Improved"; added in PHP 5) is compatible with the improved password hashing employed in MySQL 4.1 and higher, and no special configuration of MySQL need be done to use this MySQL client library. For more information about the mysqli extension, see http://php.net/mysqli.

It may also be possible to compile the older mysql extension against the new MySQL client library. This is beyond the scope of this Manual; consult the PHP documentation for more information. You also be able to obtain assistance with these issues in our MySQL with PHP forum.

For additional background on password hashing and authentication, see Section, “Password Hashing in MySQL”.

B.5.2.5. Password Fails When Entered Interactively

MySQL client programs prompt for a password when invoked with a --password or -p option that has no following password value:

shell> mysql -u user_name -p
Enter password:

On some systems, you may find that your password works when specified in an option file or on the command line, but not when you enter it interactively at the Enter password: prompt. This occurs when the library provided by the system to read passwords limits password values to a small number of characters (typically eight). That is a problem with the system library, not with MySQL. To work around it, change your MySQL password to a value that is eight or fewer characters long, or put your password in an option file.

B.5.2.6. Host 'host_name' is blocked

If you get the following error, it means that mysqld has received many connect requests from the host 'host_name' that have been interrupted in the middle:

Host 'host_name' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'

The number of interrupted connect requests allowed is determined by the value of the max_connect_errors system variable. After max_connect_errors failed requests, mysqld assumes that something is wrong (for example, that someone is trying to break in), and blocks the host from further connections until you execute a mysqladmin flush-hosts command or issue a FLUSH HOSTS statement. See Section 5.1.4, “Server System Variables”.

By default, mysqld blocks a host after 10 connection errors. You can adjust the value by starting the server like this:

shell> mysqld_safe --max_connect_errors=10000 &

If you get this error message for a given host, you should first verify that there isn't anything wrong with TCP/IP connections from that host. If you are having network problems, it does you no good to increase the value of the max_connect_errors variable.

B.5.2.7. Too many connections

If you get a Too many connections error when you try to connect to the mysqld server, this means that all available connections are in use by other clients.

The number of connections allowed is controlled by the max_connections system variable. Beginning with MySQL 5.1.15, its default value is 151 to improve performance when MySQL is used with the Apache Web server. (Previously, the default was 100.) If you need to support more connections, you should set a larger value for this variable.

MySQL Enterprise Subscribers to the MySQL Enterprise Monitor receive advice on dynamically configuring the max_connections variable — avoiding failed connection attempts. For more information, see http://www.mysql.com/products/enterprise/advisors.html.

mysqld actually allows max_connections+1 clients to connect. The extra connection is reserved for use by accounts that have the SUPER privilege. By granting the SUPER privilege to administrators and not to normal users (who should not need it), an administrator can connect to the server and use SHOW PROCESSLIST to diagnose problems even if the maximum number of unprivileged clients are connected. See Section, “SHOW PROCESSLIST Syntax”.

The maximum number of connections MySQL can support depends on the quality of the thread library on a given platform, the amount of RAM available, how much RAM is used for each connection, the workload from each connection, and the desired response time. Linux or Solaris should be able to support at 500–1000 simultaneous connections routinely and as many as 10,000 connections if you have many gigabytes of RAM available and the workload from each is low or the response time target undemanding. Windows is limited to (open tables ? 2 + open connections) < 2048 due to the Posix compatibility layer used on that platform.

Increasing open-files-limit may be necessary. Also see Section 2.6, “Installing MySQL on Linux”, for how to raise the operating system limit on how many handles can be used by MySQL.

B.5.2.8. Out of memory

If you issue a query using the mysql client program and receive an error like the following one, it means that mysql does not have enough memory to store the entire query result:

mysql: Out of memory at line 42, 'malloc.c'
mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)
ERROR 2008: MySQL client ran out of memory

To remedy the problem, first check whether your query is correct. Is it reasonable that it should return so many rows? If not, correct the query and try again. Otherwise, you can invoke mysql with the --quick option. This causes it to use the mysql_use_result() C API function to retrieve the result set, which places less of a load on the client (but more on the server).

B.5.2.9. MySQL server has gone away

This section also covers the related Lost connection to server during query error.

The most common reason for the MySQL server has gone away error is that the server timed out and closed the connection. In this case, you normally get one of the following error codes (which one you get is operating system-dependent).

Error CodeDescription
CR_SERVER_GONE_ERRORThe client couldn't send a question to the server.
CR_SERVER_LOSTThe client didn't get an error when writing to the server, but it didn't get a full answer (or any answer) to the question.

By default, the server closes the connection after eight hours if nothing has happened. You can change the time limit by setting the wait_timeout variable when you start mysqld. See Section 5.1.4, “Server System Variables”.

If you have a script, you just have to issue the query again for the client to do an automatic reconnection. This assumes that you have automatic reconnection in the client enabled (which is the default for the mysql command-line client).

Some other common reasons for the MySQL server has gone away error are:

  • You (or the db administrator) has killed the running thread with a KILL statement or a mysqladmin kill command.

  • You tried to run a query after closing the connection to the server. This indicates a logic error in the application that should be corrected.

  • A client application running on a different host does not have the necessary privileges to connect to the MySQL server from that host.

  • You got a timeout from the TCP/IP connection on the client side. This may happen if you have been using the commands: mysql_options(..., MYSQL_OPT_READ_TIMEOUT,...) or mysql_options(..., MYSQL_OPT_WRITE_TIMEOUT,...). In this case increasing the timeout may help solve the problem.

  • You have encountered a timeout on the server side and the automatic reconnection in the client is disabled (the reconnect flag in the MYSQL structure is equal to 0).

  • You are using a Windows client and the server had dropped the connection (probably because wait_timeout expired) before the command was issued.

    The problem on Windows is that in some cases MySQL doesn't get an error from the OS when writing to the TCP/IP connection to the server, but instead gets the error when trying to read the answer from the connection.

    Prior to MySQL 5.1.8, even if the reconnect flag in the MYSQL structure is equal to 1, MySQL does not automatically reconnect and re-issue the query as it doesn't know if the server did get the original query or not.

    The solution to this is to either do a mysql_ping() on the connection if there has been a long time since the last query (this is what MyODBC does) or set wait_timeout on the mysqld server so high that it in practice never times out.

  • You can also get these errors if you send a query to the server that is incorrect or too large. If mysqld receives a packet that is too large or out of order, it assumes that something has gone wrong with the client and closes the connection. If you need big queries (for example, if you are working with big BLOB columns), you can increase the query limit by setting the server's max_allowed_packet variable, which has a default value of 1MB. You may also need to increase the maximum packet size on the client end. More information on setting the packet size is given in Section B.5.2.10, “Packet too large.

    An INSERT or REPLACE statement that inserts a great many rows can also cause these sorts of errors. Either one of these statements sends a single request to the server irrespective of the number of rows to be inserted; thus, you can often avoid the error by reducing the number of rows sent per INSERT or REPLACE.

  • You also get a lost connection if you are sending a packet 16MB or larger if your client is older than 4.0.8 and your server is 4.0.8 and above, or the other way around.

  • It is also possible to see this error if host name lookups fail (for example, if the DNS server on which your server or network relies goes down). This is because MySQL is dependent on the host system for name resolution, but has no way of knowing whether it is working — from MySQL's point of view the problem is indistinguishable from any other network timeout.

    You may also see the MySQL server has gone away error if MySQL is started with the --skip-networking option.

    Another networking issue that can cause this error occurs if the MySQL port (default 3306) is blocked by your firewall, thus preventing any connections at all to the MySQL server.

  • You can also encounter this error with applications that fork child processes, all of which try to use the same connection to the MySQL server. This can be avoided by using a separate connection for each child process.

  • You have encountered a bug where the server died while executing the query.

You can check whether the MySQL server died and restarted by executing mysqladmin version and examining the server's uptime. If the client connection was broken because mysqld crashed and restarted, you should concentrate on finding the reason for the crash. Start by checking whether issuing the query again kills the server again. See Section B.5.4.2, “What to Do If MySQL Keeps Crashing”.

You can get more information about the lost connections by starting mysqld with the --log-warnings=2 option. This logs some of the disconnected errors in the hostname.err file. See Section 5.2.2, “The Error Log”.

If you want to create a bug report regarding this problem, be sure that you include the following information:

See also Section B.5.2.11, “Communication Errors and Aborted Connections”, and Section 1.7, “How to Report Bugs or Problems”.

B.5.2.10. Packet too large

A communication packet is a single SQL statement sent to the MySQL server, a single row that is sent to the client, or a binary log event sent from a master replication server to a slave.

The largest possible packet that can be transmitted to or from a MySQL 5.1 server or client is 1GB.

When a MySQL client or the mysqld server receives a packet bigger than max_allowed_packet bytes, it issues a Packet too large error and closes the connection. With some clients, you may also get a Lost connection to MySQL server during query error if the communication packet is too large.

Both the client and the server have their own max_allowed_packet variable, so if you want to handle big packets, you must increase this variable both in the client and in the server.

If you are using the mysql client program, its default max_allowed_packet variable is 16MB. To set a larger value, start mysql like this:

shell> mysql --max_allowed_packet=32M

That sets the packet size to 32MB.

The server's default max_allowed_packet value is 1MB. You can increase this if the server needs to handle big queries (for example, if you are working with big BLOB columns). For example, to set the variable to 16MB, start the server like this:

shell> mysqld --max_allowed_packet=16M

You can also use an option file to set max_allowed_packet. For example, to set the size for the server to 16MB, add the following lines in an option file:


It is safe to increase the value of this variable because the extra memory is allocated only when needed. For example, mysqld allocates more memory only when you issue a long query or when mysqld must return a large result row. The small default value of the variable is a precaution to catch incorrect packets between the client and server and also to ensure that you do not run out of memory by using large packets accidentally.

You can also get strange problems with large packets if you are using large BLOB values but have not given mysqld access to enough memory to handle the query. If you suspect this is the case, try adding ulimit -d 256000 to the beginning of the mysqld_safe script and restarting mysqld.

B.5.2.11. Communication Errors and Aborted Connections

The server error log can be a useful source of information about connection problems. See Section 5.2.2, “The Error Log”. If you start the server with the --log-warnings option, you might find messages like this in your error log:

010301 14:38:23  Aborted connection 854 to db: 'users' user: 'josh'

If a client successfully connects but later disconnects improperly or is terminated, the server increments the Aborted_clients status variable, and logs an Aborted connection message to the error log. The cause can be any of the following:

If a client is unable even to connect, the server increments the Aborted_connects status variable. Unsuccessful connect attempts can occur for the following reasons:

If these kinds of things happen, it might indicate that someone is trying to break into your server! Messages for these types of problems are logged to the general query log if it is enabled.

MySQL Enterprise For reasons of security and performance the advisors provided by the MySQL Enterprise Monitor pay special attention to the Aborted_connects status variable. For more information, see http://www.mysql.com/products/enterprise/advisors.html.

Other reasons for problems with aborted clients or aborted connections:

  • Use of Ethernet protocol with Linux, both half and full duplex. Many Linux Ethernet drivers have this bug. You should test for this bug by transferring a huge file via FTP between the client and server machines. If a transfer goes in burst-pause-burst-pause mode, you are experiencing a Linux duplex syndrome. The only solution is switching the duplex mode for both your network card and hub/switch to either full duplex or to half duplex and testing the results to determine the best setting.

  • Some problem with the thread library that causes interrupts on reads.

  • Badly configured TCP/IP.

  • Faulty Ethernets, hubs, switches, cables, and so forth. This can be diagnosed properly only by replacing hardware.

  • The max_allowed_packet variable value is too small or queries require more memory than you have allocated for mysqld. See Section B.5.2.10, “Packet too large.

See also Section B.5.2.9, “MySQL server has gone away.

B.5.2.12. The table is full

The effective maximum table size for MySQL databases is usually determined by operating system constraints on file sizes, not by MySQL internal limits. The following table lists some examples of operating system file-size limits. This is only a rough guide and is not intended to be definitive. For the most up-to-date information, be sure to check the documentation specific to your operating system.

Operating SystemFile-size Limit
Win32 w/ FAT/FAT322GB/4GB
Win32 w/ NTFS2TB (possibly larger)
Linux 2.2-Intel 32-bit2GB (LFS: 4GB)
Linux 2.4+(using ext3 file system) 4TB
Solaris 9/1016TB
MacOS X w/ HFS+2TB
NetWare w/NSS file system8TB

Windows users, please note that FAT and VFAT (FAT32) are not considered suitable for production use with MySQL. Use NTFS instead.

On Linux 2.2, you can get MyISAM tables larger than 2GB in size by using the Large File Support (LFS) patch for the ext2 file system. Most current Linux distributions are based on kernel 2.4 or higher and include all the required LFS patches. On Linux 2.4, patches also exist for ReiserFS to get support for big files (up to 2TB). With JFS and XFS, petabyte and larger files are possible on Linux.

For a detailed overview about LFS in Linux, have a look at Andreas Jaeger's Large File Support in Linux page at http://www.suse.de/~aj/linux_lfs.html.

If you do encounter a full-table error, there are several reasons why it might have occurred:

  • The InnoDB storage engine maintains InnoDB tables within a tablespace that can be created from several files. This allows a table to exceed the maximum individual file size. The tablespace can include raw disk partitions, which allows extremely large tables. The maximum tablespace size is 64TB.

    If you are using InnoDB tables and run out of room in the InnoDB tablespace. In this case, the solution is to extend the InnoDB tablespace. See Section 13.6.5, “Adding, Removing, or Resizing InnoDB Data and Log Files”.

  • You are using MyISAM tables on an operating system that supports files only up to 2GB in size and you have hit this limit for the data file or index file.

  • You are using a MyISAM table and the space required for the table exceeds what is allowed by the internal pointer size. MyISAM allows data and index files to grow up to 256TB by default, but this limit can be changed up to the maximum allowable size of 65,536TB (2567 – 1 bytes).

    If you need a MyISAM table that is larger than the default limit and your operating system supports large files, the CREATE TABLE statement supports AVG_ROW_LENGTH and MAX_ROWS options. See Section 12.1.17, “CREATE TABLE Syntax”. The server uses these options to determine how large a table to allow.

    If the pointer size is too small for an existing table, you can change the options with ALTER TABLE to increase a table's maximum allowable size. See Section 12.1.7, “ALTER TABLE Syntax”.

    ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;

    You have to specify AVG_ROW_LENGTH only for tables with BLOB or TEXT columns; in this case, MySQL can't optimize the space required based only on the number of rows.

    To change the default size limit for MyISAM tables, set the myisam_data_pointer_size, which sets the number of bytes used for internal row pointers. The value is used to set the pointer size for new tables if you do not specify the MAX_ROWS option. The value of myisam_data_pointer_size can be from 2 to 7. A value of 4 allows tables up to 4GB; a value of 6 allows tables up to 256TB.

    You can check the maximum data and index sizes by using this statement:

    SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

    You also can use myisamchk -dv /path/to/table-index-file. See Section 12.5.5, “SHOW Syntax”, or Section 4.6.3, “myisamchk — MyISAM Table-Maintenance Utility”.

    Other ways to work around file-size limits for MyISAM tables are as follows:

  • You are using the NDB storage engine, in which case you need to increase the values for the DataMemory and IndexMemory configuration parameters in your config.ini file. See Section, “MySQL Cluster Data Node Configuration Parameters”.

  • You are using the MEMORY (HEAP) storage engine; in this case you need to increase the value of the max_heap_table_size system variable. See Section 5.1.4, “Server System Variables”.

B.5.2.13. Can't create/write to file

If you get an error of the following type for some queries, it means that MySQL cannot create a temporary file for the result set in the temporary directory:

Can't create/write to file '\\sqla3fe_0.ism'.

The preceding error is a typical message for Windows; the Unix message is similar.

One fix is to start mysqld with the --tmpdir option or to add the option to the [mysqld] section of your option file. For example, to specify a directory of C:\temp, use these lines:


The C:\temp directory must exist and have sufficient space for the MySQL server to write to. See Section, “Using Option Files”.

Another cause of this error can be permissions issues. Make sure that the MySQL server can write to the tmpdir directory.

Check also the error code that you get with perror. One reason the server cannot write to a table is that the file system is full:

shell> perror 28
OS error code  28:  No space left on device

If you get an error of the following type during startup, it indicates that the file system and/or directory used for storing data files is write protected. Providing the write error is to a test file, This error is not serious and can be safely ignored.

Can't create test file /usr/local/mysql/data/master.lower-test

B.5.2.14. Commands out of sync

If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order.

This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen if you try to execute two queries that return data without calling mysql_use_result() or mysql_store_result() in between.

B.5.2.15. Ignoring user

If you get the following error, it means that when mysqld was started or when it reloaded the grant tables, it found an account in the user table that had an invalid password.

Found wrong password for user 'some_user'@'some_host'; ignoring user

As a result, the account is simply ignored by the permission system.

The following list indicates possible causes of and fixes for this problem:

  • You may be running a new version of mysqld with an old user table. You can check this by executing mysqlshow mysql user to see whether the Password column is shorter than 16 characters. If so, you can correct this condition by running the scripts/add_long_password script.

  • The account has an old password (eight characters long). Update the account in the user table to have a new password.

  • You have specified a password in the user table without using the PASSWORD() function. Use mysql to update the account in the user table with a new password, making sure to use the PASSWORD() function:

    mysql> UPDATE user SET Password=PASSWORD('newpwd')
        -> WHERE User='some_user' AND Host='some_host';

B.5.2.16. Table 'tbl_name' doesn't exist

If you get either of the following errors, it usually means that no table exists in the default database with the given name:

Table 'tbl_name' doesn't exist
Can't find file: 'tbl_name' (errno: 2)

In some cases, it may be that the table does exist but that you are referring to it incorrectly:

  • Because MySQL uses directories and files to store databases and tables, database and table names are case sensitive if they are located on a file system that has case-sensitive file names.

  • Even for file systems that are not case sensitive, such as on Windows, all references to a given table within a query must use the same lettercase.

You can check which tables are in the default database with SHOW TABLES. See Section 12.5.5, “SHOW Syntax”.

B.5.2.17. Can't initialize character set

You might see an error like this if you have character set problems:

MySQL Connection Failed: Can't initialize character set charset_name

This error can have any of the following causes:

B.5.2.18. 'File' Not Found and Similar Errors

If you get ERROR '...' not found (errno: 23), Can't open file: ... (errno: 24), or any other error with errno 23 or errno 24 from MySQL, it means that you haven't allocated enough file descriptors for the MySQL server. You can use the perror utility to get a description of what the error number means:

shell> perror 23
OS error code  23:  File table overflow
shell> perror 24
OS error code  24:  Too many open files
shell> perror 11
OS error code  11:  Resource temporarily unavailable

The problem here is that mysqld is trying to keep open too many files simultaneously. You can either tell mysqld not to open so many files at once or increase the number of file descriptors available to mysqld.

To tell mysqld to keep open fewer files at a time, you can make the table cache smaller by reducing the value of the table_open_cache system variable (the default value is 64). Reducing the value of max_connections also reduces the number of open files (the default value is 100).

To change the number of file descriptors available to mysqld, you can use the --open-files-limit option to mysqld_safe or set the open_files_limit system variable. See Section 5.1.4, “Server System Variables”. The easiest way to set these values is to add an option to your option file. See Section, “Using Option Files”. If you have an old version of mysqld that doesn't support setting the open files limit, you can edit the mysqld_safe script. There is a commented-out line ulimit -n 256 in the script. You can remove the “#” character to uncomment this line, and change the number 256 to set the number of file descriptors to be made available to mysqld.

--open-files-limit and ulimit can increase the number of file descriptors, but only up to the limit imposed by the operating system. There is also a “hard” limit that can be overridden only if you start mysqld_safe or mysqld as root (just remember that you also need to start the server with the --user option in this case so that it does not continue to run as root after it starts up). If you need to increase the operating system limit on the number of file descriptors available to each process, consult the documentation for your system.


If you run the tcsh shell, ulimit does not work! tcsh also reports incorrect values when you ask for the current limits. In this case, you should start mysqld_safe using sh.

B.5.2.19. Table-Corruption Issues

If you have started mysqld with --myisam-recover, MySQL automatically checks and tries to repair MyISAM tables if they are marked as 'not closed properly' or 'crashed'. If this happens, MySQL writes an entry in the hostname.err file 'Warning: Checking table ...' which is followed by Warning: Repairing table if the table needs to be repaired. If you get a lot of these errors, without mysqld having died unexpectedly just before, then something is wrong and needs to be investigated further.

See also Section 5.1.2, “Server Command Options”, and Section, “Making a Test Case If You Experience Table Corruption”.

B.5.3. Installation-Related Issues

B.5.3.1. Problems Linking to the MySQL Client Library

When you are linking an application program to use the MySQL client library, you might get undefined reference errors for symbols that start with mysql_, such as those shown here:

/tmp/ccFKsdPa.o: In function `main':
/tmp/ccFKsdPa.o(.text+0xb): undefined reference to `mysql_init'
/tmp/ccFKsdPa.o(.text+0x31): undefined reference to `mysql_real_connect'
/tmp/ccFKsdPa.o(.text+0x57): undefined reference to `mysql_real_connect'
/tmp/ccFKsdPa.o(.text+0x69): undefined reference to `mysql_error'
/tmp/ccFKsdPa.o(.text+0x9a): undefined reference to `mysql_close'

You should be able to solve this problem by adding -Ldir_path -lmysqlclient at the end of your link command, where dir_path represents the path name of the directory where the client library is located. To determine the correct directory, try this command:

shell> mysql_config --libs

The output from mysql_config might indicate other libraries that should be specified on the link command as well.

If you get undefined reference errors for the uncompress or compress function, add -lz to the end of your link command and try again.

If you get undefined reference errors for a function that should exist on your system, such as connect, check the manual page for the function in question to determine which libraries you should add to the link command.

You might get undefined reference errors such as the following for functions that don't exist on your system:

mf_format.o(.text+0x201): undefined reference to `__lxstat'

This usually means that your MySQL client library was compiled on a system that is not 100% compatible with yours. In this case, you should download the latest MySQL source distribution and compile MySQL yourself. See Section 2.3, “MySQL Installation Using a Source Distribution”.

You might get undefined reference errors at runtime when you try to execute a MySQL program. If these errors specify symbols that start with mysql_ or indicate that the mysqlclient library can't be found, it means that your system can't find the shared libmysqlclient.so library. The fix for this is to tell your system to search for shared libraries where the library is located. Use whichever of the following methods is appropriate for your system:

  • Add the path to the directory where libmysqlclient.so is located to the LD_LIBRARY_PATH environment variable.

  • Add the path to the directory where libmysqlclient.so is located to the LD_LIBRARY environment variable.

  • Copy libmysqlclient.so to some directory that is searched by your system, such as /lib, and update the shared library information by executing ldconfig.

Another way to solve this problem is by linking your program statically with the -static option, or by removing the dynamic MySQL libraries before linking your code. Before trying the second method, you should be sure that no other programs are using the dynamic libraries.

B.5.3.2. Problems with File Permissions

If you have problems with file permissions, the UMASK environment variable might be set incorrectly when mysqld starts. For example, MySQL might issue the following error message when you create a table:

ERROR: Can't find file: 'path/with/filename.frm' (Errcode: 13)

The default UMASK value is 0660. You can change this behavior by starting mysqld_safe as follows:

shell> UMASK=384  # = 600 in octal
shell> export UMASK
shell> mysqld_safe &

By default, MySQL creates database directories with an access permission value of 0700. You can modify this behavior by setting the UMASK_DIR variable. If you set its value, new directories are created with the combined UMASK and UMASK_DIR values. For example, if you want to give group access to all new directories, you can do this:

shell> UMASK_DIR=504  # = 770 in octal
shell> export UMASK_DIR
shell> mysqld_safe &

MySQL assumes that the value for UMASK or UMASK_DIR is in octal if it starts with a zero.

See Section 2.14, “Environment Variables”.

B.5.4. Administration-Related Issues

B.5.4.1. How to Reset the Root Password

If you have never set a root password for MySQL, the server does not require a password at all for connecting as root. However, it is recommended to set a password for each account. See Section 5.3.1, “General Security Guidelines”.

If you set a root password previously, but have forgotten what it was, you can set a new password. The next two sections show procedures for Windows and Unix systems, respectively.

B. Resetting the Root Password on Windows Systems

Use the following procedure for resetting the password for any MySQL root accounts on Windows:

  1. Log on to your system as Administrator.

  2. Stop the MySQL server if it is running. For a server that is running as a Windows service, go to the Services manager:

    Start Menu -> Control Panel -> Administrative Tools -> Services

    Then find the MySQL service in the list, and stop it.

    If your server is not running as a service, you may need to use the Task Manager to force it to stop.

  3. Create a text file and place the following statements in it. Replace the password with the password that you want to use.

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';

    The UPDATE and FLUSH statements each must be written on a single line. The UPDATE statement resets the password for all existing root accounts, and the FLUSH statement tells the server to reload the grant tables into memory.

  4. Save the file. For this example, the file will be named C:\mysql-init.txt.

  5. Open a console window to get to the command prompt:

    Start Menu -> Run -> cmd
  6. Start the MySQL server with the special --init-file option:

    C:\> C:\mysql\bin\mysqld --init-file=C:\mysql-init.txt

    If you installed MySQL to a location other than C:\mysql, adjust the command accordingly.

    The server executes the contents of the file named by the --init-file option at startup, changing each root account password.

    You can also add the --console option to the command if you want server output to appear in the console window rather than in a log file.

    If you installed MySQL using the MySQL Installation Wizard, you may need to specify a --defaults-file option:

    C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld.exe"
             --defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini"

    The appropriate --defaults-file setting can be found using the Services Manager:

    Start Menu -> Control Panel -> Administrative Tools -> Services

    Find the MySQL service in the list, right-click on it, and choose the Properties option. The Path to executable field contains the --defaults-file setting.

  7. After the server has started successfully, delete C:\mysql-init.txt.

  8. Stop the MySQL server, then restart it in normal mode again. If you run the server as a service, start it from the Windows Services window. If you start the server manually, use whatever command you normally use.

You should now be able to connect to MySQL as root using the new password.

B. Resetting the Root Password on Unix Systems

MySQL Enterprise For expert advice on security-related issues, subscribe to the MySQL Enterprise Monitor. For more information, see http://www.mysql.com/products/enterprise/advisors.html.

Use the following procedure for resetting the password for any MySQL root accounts on Unix. The instructions assume that you will start the server so that it runs using the Unix login account that you normally use for running the server. For example, if you run the server using the mysql login account, you should log in as mysql before using the instructions. (Alternatively, you can log in as root, but in this case you must start mysqld with the --user=mysql option. If you start the server as root without using --user=mysql, the server may create root-owned files in the data directory, such as log files, and these may cause permission-related problems for future server startups. If that happens, you will need to either change the ownership of the files to mysql or remove them.)

  1. Log on to your system as the Unix mysql user that the mysqld server runs as.

  2. Locate the .pid file that contains the server's process ID. The exact location and name of this file depend on your distribution, host name, and configuration. Common locations are /var/lib/mysql/, /var/run/mysqld/, and /usr/local/mysql/data/. Generally, the file name has an extension of .pid and begins with either mysqld or your system's host name.

    You can stop the MySQL server by sending a normal kill (not kill -9) to the mysqld process, using the path name of the .pid file in the following command:

    shell> kill `cat /mysql-data-directory/host_name.pid`

    Note the use of backticks rather than forward quotes with the cat command; these cause the output of cat to be substituted into the kill command.

  3. Create a text file and place the following statements in it. Replace the password with the password that you want to use.

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';

    The UPDATE and FLUSH statements each must be written on a single line. The UPDATE statement resets the password for all existing root accounts, and the FLUSH statement tells the server to reload the grant tables into memory.

  4. Save the file. For this example, the file will be named /home/me/mysql-init. The file contains the password, so it should not be saved where it can be read by other users.

  5. Start the MySQL server with the special --init-file option:

    shell> mysqld_safe --init-file=/home/me/mysql-init &

    The server executes the contents of the file named by the --init-file option at startup, changing each root account password.

  6. After the server has started successfully, delete /home/me/mysql-init.

You should now be able to connect to MySQL as root using the new password.

Alternatively, on any platform, you can set the new password using the mysql client (but this approach is less secure):

  1. Stop mysqld and restart it with the --skip-grant-tables option.

  2. Connect to the mysqld server with this command:

    shell> mysql
  3. Issue the following statements in the mysql client. Replace the password with the password that you want to use.

    mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
        ->                   WHERE User='root';

You should now be able to connect to MySQL as root using the new password.

B.5.4.2. What to Do If MySQL Keeps Crashing

Each MySQL version is tested on many platforms before it is released. This doesn't mean that there are no bugs in MySQL, but if there are bugs, they should be very few and can be hard to find. If you have a problem, it always helps if you try to find out exactly what crashes your system, because you have a much better chance of getting the problem fixed quickly.

First, you should try to find out whether the problem is that the mysqld server dies or whether your problem has to do with your client. You can check how long your mysqld server has been up by executing mysqladmin version. If mysqld has died and restarted, you may find the reason by looking in the server's error log. See Section 5.2.2, “The Error Log”.

On some systems, you can find in the error log a stack trace of where mysqld died that you can resolve with the resolve_stack_dump program. See MySQL Internals: Porting. Note that the variable values written in the error log may not always be 100% correct.

Many server crashes are caused by corrupted data files or index files. MySQL updates the files on disk with the write() system call after every SQL statement and before the client is notified about the result. (This is not true if you are running with --delay-key-write, in which case data files are written but not index files.) This means that data file contents are safe even if mysqld crashes, because the operating system ensures that the unflushed data is written to disk. You can force MySQL to flush everything to disk after every SQL statement by starting mysqld with the --flush option.

The preceding means that normally you should not get corrupted tables unless one of the following happens:

  • The MySQL server or the server host was killed in the middle of an update.

  • You have found a bug in mysqld that caused it to die in the middle of an update.

  • Some external program is manipulating data files or index files at the same time as mysqld without locking the table properly.

  • You are running many mysqld servers using the same data directory on a system that doesn't support good file system locks (normally handled by the lockd lock manager), or you are running multiple servers with external locking disabled.

  • You have a crashed data file or index file that contains very corrupt data that confused mysqld.

  • You have found a bug in the data storage code. This isn't likely, but it is at least possible. In this case, you can try to change the storage engine to another engine by using ALTER TABLE on a repaired copy of the table.

Because it is very difficult to know why something is crashing, first try to check whether things that work for others crash for you. Please try the following things:

  • Stop the mysqld server with mysqladmin shutdown, run myisamchk --silent --force */*.MYI from the data directory to check all MyISAM tables, and restart mysqld. This ensures that you are running from a clean state. See Chapter 5, MySQL Server Administration.

  • Start mysqld with the general query log enabled (see Section 5.2.3, “The General Query Log”). Then try to determine from the information written to the log whether some specific query kills the server. About 95% of all bugs are related to a particular query. Normally, this is one of the last queries in the log file just before the server restarts. See Section 5.2.3, “The General Query Log”. If you can repeatedly kill MySQL with a specific query, even when you have checked all tables just before issuing it, then you have been able to locate the bug and should submit a bug report for it. See Section 1.7, “How to Report Bugs or Problems”.

  • Try to make a test case that we can use to repeat the problem. See MySQL Internals: Porting.

  • Try running the tests in the mysql-test directory and the MySQL benchmarks. See Section 22.1.2, “MySQL Test Suite”. They should test MySQL rather well. You can also add code to the benchmarks that simulates your application. The benchmarks can be found in the sql-bench directory in a source distribution or, for a binary distribution, in the sql-bench directory under your MySQL installation directory.

  • Try the fork_big.pl script. (It is located in the tests directory of source distributions.)

  • If you configure MySQL for debugging, it is much easier to gather information about possible errors if something goes wrong. Configuring MySQL for debugging causes a safe memory allocator to be included that can find some errors. It also provides a lot of output about what is happening. Reconfigure MySQL with the --with-debug or --with-debug=full option to configure and then recompile. See MySQL Internals: Porting.

  • Make sure that you have applied the latest patches for your operating system.

  • Use the --skip-external-locking option to mysqld. On some systems, the lockd lock manager does not work properly; the --skip-external-locking option tells mysqld not to use external locking. (This means that you cannot run two mysqld servers on the same data directory and that you must be careful if you use myisamchk. Nevertheless, it may be instructive to try the option as a test.)

  • Have you tried mysqladmin -u root processlist when mysqld appears to be running but not responding? Sometimes mysqld is not comatose even though you might think so. The problem may be that all connections are in use, or there may be some internal lock problem. mysqladmin -u root processlist usually is able to make a connection even in these cases, and can provide useful information about the current number of connections and their status.

  • Run the command mysqladmin -i 5 status or mysqladmin -i 5 -r status in a separate window to produce statistics while you run your other queries.

  • Try the following:

    1. Start mysqld from gdb (or another debugger). See MySQL Internals: Porting.

    2. Run your test scripts.

    3. Print the backtrace and the local variables at the three lowest levels. In gdb, you can do this with the following commands when mysqld has crashed inside gdb:

      info local
      info local
      info local

      With gdb, you can also examine which threads exist with info threads and switch to a specific thread with thread N, where N is the thread ID.

  • Try to simulate your application with a Perl script to force MySQL to crash or misbehave.

  • Send a normal bug report. See Section 1.7, “How to Report Bugs or Problems”. Be even more detailed than usual. Because MySQL works for many people, it may be that the crash results from something that exists only on your computer (for example, an error that is related to your particular system libraries).

  • If you have a problem with tables containing dynamic-length rows and you are using only VARCHAR columns (not BLOB or TEXT columns), you can try to change all VARCHAR to CHAR with ALTER TABLE. This forces MySQL to use fixed-size rows. Fixed-size rows take a little extra space, but are much more tolerant to corruption.

    The current dynamic row code has been in use for several years with very few problems, but dynamic-length rows are by nature more prone to errors, so it may be a good idea to try this strategy to see whether it helps.

  • Do not rule out your server hardware when diagnosing problems. Defective hardware can be the cause of data corruption. Particular attention should be paid to your memory and disk subsystems when troubleshooting hardware.

B.5.4.3. How MySQL Handles a Full Disk

This section describes how MySQL responds to disk-full errors (such as “no space left on device”), and to quota-exceeded errors (such as “write failed” or “user block limit reached”).

This section is relevant for writes to MyISAM tables. It also applies for writes to binary log files and binary log index file, except that references to “row” and “record” should be understood to mean “event.

When a disk-full condition occurs, MySQL does the following:

  • It checks once every minute to see whether there is enough space to write the current row. If there is enough space, it continues as if nothing had happened.

  • Every 10 minutes it writes an entry to the log file, warning about the disk-full condition.

To alleviate the problem, you can take the following actions:

  • To continue, you only have to free enough disk space to insert all records.

  • To abort the thread, you must use mysqladmin kill. The thread is aborted the next time it checks the disk (in one minute).

  • Other threads might be waiting for the table that caused the disk-full condition. If you have several “locked” threads, killing the one thread that is waiting on the disk-full condition allows the other threads to continue.

Exceptions to the preceding behavior are when you use REPAIR TABLE or OPTIMIZE TABLE or when the indexes are created in a batch after LOAD DATA INFILE or after an ALTER TABLE statement. All of these statements may create large temporary files that, if left to themselves, would cause big problems for the rest of the system. If the disk becomes full while MySQL is doing any of these operations, it removes the big temporary files and mark the table as crashed. The exception is that for ALTER TABLE, the old table is left unchanged.

MySQL Enterprise For early notification of possible problems with your MySQL configuration, subscribe to the MySQL Enterprise Monitor. For more information, see http://www.mysql.com/products/enterprise/advisors.html.

B.5.4.4. Where MySQL Stores Temporary Files

On Unix, MySQL uses the value of the TMPDIR environment variable as the path name of the directory in which to store temporary files. If TMPDIR is not set, MySQL uses the system default, which is usually /tmp, /var/tmp, or /usr/tmp.

On Windows, Netware and OS2, MySQL checks in order the values of the TMPDIR, TEMP, and TMP environment variables. For the first one found to be set, MySQL uses it and does not check those remaining. If none of TMPDIR, TEMP, or TMP are set, MySQL uses the Windows system default, which is usually C:\windows\temp\.

If the file system containing your temporary file directory is too small, you can use the --tmpdir option to mysqld to specify a directory in a file system where you have enough space.

In MySQL 5.1, the --tmpdir option can be set to a list of several paths that are used in round-robin fashion. Paths should be separated by colon characters (“:”) on Unix and semicolon characters (“;”) on Windows, NetWare, and OS/2.


To spread the load effectively, these paths should be located on different physical disks, not different partitions of the same disk.

If the MySQL server is acting as a replication slave, you should not set --tmpdir to point to a directory on a memory-based file system or to a directory that is cleared when the server host restarts. A replication slave needs some of its temporary files to survive a machine restart so that it can replicate temporary tables or LOAD DATA INFILE operations. If files in the temporary file directory are lost when the server restarts, replication fails.

MySQL creates all temporary files as hidden files. This ensures that the temporary files are removed if mysqld is terminated. The disadvantage of using hidden files is that you do not see a big temporary file that fills up the file system in which the temporary file directory is located.

MySQL Enterprise Advisors provided by the MySQL Enterprise Monitor automatically detect excessive temporary table storage to disk. For more information, see http://www.mysql.com/products/enterprise/advisors.html.

When sorting (ORDER BY or GROUP BY), MySQL normally uses one or two temporary files. The maximum disk space required is determined by the following expression:

(length of what is sorted + sizeof(row pointer))
* number of matched rows
* 2

The row pointer size is usually four bytes, but may grow in the future for really big tables.

For some SELECT queries, MySQL also creates temporary SQL tables. These are not hidden and have names of the form SQL_*.

ALTER TABLE creates a temporary table in the same directory as the original table.

B.5.4.5. How to Protect or Change the MySQL Unix Socket File

The default location for the Unix socket file that the server uses for communication with local clients is /tmp/mysql.sock. (For some distribution formats, the directory might be different, such as /var/lib/mysql for RPMs.)

On some versions of Unix, anyone can delete files in the /tmp directory or other similar directories used for temporary files. If the socket file is located in such a directory on your system, this might cause problems.

On most versions of Unix, you can protect your /tmp directory so that files can be deleted only by their owners or the superuser (root). To do this, set the sticky bit on the /tmp directory by logging in as root and using the following command:

shell> chmod +t /tmp

You can check whether the sticky bit is set by executing ls -ld /tmp. If the last permission character is t, the bit is set.

Another approach is to change the place where the server creates the Unix socket file. If you do this, you should also let client programs know the new location of the file. You can specify the file location in several ways:

You can test whether the new socket location works by attempting to connect to the server with this command:

shell> mysqladmin --socket=/path/to/socket version

B.5.4.6. Time Zone Problems

If you have a problem with SELECT NOW() returning values in UTC and not your local time, you have to tell the server your current time zone. The same applies if UNIX_TIMESTAMP() returns the wrong value. This should be done for the environment in which the server runs; for example, in mysqld_safe or mysql.server. See Section 2.14, “Environment Variables”.

You can set the time zone for the server with the --timezone=timezone_name option to mysqld_safe. You can also set it by setting the TZ environment variable before you start mysqld.

The allowable values for --timezone or TZ are system-dependent. Consult your operating system documentation to see what values are acceptable.

B.5.5. Query-Related Issues

B.5.5.1. Case Sensitivity in String Searches

For nonbinary strings (CHAR, VARCHAR, TEXT), string searches use the collation of the comparison operands. For binary strings (BINARY, VARBINARY, BLOB), comparisons use the numeric values of the bytes in the operands; this means that for alphabetic characters, comparisons will be case sensitive.

A comparison between a nonbinary string and binary string is treated as a comparison of binary strings.

Simple comparison operations (>=, >, =, <, <=, sorting, and grouping) are based on each character's “sort value.” Characters with the same sort value are treated as the same character. For example, if “e” and “?” have the same sort value in a given collation, they compare as equal.

The default character set and collation are latin1 and latin1_swedish_ci, so nonbinary string comparisons are case insensitive by default. This means that if you search with col_name LIKE 'a%', you get all column values that start with A or a. To make this search case sensitive, make sure that one of the operands has a case sensitive or binary collation. For example, if you are comparing a column and a string that both have the latin1 character set, you can use the COLLATE operator to cause either operand to have the latin1_general_cs or latin1_bin collation:

col_name COLLATE latin1_general_cs LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_general_cs
col_name COLLATE latin1_bin LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_bin

If you want a column always to be treated in case-sensitive fashion, declare it with a case sensitive or binary collation. See Section 12.1.17, “CREATE TABLE Syntax”.

To cause a case-sensitive comparison of nonbinary strings to be case insensitive, use COLLATE to name a case-insensitive collation. The strings in the following example normally are case sensitive, but COLLATE changes the comparison to be case insensitive:

mysql> SET @s1 = 'MySQL' COLLATE latin1_bin,
    ->     @s2 = 'mysql' COLLATE latin1_bin;
mysql> SELECT @s1 = @s2;
| @s1 = @s2 |
|         0 |
mysql> SELECT @s1 COLLATE latin1_swedish_ci = @s2;
| @s1 COLLATE latin1_swedish_ci = @s2 |
|                                   1 |

A binary string is case sensitive in comparisons. To compare the string as case insensitive, convert it to a nonbinary string and use COLLATE to name a case-insensitive collation:

mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
| @s = 'mysql' |
|            0 |
mysql> SELECT CONVERT(@s USING latin1) COLLATE latin1_swedish_ci = 'mysql';
| CONVERT(@s USING latin1) COLLATE latin1_swedish_ci = 'mysql' |
|                                                            1 |

To determine whether a value will compare as a nonbinary or binary string, use the COLLATION() function. This example shows that VERSION() returns a string that has a case-insensitive collation, so comparisons are case insensitive:

| utf8_general_ci      |

For binary strings, the collation value is binary, so comparisons will be case sensitive. One context in which you will see binary is for compression and encryption functions, which return binary strings as a general rule: string:

| binary                  | binary               |

B.5.5.2. Problems Using DATE Columns

The format of a DATE value is 'YYYY-MM-DD'. According to standard SQL, no other format is allowed. You should use this format in UPDATE expressions and in the WHERE clause of SELECT statements. For example:

mysql> SELECT * FROM tbl_name WHERE date >= '2003-05-05';

As a convenience, MySQL automatically converts a date to a number if the date is used in a numeric context (and vice versa). It is also smart enough to allow a “relaxed” string form when updating and in a WHERE clause that compares a date to a TIMESTAMP, DATE, or DATETIME column. (“Relaxed form” means that any punctuation character may be used as the separator between parts. For example, '2004-08-15' and '2004#08#15' are equivalent.) MySQL can also convert a string containing no separators (such as '20040815'), provided it makes sense as a date.

When you compare a DATE, TIME, DATETIME, or TIMESTAMP to a constant string with the <, <=, =, >=, >, or BETWEEN operators, MySQL normally converts the string to an internal long integer for faster comparison (and also for a bit more “relaxed” string checking). However, this conversion is subject to the following exceptions:

  • When you compare two columns

  • When you compare a DATE, TIME, DATETIME, or TIMESTAMP column to an expression

  • When you use any other comparison method than those just listed, such as IN or STRCMP().

For these exceptional cases, the comparison is done by converting the objects to strings and performing a string comparison.

To keep things safe, assume that strings are compared as strings and use the appropriate string functions if you want to compare a temporal value to a string.

The special date '0000-00-00' can be stored and retrieved as '0000-00-00'. When using a '0000-00-00' date through MyODBC, it is automatically converted to NULL in MyODBC 2.50.12 and above, because ODBC can't handle this kind of date.

Because MySQL performs the conversions described above, the following statements work:

mysql> INSERT INTO tbl_name (idate) VALUES (19970505);
mysql> INSERT INTO tbl_name (idate) VALUES ('19970505');
mysql> INSERT INTO tbl_name (idate) VALUES ('97-05-05');
mysql> INSERT INTO tbl_name (idate) VALUES ('1997.05.05');
mysql> INSERT INTO tbl_name (idate) VALUES ('1997 05 05');
mysql> INSERT INTO tbl_name (idate) VALUES ('0000-00-00');

mysql> SELECT idate FROM tbl_name WHERE idate >= '1997-05-05';
mysql> SELECT idate FROM tbl_name WHERE idate >= 19970505;
mysql> SELECT MOD(idate,100) FROM tbl_name WHERE idate >= 19970505;
mysql> SELECT idate FROM tbl_name WHERE idate >= '19970505';

However, the following does not work:

mysql> SELECT idate FROM tbl_name WHERE STRCMP(idate,'20030505')=0;

STRCMP() is a string function, so it converts idate to a string in 'YYYY-MM-DD' format and performs a string comparison. It does not convert '20030505' to the date '2003-05-05' and perform a date comparison.

If you are using the ALLOW_INVALID_DATES SQL mode, MySQL allows you to store dates that are given only limited checking: MySQL requires only that the day is in the range from 1 to 31 and the month is in the range from 1 to 12.

This makes MySQL very convenient for Web applications where you obtain year, month, and day in three different fields and you want to store exactly what the user inserted (without date validation).

If you are not using the NO_ZERO_IN_DATE SQL mode, the day or month part can be zero. This is convenient if you want to store a birthdate in a DATE column and you know only part of the date.

If you are not using the NO_ZERO_DATE SQL mode, MySQL also allows you to store '0000-00-00' as a “dummy date.” This is in some cases more convenient than using NULL values.

If the date cannot be converted to any reasonable value, a 0 is stored in the DATE column, which is retrieved as '0000-00-00'. This is both a speed and a convenience issue. We believe that the database server's responsibility is to retrieve the same date you stored (even if the data was not logically correct in all cases). We think it is up to the application and not the server to check the dates.

If you want MySQL to check all dates and accept only legal dates (unless overridden by IGNORE), you should set sql_mode to "NO_ZERO_IN_DATE,NO_ZERO_DATE".

B.5.5.3. Problems with NULL Values

The concept of the NULL value is a common source of confusion for newcomers to SQL, who often think that NULL is the same thing as an empty string ''. This is not the case. For example, the following statements are completely different:

mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ('');

Both statements insert a value into the phone column, but the first inserts a NULL value and the second inserts an empty string. The meaning of the first can be regarded as “phone number is not known” and the meaning of the second can be regarded as “the person is known to have no phone, and thus no phone number.

To help with NULL handling, you can use the IS NULL and IS NOT NULL operators and the IFNULL() function.

In SQL, the NULL value is never true in comparison to any other value, even NULL. An expression that contains NULL always produces a NULL value unless otherwise indicated in the documentation for the operators and functions involved in the expression. All columns in the following example return NULL:

mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);

If you want to search for column values that are NULL, you cannot use an expr = NULL test. The following statement returns no rows, because expr = NULL is never true for any expression:

mysql> SELECT * FROM my_table WHERE phone = NULL;

To look for NULL values, you must use the IS NULL test. The following statements show how to find the NULL phone number and the empty phone number:

mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = '';

See Section, “Working with NULL Values”, for additional information and examples.

You can add an index on a column that can have NULL values if you are using the MyISAM, InnoDB, or MEMORY storage engine. Otherwise, you must declare an indexed column NOT NULL, and you cannot insert NULL into the column.

When reading data with LOAD DATA INFILE, empty or missing columns are updated with ''. If you want a NULL value in a column, you should use \N in the data file. The literal word “NULL” may also be used under some circumstances. See Section 12.2.6, “LOAD DATA INFILE Syntax”.

When using DISTINCT, GROUP BY, or ORDER BY, all NULL values are regarded as equal.

When using ORDER BY, NULL values are presented first, or last if you specify DESC to sort in descending order.

Aggregate (summary) functions such as COUNT(), MIN(), and SUM() ignore NULL values. The exception to this is COUNT(*), which counts rows and not individual column values. For example, the following statement produces two counts. The first is a count of the number of rows in the table, and the second is a count of the number of non-NULL values in the age column:

mysql> SELECT COUNT(*), COUNT(age) FROM person;

For some data types, MySQL handles NULL values specially. If you insert NULL into a TIMESTAMP column, the current date and time is inserted. If you insert NULL into an integer or floating-point column that has the AUTO_INCREMENT attribute, the next number in the sequence is inserted.

B.5.5.4. Problems with Column Aliases

An alias can be used in a query select list to give a column a different name. You can use the alias in GROUP BY, ORDER BY, or HAVING clauses to refer to the column:

SELECT SQRT(a*b) AS root FROM tbl_name
  GROUP BY root HAVING root > 0;
SELECT id, COUNT(*) AS cnt FROM tbl_name
  GROUP BY id HAVING cnt > 0;
SELECT id AS 'Customer identity' FROM tbl_name;

Standard SQL disallows references to column aliases in a WHERE clause. This restriction is imposed because when the WHERE clause is evaluated, the column value may not yet have been determined. For example, the following query is illegal:

SELECT id, COUNT(*) AS cnt FROM tbl_name
  WHERE cnt > 0 GROUP BY id;

The WHERE clause determines which rows should be included in the GROUP BY clause, but it refers to the alias of a column value that is not known until after the rows have been selected, and grouped by the GROUP BY.

In the select list of a query, a quoted column alias can be specified using identifier or string quoting characters:

SELECT 1 AS `one`, 2 AS 'two';

Elsewhere in the statement, quoted references to the alias must use identifier quoting or the reference is treated as a string literal. For example, this statement groups by the values in column id, referenced using the alias `a`:

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY `a`;

But this statement groups by the literal string 'a' and will not work as expected:

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY 'a';

B.5.5.5. Rollback Failure for Nontransactional Tables

If you receive the following message when trying to perform a ROLLBACK, it means that one or more of the tables you used in the transaction do not support transactions:

Warning: Some non-transactional changed tables couldn't be rolled back

These nontransactional tables are not affected by the ROLLBACK statement.

If you were not deliberately mixing transactional and nontransactional tables within the transaction, the most likely cause for this message is that a table you thought was transactional actually is not. This can happen if you try to create a table using a transactional storage engine that is not supported by your mysqld server (or that was disabled with a startup option). If mysqld doesn't support a storage engine, it instead creates the table as a MyISAM table, which is nontransactional.

You can check the storage engine for a table by using either of these statements:


See Section, “SHOW TABLE STATUS Syntax”, and Section, “SHOW CREATE TABLE Syntax”.

You can check which storage engines your mysqld server supports by using this statement:


You can also use the following statement, and check the value of the variable that is associated with the storage engine in which you are interested:


For example, to determine whether the InnoDB storage engine is available, check the value of the have_innodb variable.

See Section, “SHOW ENGINES Syntax”, and Section, “SHOW VARIABLES Syntax”.

MySQL Enterprise Ensure that your data is adequately protected by subscribing to the MySQL Enterprise Monitor. For more information, see http://www.mysql.com/products/enterprise/advisors.html.

B.5.5.6. Deleting Rows from Related Tables

If the total length of the DELETE statement for related_table is more than 1MB (the default value of the max_allowed_packet system variable), you should split it into smaller parts and execute multiple DELETE statements. You probably get the fastest DELETE by specifying only 100 to 1,000 related_column values per statement if the related_column is indexed. If the related_column isn't indexed, the speed is independent of the number of arguments in the IN clause.

B.5.5.7. Solving Problems with No Matching Rows

If you have a complicated query that uses many tables but that doesn't return any rows, you should use the following procedure to find out what is wrong:

  1. Test the query with EXPLAIN to check whether you can find something that is obviously wrong. See Section 12.3.2, “EXPLAIN Syntax”.

  2. Select only those columns that are used in the WHERE clause.

  3. Remove one table at a time from the query until it returns some rows. If the tables are large, it is a good idea to use LIMIT 10 with the query.

  4. Issue a SELECT for the column that should have matched a row against the table that was last removed from the query.

  5. If you are comparing FLOAT or DOUBLE columns with numbers that have decimals, you can't use equality (=) comparisons. This problem is common in most computer languages because not all floating-point values can be stored with exact precision. In some cases, changing the FLOAT to a DOUBLE fixes this. See Section B.5.5.8, “Problems with Floating-Point Comparisons”.

  6. If you still can't figure out what is wrong, create a minimal test that can be run with mysql test < query.sql that shows your problems. You can create a test file by dumping the tables with mysqldump --quick db_name tbl_name_1 ... tbl_name_n > query.sql. Open the file in an editor, remove some insert lines (if there are more than needed to demonstrate the problem), and add your SELECT statement at the end of the file.

    Verify that the test file demonstrates the problem by executing these commands:

    shell> mysqladmin create test2
    shell> mysql test2 < query.sql

    Attach the test file to a bug report, which you can file using the instructions in Section 1.7, “How to Report Bugs or Problems”.

B.5.5.8. Problems with Floating-Point Comparisons

Floating-point numbers sometimes cause confusion because they are approximate. That is, they are not stored as exact values inside computer architecture. What you can see on the screen usually is not the exact value of the number. The FLOAT and DOUBLE data types are such. For DECIMAL columns, MySQL performs operations with a precision of 65 decimal digits, which should solve most common inaccuracy problems.

The following example demonstrates the problem using DOUBLE. It shows that are calculations that are done using floating-point operations are subject to floating-point error.

mysql> CREATE TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);
mysql> INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),
    -> (2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),
    -> (2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),
    -> (4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),
    -> (5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),
    -> (6, 0.00, 0.00), (6, -51.40, 0.00);

mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b
    -> FROM t1 GROUP BY i HAVING a <> b;

| i    | a     | b    |
|    1 |  21.4 | 21.4 |
|    2 |  76.8 | 76.8 |
|    3 |   7.4 |  7.4 |
|    4 |  15.4 | 15.4 |
|    5 |   7.2 |  7.2 |
|    6 | -51.4 |    0 |

The result is correct. Although the first five records look like they should not satisfy the comparison (the values of a and b do not appear to be different), they may do so because the difference between the numbers shows up around the tenth decimal or so, depending on factors such as computer architecture or the compiler version or optimization level. For example, different CPUs may evaluate floating-point numbers differently.

If columns d1 and d2 had been defined as DECIMAL rather than DOUBLE, the result of the SELECT query would have contained only one row — the last one shown above.

The correct way to do floating-point number comparison is to first decide on an acceptable tolerance for differences between the numbers and then do the comparison against the tolerance value. For example, if we agree that floating-point numbers should be regarded the same if they are same within a precision of one in ten thousand (0.0001), the comparison should be written to find differences larger than the tolerance value:

mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b FROM t1
    -> GROUP BY i HAVING ABS(a - b) > 0.0001;
| i    | a     | b    |
|    6 | -51.4 |    0 |
1 row in set (0.00 sec)

Conversely, to get rows where the numbers are the same, the test should find differences within the tolerance value:

mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b FROM t1
    -> GROUP BY i HAVING ABS(a - b) <= 0.0001;
| i    | a    | b    |
|    1 | 21.4 | 21.4 |
|    2 | 76.8 | 76.8 |
|    3 |  7.4 |  7.4 |
|    4 | 15.4 | 15.4 |
|    5 |  7.2 |  7.2 |
5 rows in set (0.03 sec)

B.5.6. Optimizer-Related Issues

MySQL uses a cost-based optimizer to determine the best way to resolve a query. In many cases, MySQL can calculate the best possible query plan, but sometimes MySQL doesn't have enough information about the data at hand and has to make “educated” guesses about the data.

For the cases when MySQL does not do the "right" thing, tools that you have available to help MySQL are:

MySQL Enterprise For expert advice on configuring MySQL servers for optimal performance, subscribe to the MySQL Enterprise Monitor. For more information, see http://www.mysql.com/products/enterprise/advisors.html.

B.5.7. Table Definition-Related Issues

B.5.7.1. Problems with ALTER TABLE

ALTER TABLE changes a table to the current character set. If you get a duplicate-key error during ALTER TABLE, the cause is either that the new character sets maps two keys to the same value or that the table is corrupted. In the latter case, you should run REPAIR TABLE on the table.

If ALTER TABLE dies with the following error, the problem may be that MySQL crashed during an earlier ALTER TABLE operation and there is an old table named A-xxx or B-xxx lying around:

Error on rename of './database/name.frm'
to './database/B-xxx.frm' (Errcode: 17)

In this case, go to the MySQL data directory and delete all files that have names starting with A- or B-. (You may want to move them elsewhere instead of deleting them.)

ALTER TABLE works in the following way:

  • Create a new table named A-xxx with the requested structural changes.

  • Copy all rows from the original table to A-xxx.

  • Rename the original table to B-xxx.

  • Rename A-xxx to your original table name.

  • Delete B-xxx.

If something goes wrong with the renaming operation, MySQL tries to undo the changes. If something goes seriously wrong (although this shouldn't happen), MySQL may leave the old table as B-xxx. A simple rename of the table files at the system level should get your data back.

If you use ALTER TABLE on a transactional table or if you are using Windows or OS/2, ALTER TABLE unlocks the table if you had done a LOCK TABLE on it. This is done because InnoDB and these operating systems cannot drop a table that is in use.

B.5.7.2. How to Change the Order of Columns in a Table

First, consider whether you really need to change the column order in a table. The whole point of SQL is to abstract the application from the data storage format. You should always specify the order in which you wish to retrieve your data. The first of the following statements returns columns in the order col_name1, col_name2, col_name3, whereas the second returns them in the order col_name1, col_name3, col_name2:

mysql> SELECT col_name1, col_name2, col_name3 FROM tbl_name;
mysql> SELECT col_name1, col_name3, col_name2 FROM tbl_name;

If you decide to change the order of table columns anyway, you can do so as follows:

  1. Create a new table with the columns in the new order.

  2. Execute this statement:

    mysql> INSERT INTO new_table
        -> SELECT columns-in-new-order FROM old_table;
  3. Drop or rename old_table.

  4. Rename the new table to the original name:

    mysql> ALTER TABLE new_table RENAME old_table;

SELECT * is quite suitable for testing queries. However, in an application, you should never rely on using SELECT * and retrieving the columns based on their position. The order and position in which columns are returned does not remain the same if you add, move, or delete columns. A simple change to your table structure could cause your application to fail.

B.5.7.3. TEMPORARY Table Problems

The following list indicates limitations on the use of TEMPORARY tables:

  • A TEMPORARY table can only be of type MEMORY, MyISAM, MERGE, or InnoDB.

    Temporary tables are not supported for MySQL Cluster.

  • You cannot refer to a TEMPORARY table more than once in the same query. For example, the following does not work:

    mysql> SELECT * FROM temp_table, temp_table AS t2;
    ERROR 1137: Can't reopen table: 'temp_table'

    This error also occurs if you refer to a temporary table multiple times in a stored function under different aliases, even if the references occur in different statements within the function.

  • The SHOW TABLES statement does not list TEMPORARY tables.

  • You cannot use RENAME to rename a TEMPORARY table. However, you can use ALTER TABLE instead:

    mysql> ALTER TABLE orig_name RENAME new_name;
  • There are known issues in using temporary tables with replication. See Section 16.3.1, “Replication Features and Issues”, for more information.

B.5.8. Known Issues in MySQL

This section is a list of the known issues in recent versions of MySQL.

For information about platform-specific issues, see the installation and porting instructions in Section 2.1, “General Installation Guidance”, and MySQL Internals: Porting.

B.5.8.1. Open Issues in MySQL

The following problems are known and fixing them is a high priority:


  • Bug#43560: client crashes in mysql_stmt_execute/mysql_stmt_close after connection loss

    • Target fix: 5.1

  • Bug#40552: Race condition around default_directories in load_defaults()

    • Target fix: 5.1

  • Bug#45017: Failure to connect if hostname maps to multiple addresses

    • Already fixed in: 5.1

  • Bug#42675: Dangling pointer leads to a client crash (mysys/my_error.c patch enclosed)

    • Target fix: 5.1

  • Bug#48284: C99 aliasing violation, results in failures in the client library

    • Target fix: 5.1

  • Bug#47485: mysql_store result returns a result set for a prepared statement

    • Target fix: 5.1

  • Bug#47320: OpenSSL client does not check YaSSL server certificate

    • Target fix: 4.1


  • Bug#44278: mysqlhotcopy unable to backup schema with a hyphen in its name

    • mysqlhotcopy fails for database names that contain non-alphanumeric characters.

      Target fix: 5.1

  • Bug#46310: mysql not handling <BACKSPACE> properly with multi-byte chars

    • Already fixed in: 5.1

  • Bug#34861: mysqldump with --tab gives weird output for triggers.

    • Target fix: 5.1

  • Bug#49223: Change help description for mysqldump --extended-insert

    • Target fix: 5.1

  • Bug#47655: Memory free error when connecting to 4.1 server from 5.1+ client

    • Target fix: 5.1

  • Bug#36391: mysqlbinlog creates invalid charset statements

    • Target fix: 5.1

  • Bug#46776: MySQL client confused by quotes, treats data as commands

    • Target fix: 5.1

  • Bug#45740: mysqldump doesn't dump general_log and slow_query causes restore problem

    • Target fix: 5.1

  • Bug#35934: mysql_upgrade calls mysqlcheck with insufficient parameters

    • Target fix: 5.1

  • Bug#39852: bug in mysql_setpermission

    • Target fix: 5.1

  • Bug#40395: mysqladmin -i delay extended-status does not iterate with -r

    • Already fixed in: 5.1

  • Bug#49447: some gramatical and typographical problems in client utilities --help output

    • Target fix: 5.1

  • Bug#46842: mysql_secure_installation ignores --socket, etc.

    • Target fix: 5.1

  • Bug#34129: mysqldumpslow does not aggregate times

    • Target fix: 5.1

  • Bug#30946: mysqldump silently ignores --default-character-set when used with --tab

    • Dumps for tables containing columns with different character sets would not be reloadable. To deal with this, a CHARACTER SET clause is being added to SELECT ... INTO OUTFILE (which mysqldump uses) so that all columns will be converted to a single character set on output. The same character set can be specified for LOAD DATA to enable the dump file to be reloaded.

      Already fixed in: 5.1


  • Bug#50227: Pre-auth buffer-overflow in mySQL through yaSSL

    • Target fix: 5.1.43

  • Bug#48665: sql-bench's insert test fails due to wrong result

    • Target fix: 5.1.42

  • Bug#44166: Possible Security Vulnerability in MySQL Server 5.1.30

    • Target fix: 5.1.35

  • Bug#42640: mysqld crashes when unsafe statements are executed (STRICT_TRANS_TABLES mode)

    • Target fix: 5.1.35

  • Bug#42610: Dynamic plugin broken in 5.1.31

    • Target fix: 5.1.33

  • Bug#42563: Message tells me to repair table though Storage Engine doesn't allow me to.

    • Target fix: 5.1

  • Bug#46425: crash in Diagnostics_area::set_ok_status , empty statement, DELETE IGNORE

    • Target fix: 5.1

  • Bug#50619: assert in handler::update_auto_increment

    • Target fix: 5.1

  • Bug#46614: Assertion in show_create_trigger() on SHOW CREATE TRIGGER + MERGE table

    • Target fix: 5.1

  • Bug#46760: Fast ALTER TABLE no longer works for InnoDB

    • Target fix: 5.1

  • Bug#44495: Prepared Statement: CALL p(<x>) - `thd->protocol == &thd->protocol_text' failed

    • Already fixed in: 5.1

  • Bug#46941: crash with lower_case_table_names=2 and foreign key data dictionary confusion

    • Target fix: 5.1

  • Bug#43435: LOCK_open does not use MY_MUTEX_INIT_FAST

    • Already fixed in: 5.1

  • Bug#45638: Create temporary table with engine innodb fails

    • Target fix: 5.1

  • Bug#39494: please support >4GB key_buffer_size on windows

    • Target fix: 5.1

  • Bug#35068: Assertion fails when reading from i_s.tables and there is incorrect merge table

    • Target fix: 5.1

  • Bug#47788: Crash in TABLE_LIST::hide_view_error on UPDATE IGNORE + VIEW + SP + ALTER

    • Target fix: 5.1

  • Bug#22891: session level max_allowed_packet can be set but is ignored

    • Target fix: 5.1

  • Bug#41057: mysql_update fails FATAL ERROR: Failed to create temporary file for defaults

    • Target fix: 5.1

  • Bug#43827: Server closes connections and restarts

    • Target fix: 5.1

  • Bug#40757: server crash after failed plugin/engine initialization

    • Target fix: 5.1

  • Bug#45613: handle failures from my_hash_insert

    • Target fix: 5.1

  • Bug#47919: assert in open_table during ALTER temporary table

    • Target fix: 5.1

  • Bug#41030: Wrong meta data (incorrect fieldlen)

    • Target fix: 5.1

  • Bug#46043: mysqld --skip-innodb does not skip InnoDB

    • After changes made for Bug#19027, --skip-innodb does not work.

      Target fix: 5.1

  • Bug#46944: Internal prepared XA transction XIDs are not removed if server_id changes

    • Target fix: 5.1

  • Bug#40536: SELECT is blocked by INSERT DELAYED waiting on upgrading lock, even with low_pri

    • Target fix: 5.1

  • Bug#42503: "Lost connection" errors when using compression protocol

    • Target fix: 5.1

  • Bug#47412: Valgrind warnings / user can read uninitalized memory using SP variables

    • Target fix: 5.1

  • Bug#40230: 23 seconds difference while the time_zone is SYSTEM

    • Target fix: 5.1

  • Bug#45058: init_available_charsets uses double checked locking

    • Target fix: 5.1

  • Bug#43354: Use key hint can crash server in explain extended query

    • Target fix: 5.1

  • Bug#46815: CONCAT_WS returning wrong data

    • Target fix: 5.1

  • Bug#40949: Debug version of MySQL server crashes when run OPTIMIZE on compressed table.

    • Target fix: 5.1

  • Bug#20837: Apparent change of isolation level during transaction

    • Target fix: 5.1

  • Bug#11604: Performance degradation caused by do_div_mod() call

    • Target fix: 5.1

  • Bug#44521: Prepared Statement: CALL p() - crashes: `! thd->main_da.is_sent' failed et.al.

    • Already fixed in: 5.1

  • Bug#48327: Some crashes specific to FreeBSD ("embedded")

    • Target fix: 5.1

  • Bug#50373: --secure-file-priv=""

    • Target fix: 5.1

  • Bug#31616: div_precision_increment description looks wrong

    • Target fix: 5.1

  • Bug#49334: add_to_status() race conditions

    • Target fix: 5.1

  • Bug#42144: plugin_load fails

    • Target fix: 5.1

  • Bug#38941: fast mutexes in MySQL 5.1 have mutex contention when calling random()

    • Target fix: 5.1

  • Bug#45336: --enable-foobar doesn't work for any plugin foobar.

    • Target fix: 5.1

  • Bug#46539: Various crashes on INSERT IGNORE SELECT + SELECT FOR UPDATE

    • Target fix: 5.1

  • Bug#41078: With CURSOR_TYPE_READ_ONLY mysql_stmt_fetch() returns short string value.

    • Target fix: 5.1

  • Bug#49628: corrupt table after legal SQL, LONGTEXT column

    • Target fix: 5.1

  • Bug#40877: multi statement execution fails in 5.1.30

    • Target fix: 5.1

Server: Archive

  • Bug#48757: missing .ARZ file causes server crash

    • Target fix: 5.1

  • Bug#46961: archive engine loses rows during self joining select!

    • Target fix: 5.1

  • Bug#29203: archive tables have weird values in show table status

    • Target fix: 5.1

  • Bug#37719: Crash if rename Archive table to same name with different case and then select

    • Target fix: 5.1

  • Bug#47012: archive tables are not upgradeable, and server crashes on any access

    • After a binary upgrade from 5.0 to 5.1, accessing ARCHIVE tables causes a server crash. Workaround: Dump ARCHIVE tables with mysqldump in 5.0, reload into 5.1 after upgrading.

      Target fix: 5.1

  • Bug#42784: archive tables cause 100% cpu usage and hang in show table status

    • Target fix: 5.1

  • Bug#32880: Repairing Archive table fails with internal error 144

    • Target fix: 5.1

  • Bug#46565: repair of partition fail for archive engine

    • Target fix: 5.1

Server: CSV

  • Bug#41441: repair csv table crashes debug server

    • Target fix: 5.1.31

Server: Charsets

  • Bug#33094: Error in upgrading from 5.0 to 5.1 when table contains triggers

    • Target fix: 5.1.31

  • Bug#41385: Crash when attempting to repair a #mysql50# upgraded table with triggers.

    • Target fix: 5.1.31

  • Bug#40053: 'check table .. for upgrade' doesn't detect collation change made in 5.1.24-rc

    • Target fix: 5.1.30

  • Bug#43207: wrong LC_TIME names for romanian locale

    • Target fix: 5.1

  • Bug#45012: my_like_range_cp932 generates invalid string

    • Target fix: 5.1

  • Bug#41084: full-text index added to custom UCA collation not working

    • Target fix: 5.1

  • Bug#44834: strxnmov is expected to behave as you'd expect

    • Target fix: 5.1

  • Bug#43593: dump/backup/restore/upgrade tools fails

    • Target fix: 5.1

  • Bug#46448: trailing spaces are not ignored when user collation maps space != 0x20

    • Target fix: 5.1

  • Bug#45485: replication different between master/slaver using procedure with gbk

    • Target fix: 5.1

  • Bug#49501: Inefficient information_schema check (system collation)

    • Target fix: 5.1

  • Bug#32831: libmysql should be built with all charsets

    • Target fix: 5.1

  • Bug#45645: Mysql server close all connection and restart using lower function

    • Target fix: 5.1

Server: Cluster

  • Bug#47564: funcs_1.ndb_trig_1011ext.test is disabled

    • Target fix: 5.1

Server: Compiling

  • Bug#51009: src build failure on SuSe (LT_INIT: command not found)

    • Target fix: 5.1.45

  • Bug#50059: IBMDB2I storage engine not included in 64-bit MySQL 5.1.42

    • Target fix: 5.1.43

  • Bug#46935: No 64-bit version of the MySQL Preference Pane is available

    • Target fix: 5.1.42

  • Bug#42524: Function pthread_setschedprio() is defined but seems broken on i5/OS PASE

    • Target fix: 5.1.32

  • Bug#26760: SSL support missing from 5.1.15-0 x86_64 Client Programs?

    • Target fix: 5.1.31

  • Bug#43715: Link errors when trying to link mysql_embedded.exe

    • Target fix: 5.1

  • Bug#42721: configure.in invokes 'nm' directly

    • Target fix: 5.1

  • Bug#45616: Fixing build when building in other directory

    • Target fix: 5.1

  • Bug#42733: type-punning warnings when compiling MySQL with -O2/-O3 -Wall and gcc 4.x

    • Target fix: 5.1

  • Bug#43449: Undefined symbol __1cG__CrunMex_rethrow_q6F_v_ when compiling using Sun Studio

    • Target fix: 5.1

  • Bug#38364: gen_lex_hash segmentation fault in debug build

    • Target fix: 5.1

  • Bug#39288: MySQL Embedded server (libmysqld.a) is built without -fPIC flag

    • Target fix: 5.1

  • Bug#40862: main.subselect_notembedded test case fails

    • Target fix: 5.1

  • Bug#42599: error: `pthread_setschedprio' was not declared in this scope

    • Target fix: 5.1

  • Bug#47857: strip_sp function in mysys/mf_strip.c never used and cause name clash

    • Target fix: 5.1

  • Bug#47957: A build "--without-server" fails if using "--with-ssl" (YaSSL)

    • Target fix: 5.1

  • Bug#50850: 32-bit builds for IBM i should have maxdata increased

    • Target fix: 5.1

  • Bug#49968: Properly define HAVE_ERRNO_AS_DEFINE for the appropriate OpenBSD releases.

    • Target fix: 5.1

  • Bug#45288: pb2 returns a lot of compilation warnings on linux

    • Target fix: 5.1

  • Bug#43414: Parenthesis (and other) warnings compiling MySQL with gcc 4.3.2

    • Target fix: 5.1

  • Bug#47360: Can't build universal x86_64/i386: Undefined symbols for architecture x86_64

    • Target fix: 5.1

  • Bug#39630: AIX 5.3 64-bit binaries are too slow

    • Target fix: 5.1

  • Bug#39102: valgrind build does not compile in realpath, which make DATA/INDEX DIR fail

    • Target fix: 5.1

  • Bug#49502: CMake error compiling 5.1 on Windows

    • Target fix: 5.1

  • Bug#47337: innochecksum not built for --with-plugin-innodb_plugin --without-plugin-innobase

    • Target fix: 5.1

  • Bug#35250: readline check breaks when doing vpath build

    • Target fix: 5.1

  • Bug#49829: Many "hides virtual function" warnings with SunStudio

    • Target fix: 5.1

  • Bug#31506: detection of function's availability is wrong in configure.in

    • Target fix: 5.1

  • Bug#46995: Missing build dependency between include/mysql.h and libmysql*/client.o

    • Target fix: 5.1

  • Bug#39571: abi_check: Does not create all prerequisites

    • Target fix: 5.1

  • Bug#25404: mysql_config need several issues corrected

    • Target fix: 5.1

  • Bug#49093: 5.1 configure script should warn about MySQL Cluster not being maintained

    • Target fix: 5.1

  • Bug#46980: Option "--without-server" still not working in 5.1

    • Target fix: 5.1

  • Bug#45706: rpm install fails due to incorrect libc linking

    • Target fix: 5.1

  • Bug#47850: too many files built in regex/

    • Target fix: 5.1

  • Bug#47795: CMake, storage engine name different from directory name

    • Target fix: 5.1

  • Bug#42872: In MySQL 5.1.31, unrecognized --with-innodb, --with-partition, --with-federated

    • Target fix: 5.1

  • Bug#45113: mysql_config returns incorrect path if built with prefix != execprefix

    • Target fix: 5.1

  • Bug#42141: Compiler crash in "mf_format.c" when optimizing for 64 bit

    • Target fix: 5.1

  • Bug#39996: 5.1 fails to compile on Windows 32-bit with VS2005

    • Target fix: 5.1

  • Bug#46309: MySQL 5.1.36 fails to compile using ICC 11.1

    • Target fix: 5.1

  • Bug#47797: CMake, engine can't specify additional libraries to link with

  • Bug#33991: MySQL (6.0-bk) does not compile on Solaris Express Developer Edition

    • Target fix: 6.0-rc

Server: Config Wizard

  • Bug#42386: MySQL .msi installer does not start configuration wizard on Vista when prompted

    • Target fix: 5.1.33

  • Bug#37294: Windows .msi - 'Repair' option doesn't back out as expected

    • Target fix: 5.1

  • Bug#38723: MySQL Configuration Wizard on Vista unreadable

    • Already fixed in: 5.1

  • Bug#44428: Cannot recreate instance after clean install (apply security settings fails)

    • Already fixed in: 5.1

  • Bug#48835: Instance config window too small

    • Target fix: 5.1

  • Bug#46146: Configuration wizard fails if the service already exists

    • Target fix: 5.1

Server: DB2SE for IBM i

  • Bug#49203: Latin1 German collation using CCSID 1148 in DB2

    • Target fix: 5.1

  • Bug#44856: IBMDB2I gives misleading 2504 error

    • Target fix: 5.1

  • Bug#43343: ibmdb2i Storage Engine does not honor timezone settings with INSERT

    • Target fix: 5.1

  • Bug#49205: Cardinality NULL of index over UTF-8 collation field

    • Target fix: 5.1

  • Bug#44020: Unicode Swedish collations not working with IBMDB2I

    • Target fix: 5.1

  • Bug#45983: ibmdb2i_create_index_option=1 not working for primary key

    • Target fix: 5.1

  • Bug#45196: Some collations do not sort correctly with IBMDB2I

    • Target fix: 5.1

  • Bug#44022: CREATE TABLE sometimes fails silently for IBMDB2I engine

    • Target fix: 5.1

  • Bug#45197: cp1250 character set with IBMDB2I generates 2027 error

    • Target fix: 5.1

  • Bug#44811: Tests with utf8 charset fail with ibmdb2i on 64bit MySQL

    • Target fix: 5.1

  • Bug#46730: Tables created witn SE IBMDB2I show incorr update and create timestamps

    • Target fix: 5.1

  • Bug#45803: Inaccurate estimates for partial key values with IBMDB2I

    • Target fix: 5.1

  • Bug#49521: SHOW CREATE TABLE on IBMDB2I tables has incorrect fk constraint format

    • Target fix: 5.1

  • Bug#44025: Some schema names longer than 8 characters not supported by IBMDB2I

    • Target fix: 5.1

Server: DDL

  • Bug#37016: TRUNCATE TABLE removes some rows but not all

    • Target fix: 5.1.31

  • Bug#23113: Different behavior on altering ENUM fields between 5.0 and 5.1

    • Target fix: 5.1.30


    • Already fixed in: 5.1

  • Bug#35796: SHOW CREATE TABLE and default value for BIT field

    • Target fix: 5.1

  • Bug#48645: Dropping an unique key and adding one leads to a table corruption

    • Target fix: 5.1

  • Bug#41041: Obsolete debug code can be used to crash server

    • Target fix: 5.1

  • Bug#40277: SHOW CREATE VIEW returns invalid SQL

    • Target fix: 5.1

  • Bug#41465: confusing error message when comment is too long

    • Target fix: 5.1

  • Bug#40886: ALTER TABLE statements appear to randomly fail on Mac OS 10.4

    • Target fix: 5.1

  • Bug#39200: optimize table does not recognize ROW_FORMAT=COMPRESSED

    • Target fix: 5.1

  • Bug#39372: "Smart" ALTER TABLE not so smart after all.

    • Target fix: 5.1

  • Bug#48449: hang on show create view after upgrading when view contains function of view

    • Target fix: 5.1

  • Bug#47576: TRUNCATE TABLE for temporary tables maps to DROP TABLE

    • Target fix: 5.1

  • Bug#43508: Renaming timestamp or date column triggers table copy

    • Target fix: 5.1

  • Bug#45567: Fast ALTER TABLE broken for enum and set

    • Target fix: 5.1

  • Bug#49838: DROP INDEX and ADD UNIQUE INDEX for same index may corrupt definition at engine

    • Target fix: 5.1

Server: DML

  • Bug#48985: show create table crashes if previous access to the table was killed

    • Target fix: 5.1.42

  • Bug#39920: MySQL cannot deal with Leap Second expression in string literal.

    • Target fix: 5.0.74

  • Bug#46259: 5.0.83 -> 5.1.36, query doesn't work

    • Target fix: 5.1

  • Bug#33844: Server crashes when client dies during LOAD DATA INFILE

    • Target fix: 5.1

  • Bug#43385: Cannot ALTER DATABASE ... UPGRADE DATA DIRECTORY NAME when Views exist

    • Target fix: 5.1

  • Bug#45962: memory leak after 'sort aborted' errors

    • Target fix: 5.1

  • Bug#44306: Assertion fail on duplicate key error in 'INSERT ... SELECT' statements

    • Target fix: 5.1

  • Bug#41156: List of derived tables acts like a chain of mutually-nested subqueries

    • Target fix: 5.1

  • Bug#33717: INSERT...(default) fails for enum. Crashes CSV tables, loads spaces for MyISAM

    • Target fix: 5.1

  • Bug#44768: SIGFPE crash when selecting rand from a view containing null

    • Target fix: 5.1

  • Bug#49534: multitable IGNORE update with sql_safe_updates error causes debug assertion

    • Target fix: 5.1

  • Bug#38693: leaked memory with blobs!

    • Target fix: 5.1

  • Bug#44399: crash with statement using TEXT columns, aggregates, GROUP BY, and HAVING

    • Target fix: 5.1

  • Bug#44743: Join in combination with concat does not always work

    • Target fix: 5.1

  • Bug#40384: Gap in auto_increment sequence when inserts fire a trigger

    • Target fix: 5.1

  • Bug#45168: assertion with convert() and empty set value

    • Target fix: 5.1

  • Bug#47650: using group by with rollup without indexes returns incorrect results with where

    • Target fix: 5.1

  • Bug#40745: Error during WHERE clause calculation in UPDATE leads to an assertion failure

    • Target fix: 5.1

  • Bug#40127: Multiple table DELETE IGNORE hangs on foreign key constraint violation on 5.0

    • Target fix: 5.1

Server: Errors

  • Bug#49025: mysqld-debug: missing DBUG_RETURN or DBUG_VOID_RETURN macro in function "?func"

    • Target fix: 5.1

  • Bug#46265: Can not disable warning about unsafe statements for binary logging

    • Already fixed in: 5.1

  • Bug#41077: Warning contains wrong future version

    • Target fix: 5.1

  • Bug#41121: "Statement is not safe to log in statement format" is prints table name only

    • Target fix: 5.1

  • Bug#48042: The description for Event ID ( 100 ) in Source ( MySQL ) cannot be found. The lo

    • Target fix: 5.1

  • Bug#47974: 'TYPE=storage_engine' is deprecated and will be removed in MySQL 6.0

    • Target fix: 5.1

  • Bug#48451: my_seek and my_tell ignore MY_WME flag

    • Target fix: 5.1

  • Bug#42364: SHOW ERRORS returns empty resultset after dropping non existent table

    • Target fix: 5.1

Server: FTS

  • Bug#47930: MATCH IN BOOLEAN MODE returns too many results inside subquery

    • Target fix: 5.1

  • Bug#39640: ftb_query_add_word does not recognice MYSQL_FTFLAGS_NEED_COPY

    • Target fix: 5.1

  • Bug#42907: Multi-term boolean fulltext query containing a single quote fails in 5.1.x

    • Target fix: 5.1

  • Bug#39746: Debug flag breaks struct definition (server crash)

    • Target fix: 5.1

  • Bug#50351: ft_min_word_len=2 Causes query to hang

    • Target fix: 5.1

  • Bug#28234: global/session scope - documentation vs implementation

    • Target fix: 5.1

Server: GIS

  • Bug#35570: CHECKSUM TABLE unreliable if LINESTRING field (same content / differen checksum)

    • Target fix: 5.1

  • Bug#31435: ha_innodb.cc:3983: ulint convert_search_mode_to_innobase(ha_rkey_function): Asse

    • Target fix: 5.1

Server: General

  • Bug#50096: CONCAT_WS inside procedure returning wrong data

    • Target fix: 5.1.44

  • Bug#43748: crash when non-super user tries to kill the replication threads

    • Target fix: 5.1.34

  • Bug#41456: SET PASSWORD hates CURRENT_USER()

    • Target fix: 5.1.31

  • Bug#41363: crash of mysqld on windows with aggregate in case

    • Target fix: 5.1.31

  • Bug#40915: Events takes mutex in wrong order which can easily lead to deadlocks

    • Target fix: 5.1

  • Bug#45548: XA transaction without access to InnoDB tables crashes the server

    • Target fix: 5.1

  • Bug#44365: valgrind warnings with encrypt() function

    • Target fix: 5.1

  • Bug#39265: SQL_MODE OLD_NOT_NULL_CHECK_BEHAVIOUR for backward compatibility

    • Target fix: 5.1

  • Bug#45998: database crashes when running "create as select" (innodb table)

    • Already fixed in: 5.1

  • Bug#44164: TL_WRITE has no description in lock_descriptions[]

    • Target fix: 5.1

  • Bug#48053: String::c_ptr has a race and/or does an invalid memory reference

    • Target fix: 5.1

  • Bug#44367: valgrind warnings with find_in_set() functions

    • Target fix: 5.1

  • Bug#37284: Crash in Field_string::type()

    • Target fix: 5.1

  • Bug#40104: regression with table names?

    • Target fix: 5.1

  • Bug#38249: innodb_log_arch_dir still in support files

    • Target fix: 5.1

  • Bug#49141: Encode function is significantly slower in 5.1 compared to 5.0

    • Target fix: 5.1

  • Bug#43606: 4GB Limit on huge_pages shared memory set-up

    • Target fix: 5.1

  • Bug#47382: 'mysqladmin debug' crash on 64-bit windows

    • Target fix: 5.1

  • Bug#42496: server debug assertion after mysql_stmt_fetch is killed

    • Target fix: 5.1

  • Bug#44358: valgrind errors with decode() function

    • Target fix: 5.1

  • Bug#41612: resolve_stack_dump does not decode 5.1 stack trace

    • Target fix: 5.1

  • Bug#41710: MySQL 5.1.30 crashes on the latest OpenSolaris 10

    • Target fix: 5.1

  • Bug#48086: mysql_secure_installation does NOT work on Solaris

    • Target fix: 5.1

  • Bug#29071: invalid Open_files or Slave_open_temp_tables value in show global status

    • Target fix: 5.1

  • Bug#38477: my_pthread_setprio can change dispatch class on Solaris, not just priority

    • Target fix: 5.1

  • Bug#39178: Server crash in YaSSL with non-RSA-requesting client if server uses RSA key

    • Target fix: 5.1

  • Bug#42146: DATETIME fractional seconds parse error

    • Target fix: 5.1

  • Bug#46261: Plugins can be installed with --skip-grant-tables

    • Target fix: 5.1

  • Bug#45309: InnoDB does not rollback for delete and update queries if query was killed

    • Target fix: 5.1

  • Bug#30261: "mysqld --help" no longer possible for root

    • Target fix: 5.1

  • Bug#49491: Much overhead for MD5() and SHA1() on short strings

    • Target fix: 5.1

  • Bug#44664: valgrind warning for COMMIT_AND_CHAIN and ROLLBACK_AND_CHAIN

    • Target fix: 5.1

  • Bug#50780: 'show binary logs' debug assertion when binary logging is disabled

    • Target fix: 5.1

  • Bug#10206: InnoDB: Transaction requiring Max_BinLog_Cache_size > 4GB always rollsback.

    • Target fix: 5.1

  • Bug#44638: mysql_upgrade, mysqlcheck output instance unclear

    • Target fix: 5.1

  • Bug#42158: leak: SSL_get_peer_certificate() doesn't have matching X509_free()

    • Target fix: 5.1

  • Bug#46895: Test "outfile_loaddata" fails (reproducible)

    • Target fix: 5.1

  • Bug#42957: no results from select where .. (col=col and col=col) or ... (false expression)

    • Target fix: 5.1

  • Bug#40657: assertion with out of range variables and traditional sql_mode

    • Target fix: 5.1

  • Bug#44736: mysqld_safe's my_which() is broken and doesn't find 'logger'

    • Target fix: 5.1

  • Bug#36751: Segmentation fault in ctype-bin.c:308; Linux 86_64, with-max-indexes=128

    • Target fix: 5.1

  • Bug#48525: trigger changes "Column 'id' cannot be null" behaviour

    • Target fix: 5.1

  • Bug#43962: "Packets out of order" calling a SHOW TABLE STATUS

    • Target fix: 5.1

  • Bug#34043: Server loops excessively in _checkchunk() when safemalloc is enabled

Server: I_S

  • Bug#39541: CHECK TABLE on information_schema myisam tables produces error

    • Target fix: 5.0.74

  • Bug#38918: selecting from information_schema.columns is disproportionately slow

    • Target fix: 5.1

  • Bug#48729: SELECT ... FROM INFORMATION_SCHEMA.ROUTINES causes memory to grow

    • Target fix: 5.1

  • Bug#35789: wrong datatypes for collation and charset columns in EVENTS, ROUTINES, TRIGGERS

    • Target fix: 5.1

  • Bug#50276: Security flaw in INFORMATION_SCHEMA.TABLES

    • Target fix: 5.1

  • Bug#38909: CREATE_OPTIONS in information_schema produces wrong results

    • Target fix: 5.1


    • Target fix: 5.1

  • Bug#42758: INFORMATION_SCHEMA.COLUMNS is inconsistent

    • Target fix: 5.1


    • Target fix: 5.1

  • Bug#29900: MySQL does not return an error to the client if INFORMAT SCHEMA fill table fails

Server: InnoDB

  • Bug#46193: crash when accessing tables after enabling innodb_force_recovery option

    • Target fix: 5.1.44

  • Bug#45357: 5.1.35 crashes with Failing assertion: index->type & DICT_CLUSTERED

    • Target fix: 5.1.37

  • Bug#39320: assert btr/btr0pcur.c line 217 -innodb_locks_unsafe_for_binlog or read committed

    • Target fix: 5.1.35

  • Bug#40386: Not flushing query cache after truncate

    • Target fix: 5.1.31

  • Bug#40360: Binlog related errors with binlog off

    • Target fix: 5.1.30

  • Bug#21704: Renaming column does not update FK definition

    • Renaming a column that appears in a foreign key definition does not update the foreign key definition with the new column name; this occurs with both referenced and referencing tables. This could interefere with reloading from a dump, due to creating constraints against non-existent columns. Workaround: Drop and re-create manually any foreign key definitions affected by the renaming of a column.

      Target fix: 5.1

  • Bug#49032: auto_increment field does not initialize to last value in InnoDB Storage Engine

    • Target fix: 5.1

  • Bug#47233: Innodb calls push_warning(MYSQL_ERROR::WARN_LEVEL_ERROR)

    • Target fix: 5.1

  • Bug#39648: Replication failure on RBR + Innodb + 2 bit fields + LIMIT + no PK

    • Target fix: 5.1

  • Bug#49238: Creating/Dropping a temporary table while at 1023 transactions will cause assert

    • Target fix: 5.1

  • Bug#39438: Testcase for Bug#39436 crashes on 5.1 in fil_space_get_latch

    • Target fix: 5.1

  • Bug#36169: create innodb compressed table with too large row size crashed

    • Target fix: 5.1

  • Bug#45749: Race condition in SET GLOBAL innodb_commit_concurrency=DEFAULT

    • Target fix: 5.1

  • Bug#39793: Foreign keys not constructed when column has a '#' in a comment or default value

    • Target fix: 5.1

  • Bug#47991: InnoDB Dictionary Cache memory usage increases indefinitely when renaming tables

    • Target fix: 5.1

  • Bug#45097: Hang during recovery, redo logs for doublewrite buffer pages

    • Target fix: 5.1

  • Bug#36411: "Failed to read auto-increment value from storage engine" in 5.1.24 auto-inc

    • Target fix: 5.1

  • Bug#35498: Cannot get table test/table1 auto-inccounter value in ::info

    • Target fix: 5.1

  • Bug#41609: Crash recovery does not work for InnoDB temporary tables

    • Target fix: 5.1

  • Bug#44030: Error: (1500) Couldn't read the MAX(ID) autoinc value from the index (PRIMARY)

    • Target fix: 5.1

  • Bug#40369: dtype_get_sql_null_size() returns 0 or 1, not the size

    • Target fix: 5.1

  • Bug#49001: SHOW INNODB STATUS deadlock info incorrect when deadlock detection aborts

    • Target fix: 5.1

  • Bug#38189: innodb_stats_on_metadata missing

    • Target fix: 5.1

  • Bug#39830: Table autoinc value not updated on first insert

    • Target fix: 5.1

  • Bug#37885: row_search_for_mysql may gap lock unnecessarily with SQL comments in query

    • Target fix: 5.1

  • Bug#42101: Race condition in innodb_commit_concurrency

    • Target fix: 5.1

  • Bug#42714: AUTO_INCREMENT errors in 5.1.31

    • Target fix: 5.1

  • Bug#41671: Semi-consistent read does not unlock rows in READ COMMITTED mode

    • Target fix: 5.1

  • Bug#38231: Innodb crash in lock_reset_all_on_table() on TRUNCATE + LOCK / UNLOCK

    • Target fix: 5.1

  • Bug#42279: Race condition in btr_search_drop_page_hash_when_freed()

    • Target fix: 5.1

  • Bug#42400: InnoDB autoinc code can't handle floating-point columns

    • Target fix: 5.1

  • Bug#43660: SHOW INDEXES/ANALYZE does NOT update cardinality for indexes of InnoDB table

    • Target fix: 5.1

  • Bug#44320: InnoDB: missing DB_ROLL_PTR in Table Monitor COLUMNS output

    • Target fix: 5.1

  • Bug#48024: Innodb doesn't work with multi-statements

    • Target fix: 5.1

  • Bug#43203: Overflow from auto incrementing causes server segv

    • Target fix: 5.1

  • Bug#46256: drop table with unknown collation crashes innodb

    • Target fix: 5.1

  • Bug#42152: Race condition in lock_is_table_exclusive()

    • Target fix: 5.1

  • Bug#49164: READ-COMMITTED reports "matched: 0" on compound PK

    • Target fix: 5.1

  • Bug#42075: dict_load_indexes failure in dict_load_table will corrupt the dictionary cache

    • Target fix: 5.1

  • Bug#42383: main.innodb_bug39438: Can't create table 'test.bug39438'

    • Target fix: 5.1

  • Bug#47621: MySQL and InnoDB data dictionaries will become out of sync when renaming columns

    • Target fix: 5.1

  • Bug#50691: AIX implementation of readdir_r causes InnoDB errors

  • Bug#3139: Mysql crashes: "windows error 995" after several selects on a large DB

Server: InnoDB Plugin

  • Bug#48782: On lock wait timeout, CREATE INDEX (creating primary key) attempts DROP TABLE

    • Target fix: 5.1.42

  • Bug#50495: 'Row size too large' for plugin, but works for built-in innodb

    • Target fix: 5.1

  • Bug#47809: innodb-autoinc.test fails with valgrind errors with the innodb plugin

    • Target fix: 5.1

  • Bug#47058: failure to compile innodb_plugin on solaris 10u7 + spro cc/CC 5.10

    • Target fix: 5.1

  • Bug#47167: "set global innodb_file_format_check" cannot set value by User-Defined Variable

    • Target fix: 5.1

  • Bug#35077: Very slow DROP TABLE (ALTER TABLE, OPTIMIZE TABLE) on compressed tables

    • Target fix: 5.1

  • Bug#37788: InnoDB Plugin: AUTO_INCREMENT wrong for compressed tables

    • Target fix: 5.1

  • Bug#44571: InnoDB Plugin crashes on ADD INDEX

    • Target fix: 5.1

  • Bug#46657: InnoDB plugin: invalid read in index_merge_innodb test (Valgrind)

    • Target fix: 5.1

  • Bug#50946: fast index creation still seems to copy the table

    • Target fix: 5.1

  • Bug#46672: InnoDB plugin: consider porting to the plugin some bugfixes made to the builtin

    • Target fix: 5.1

  • Bug#46718: InnoDB plugin incompatible with gcc 4.1 (at least: on PPC): "Undefined symbol"

    • Target fix: 5.1

  • Bug#46656: InnoDB plugin: memory leaks (Valgrind)

    • Target fix: 5.1

  • Bug#48237: Error handling in os_mem_alloc_large appears to be incorrect

    • Target fix: 5.1

Server: Installing

  • Bug#45418: 'MySQL Server 5.1 Setup Wizard ended prematurely' message during .msi install

    • Already fixed in: 5.1.38

  • Bug#49823: mysql_upgrade fatal error due to general_log / slow_low CSV NULL

    • Target fix: 5.1

  • Bug#17270: mysql client tool could not find ../share/charsets folder and fails.

    • Target fix: 5.1

  • Bug#41828: mysql_install_db misses mysqld options when using --basedir

    • Target fix: 5.1

  • Bug#29716: mysql_install_db refers to the (obsolete) mysqlbug script during installation

    • mysql_install_db output needs to refer to the online bugs database rather than to the obsolete mysqlbug script.

      Target fix: 5.1

  • Bug#48694: mysql-install-db.pl does not correctly handle --srcdir on Windows

    • Target fix: 5.1

  • Bug#46258: Windows Install zaps prev. instance, even though basedir is different

    • Target fix: 5.1

  • Bug#29595: error in service mysql restart

    • Target fix: 5.1

  • Bug#38073: new default <datadir> does not globally apply

    • Target fix: 5.1

  • Bug#41313: network administrator does not have TRIGGER and EVENT privileges

    • Target fix: 5.1

  • Bug#48695: mysql-install-db.pl does not account for --lc-messages-dir

    • Target fix: 5.1

  • Bug#42820: MySQL not starting due to InnoDB failure

    • Target fix: 5.1

  • Bug#48031: mysql_secure_installation -- bash bug regarding passwords with special chars

    • Target fix: 5.1

  • Bug#44073: 'could not start service' message but service starts anyway!

    • Target fix: 5.1

Server: Locking

  • Bug#41756: Strange error messages about locks from InnoDB

    • Target fix: 5.1.41

  • Bug#41348: INSERT INTO tbl SELECT * FROM temp_tbl overwrites locking type of temp table

    • Target fix: 5.1.31

  • Bug#43171: Assertion failed: thd->transaction.xid_state.xid.is_null()

    • Target fix: 5.1

  • Bug#41110: crash with handler command when used concurrently with alter table

    • Target fix: 5.1

  • Bug#47924: main.log_tables times out sporadically

    • Target fix: 5.1

  • Bug#39843: DELETE requires write access to table in subquery in where clause

    • Target fix: 5.1

  • Bug#47682: strange behaviour of INSERT DELAYED

    • Target fix: 5.1

  • Bug#33278: ANALYZE TABLE in InnoDB holds exclusive locks on subsequent execution

    • Target fix: 5.1

  • Bug#44672: Assertion failed: thd->transaction.xid_state.xid.is_null()

    • Target fix: 5.1

  • Bug#46947: Embedded SELECT without FOR UPDATE is causing a lock

    • Target fix: 5.1

  • Bug#46456: HANDLER OPEN + TRUNCATE + DROP (temporary) TABLE, crash

    • Target fix: 5.1

Server: Logging

  • Bug#43885: main.variables-big fails because of warnings within the server log

    • Target fix: 5.1

  • Bug#37132: Logging to slow_log table fails with very slow queries

    • Target fix: 5.1

  • Bug#48318: The "debug_sync" mechanism doesn't work correctly (on one platform)

    • Target fix: 5.1

  • Bug#47905: stored procedures with multiple statements not being logged to slow query log

    • Target fix: 5.1

  • Bug#40281: partitioning the general log table crashes the server

    • Already fixed in: 5.1

  • Bug#29751: renaming server logs at FLUSH LOGS

    • Target fix: 5.1

Server: Memory

  • Bug#39886: Table full for MEMORY table is not written into error log

    • Target fix: 5.1

Server: Merge

  • Bug#40675: MySQL 5.1 crash with index merge algorithm and Merge tables

    • Target fix: 5.1.33

  • Bug#41305: server crashes when inserting duplicate row into a merge table

    • Target fix: 5.1

  • Bug#44040: MySQL allows creating a MERGE table upon VIEWs but crashes when using it

    • Target fix: 5.1

  • Bug#41212: crash after race condition between merge table and table_cache evictions

    • Target fix: 5.1

  • Bug#45800: crash when replacing into a merge table and there is a duplicate

    • Already fixed in: 5.1

  • Bug#45796: invalid memory reads and writes when altering merge and base tables

    • Target fix: 5.1

  • Bug#45781: infinite hang/crash in "opening tables" after handler tries to open merge table

    • Already fixed in: 5.1

  • Bug#48265: MRG_MYISAM problem (works in 5.0.85, does't work in 5.1.40)

    • Target fix: 5.1

Server: MyISAM

  • Bug#43932: myisam index corruption with large index and large key_buffer_size

    • Target fix: 5.1.35

  • Bug#41574: REPAIR TABLE: crashes for compressed tables

    • Target fix: 5.1.31

  • Bug#47598: MyISAM may write uninitialized data to disk

    • Target fix: 5.1

  • Bug#35111: Truncate a MyISAM partitioned table does not reset the auto_increment value.

    • Target fix: 5.1

  • Bug#43940: 64-bit windows myisamchk doesn't support key_buffer_size > 4G

    • Target fix: 5.1

  • Bug#40827: Killing insert-select to MyISAM can cause table corruption

    • Target fix: 5.1

  • Bug#47073: valgrind errs, corruption,failed repair of partition,low myisam_sort_buffer_size

    • Target fix: 5.1

  • Bug#38848: myisam_use_mmap causes widespread myisam corruption on windows

    • Target fix: 5.1

  • Bug#50390: mysqld crashes when trying to access specific myisam table

    • Target fix: 5.1

  • Bug#49902: SELECT returns incorrect results

    • Target fix: 5.1

  • Bug#37631: Incorrect key file for table after upgrading from 5.0 to 5.1

    • Target fix: 5.1

  • Bug#40321: ha_myisam::info could update rec_per_key incorrectly

    • Target fix: 5.1

  • Bug#40634: table scan temporary table is 4x slower due to mmap instead instead of caching

    • Target fix: 5.1

  • Bug#37756: enabling fulltext indexes with myisam_repair_threads > 1 causes crash

    • Target fix: 5.1

Server: Optimizer

  • Bug#50995: Having clause on subquery result produces incorrect results.

    • Target fix: 5.1.45

  • Bug#48370: Absolutely wrong calculations with GROUP BY and decimal fields when using IF

    • Target fix: 5.1.42

  • Bug#47963: Wrong results when index is used

    • Target fix: 5.1.41

  • Bug#46454: MySQL wrong index optimisation leads to incorrect result & crashes

    • Already fixed in: 5.1.38

  • Bug#37362: Crash in do_field_eq

    • Target fix: 5.1.36

  • Bug#44290: crash in SQL_SELECT::test_quick_select for query with distinct or order/group by

    • Target fix: 5.1.35

  • Bug#34773: query with explain extended and derived table / other table crashes server

    • Target fix: 5.1.31

  • Bug#38842: Fix for 25951 seems incorrect

    • Target fix: 5.0.74

  • Bug#45640: optmizer bug produces wrong results

    • Target fix: 5.1

  • Bug#45195: valgrind warnings about uninitialized values in store_record_in_cache()

    • Target fix: 5.1

  • Bug#48537: difference of index selection between rpm binary and .tar.gz, windows vs linux..

    • Target fix: 5.1

  • Bug#48177: SELECTs with NOT IN subqueries containing NULL values return too many records

    • Target fix: 5.1

  • Bug#46051: Selects with a subquery sporadically return wrong data

    • Already fixed in: 5.1

  • Bug#46629: Item_in_subselect::val_int(): Assertion `0' on subquery inside a SP

    • Target fix: 5.1

  • Bug#46175: NULL read_view and consistent read assertion

    • Target fix: 5.1

  • Bug#50198: Server adding duplicate row with duplicate WHERE clause condition and Innodb

    • Target fix: 5.1

  • Bug#50939: Loose Index Scan unduly relies on engine to remember range endpoints

    • Target fix: 5.1

  • Bug#47669: Query showed by EXPLAIN EXTENDED gives different result from original query

    • Target fix: 5.1

  • Bug#48459: valgrind errors with query using 'Range checked for each record'

    • Target fix: 5.1

  • Bug#46159: simple query that never returns

    • Target fix: 5.1

  • Bug#45828: Optimizer won't use partial primary key if another index can prevent filesort

    • Target fix: 5.1

  • Bug#44139: Table scan when NULL appears in IN clause

    • Target fix: 5.1

  • Bug#47904: Incorrect results w/ table subquery, derived SQs, and LEFT JOIN on index

    • Target fix: 5.1

  • Bug#47280: strange results from count(*) with order by multiple columns without where/group

    • Target fix: 5.1

  • Bug#49445: Assertion failed: 0, file .\item_row.cc, line 55 with fulltext search and row op

    • Target fix: 5.1

  • Bug#48954: Server is processing compound WHERE clause incorrectly - missing rows

    • Target fix: 5.1

  • Bug#44886: SIGSEGV in test_if_skip_sort_order() - uninitialized variable used as subscript

    • Target fix: 5.1

  • Bug#48258: Assertion failed when using a spatial index

    • Target fix: 5.1

  • Bug#37742: HA_EXTRA_KEYREAD flag is set when key contains only prefix of requested column

    • Target fix: 5.1

  • Bug#46791: Assertion failed:(table->key_read==0),function unknown function,file sql_base.cc

    • Target fix: 5.1

  • Bug#37822: Correlated subquery with IN and IS UNKNOWN provides wrong result

    • Target fix: 5.1

  • Bug#46607: Assertion failed: (cond_type == Item::FUNC_ITEM) results in server crash

    • Target fix: 5.1

  • Bug#46003: Valgrind warning in JOIN::init()

    • Already fixed in: 5.1

  • Bug#49506: Valgrind error in make_cond_for_table_from_pred

    • Target fix: 5.1

  • Bug#47123: Endless 100% CPU loop with STRAIGHT_JOIN

    • Target fix: 5.1

  • Bug#43029: FORCE INDEX FOR ORDER BY is ignored when join buffering is used

    • Target fix: 5.1

  • Bug#45989: memory leak after explain encounters an error in the query

    • Target fix: 5.1

  • Bug#41543: Assertion `m_status == DA_ERROR' failed in Diagnostics_area::sql_errno

    • Target fix: 5.1

  • Bug#49324: more valgrind errors in test_if_skip_sort_order

    • Target fix: 5.1

  • Bug#48916: Server incorrectly processing HAVING clauses with an ORDER BY clause

    • Target fix: 5.1

  • Bug#42785: mysql gives the wrong result with some special usage

    • Target fix: 5.1

  • Bug#47150: Assertion in Field_long::val_int() on MERGE + TRIGGER + multi-table UPDATE

    • Target fix: 5.1

  • Bug#48295: explain extended crash with subquery and ONLY_FULL_GROUP_BY sql_mode

    • Target fix: 5.1

  • Bug#48703: nontrivial ORDER/GROUP BY expressions: ambiguous statements not detected

    • Target fix: 5.1

  • Bug#37936: ASSERT_COLUMN_MARKED_FOR_WRITE in Field_datetime::store , Field_varstring::store

    • Target fix: 5.1

  • Bug#31399: Wrong query result when doing join buffering over BIT fields

    • Target fix: 5.1

  • Bug#47761: crash when killing a query during subquery execution...

    • Target fix: 5.1

  • Bug#47762: Incorrect result from MIN() when WHERE tests NOT NULL column for NULL

    • Target fix: 5.1

  • Bug#39022: Mysql randomly crashing in lock_sec_rec_cons_read_sees

Server: Options

  • Bug#43835: SHOW VARIABLES does not include 0 for slave_skip_errors

    • Target fix: 5.1

  • Bug#49417: some complaints about mysqld --help --verbose output

    • Target fix: 5.1

  • Bug#20415: Output of mysqld --help --verbose is incomplete

    • Target fix: 5.1

  • Bug#47973: innodb_data_file_path truncated on show variables

    • Target fix: 5.1

Server: Packaging

  • Bug#46834: Test suite missing from RPMs

    • Already fixed in: 5.1.39

  • Bug#43153: Version comment is too long

    • Target fix: 5.1.34

  • Bug#40845: Win inst shows screens with wrong naming "MySQL Monitoring and Advisory Service"

    • Target fix: 5.1.31

  • Bug#34025: mysql_config is not returning -ldl lib flag needed when using embedded server

    • Target fix: 5.1.31

  • Bug#41838: shared-compat packages missing for Enterprise 5.1 builds

    • Target fix: 5.1.31

  • Bug#39074: Binaries do not work on Solaris 10 older than U5

    • Target fix: 5.1.30

  • Bug#41577: improper value in example config file

    • Target fix: 5.1

  • Bug#48186: MySQL Instance Config Wizard/MySQL Instance Manager

    • Target fix: 5.1

  • Bug#44496: No "MySQL Manual" in Install-Package

    • Target fix: 5.1

  • Bug#41189: No debug symbols in 5.1.30 build for Mac OSX (mysql-5.1.30-osx10.5-x86.dmg)

    • Target fix: 5.1

  • Bug#36409: Windows installer changes needed for Vista Certification.

    • Target fix: 5.1

  • Bug#31143: mysqlslap.exe (and other) missing in windows install packages

    • Windows distributions are missing mysqlslap and a few other test-related programs.

      Target fix: 5.1

  • Bug#43918: Generated version string is too long for the binlog

    • Target fix: 5.1

  • Bug#49707: Files with long names not included in distribution.

    • Target fix: 5.1

  • Bug#44353: build-v9.bat is missing in source archive

    • Target fix: 5.1

  • Bug#46216: License header size differences again

    • Target fix: 5.1

  • Bug#39641: mysql_config --plugindir links to /usr/local/mysql/lib/plugin in tar.gz packages

    • Target fix: 5.1

  • Bug#50021: Windows standard configuration files are showing Linux options/settings

    • Target fix: 5.1

  • Bug#41728: Dropped symbol but no soname change

    • Target fix: 5.1

  • Bug#49800: libstdc++ dependency (was: Provide 64bit icc binaries linked against libstdc++6)

    • Target fix: 5.1

  • Bug#48420: Windows binaries Docs/INSTALL-BINARY contains Unix-only instructions

    • Target fix: 5.1

  • Bug#49723: support-files/mysql.spec.sh has unwanted Perl dependencies

    • Target fix: 5.1

  • Bug#37697: make_binary_distribution places files in wrong path

    • Target fix: 5.1

  • Bug#39175: mysql_config --libs polluted by $LDFLAGS

    • Target fix: 5.1

Server: Parser

  • Bug#39559: dump of stored procedures / functions with C-style comment can't be read back

    • Target fix: 5.1

  • Bug#43746: YACC return wrong query string when parse 'load data infile' sql statement

    • Target fix: 5.1

Server: Partition

  • Bug#47343: InnoDB fails to clean-up after lock wait timeout on REORGANIZE PARTITION

    • Target fix: 5.1.44

  • Bug#14326: No formatting of SHOW CREATE TABLE output

    • Target fix: 5.1.31

  • Bug#39434: ALTER TABLE CHECK/OPTIMIZE/ANALYZE PARTITION work on non-partitioned table

    • Target fix: 5.1.31

  • Bug#40176: Combination of event, trigger and partitioning breaks auto increment

    • Target fix: 5.1.31

  • Bug#37721: ORDER BY when WHERE contains non-partitioned index column

    • Target fix: 5.1.31

  • Bug#40954: Crash in MyISAM index code with concurrency test using partitioned tables

    • The crash is observed with queries of the form "SELECT * FROM part_table WHERE a < const ORDER BY a" or "SELECT * FROM part_table WHERE a <> ORDER BY a" where a is an indexed column used as the partition key. The crash can be avoided by 'limiting' the where clause with a very low value as in: "SELECT * FROM part_table WHERE a < const AND a > -1000 ORDER BY a" or "SELECT * FROM part_table WHERE a <> AND a > -1000 ORDER BY a"

      Target fix: 5.1.31

  • Bug#40494: MYSQL server crashes on range access with partitioning and order by

    • Target fix: 5.1.30

  • Bug#44653: Server crash noticed when executing random queries with partitions.

    • Target fix: 5.1

  • Bug#36001: Partitions: spelling and using some error messages

    • Target fix: 5.1

  • Bug#38719: Partitioning returns a different error code for a duplicate key error

    • Target fix: 5.1

  • Bug#42438: Crash ha_partition::change_table_ptr

    • Target fix: 5.1

  • Bug#20577: Partitions: use of to_days() function leads to selection failures

    • Target fix: 5.1

  • Bug#44821: select distinct on partitioned table returns wrong results

    • Target fix: 5.1

  • Bug#42944: partition not pruned correctly

    • Target fix: 5.1

  • Bug#30102: Failed RENAME of partitioned table corrupts table files

    • Already fixed in: 5.1

  • Bug#48846: Too much time spent in ha_partition::records_in_range if not able to prune

    • Target fix: 5.1

  • Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with concurrent I_S query

    • Target fix: 5.1

  • Bug#44059: Incorrect cardinality of indexes on a partitioned table

    • Target fix: 5.1

  • Bug#40515: Query on a partitioned table does not return 'lock wait timeout exceeded'

    • Target fix: 5.1

  • Bug#50418: DROP PARTITION does not interact with transactions

    • Target fix: 5.1

  • Bug#45816: assertion failure with index containing DOUBLE column on partitioned table

    • Already fixed in: 5.1

  • Bug#50104: Partitioned table with just 1 partion works with fk

    • Target fix: 5.1

  • Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)

    • Target fix: 5.1

  • Bug#49161: Out of memory; restart server and try again (needed 2 bytes)

    • Target fix: 5.1

  • Bug#46922: crash when adding partitions and open_files_limit is reached

    • Target fix: 5.1

  • Bug#36312: InnoDB DATA_FREE BUG?

    • Target fix: 5.1

  • Bug#45904: Cannot create a key subpartition if character set of UTF8 is used

    • Target fix: 5.1

  • Bug#45840: read_buffer_size allocated for each partition when "insert into.. select * from"

    • Target fix: 5.1

  • Bug#37453: Dropping/creating index on partitioned table with InnoDB Plugin locks table

    • Target fix: 5.1

  • Bug#49477: Assertion `0' failed in ha_partition.cc:5530 with temporary table and partitions

    • Target fix: 5.1

  • Bug#40389: REORGANIZE PARTITION crashes when only using one partition

    • Target fix: 5.1

  • Bug#46354: Crash in partition_info::check_partition_info on inconsistent subpartitions

    • Already fixed in: 5.1

  • Bug#39084: Getting intermittent errors with statement-based binary logging

    • Target fix: 5.1

  • Bug#48229: group by performance issue of partitioned table

    • Target fix: 5.1

  • Bug#45807: crash accessing partitioned table and sql_mode contains ONLY_FULL_GROUP_BY

    • Target fix: 5.1

  • Bug#40972: Partition pruning can lead to crash for bad dates

    • Target fix: 5.1

  • Bug#51042: REORGANIZE PARTITION can leave table in an inconsitent state in case of crash

    • Target fix: 5.1

  • Bug#46483: drop table of partitioned table may leave extraneous file

    • Target fix: 5.1

  • Bug#48276: Partitions: can't add column if subpartition exists

    • Target fix: 5.1

  • Bug#50392: insert_id is not reset for partitioned tables auto_increment on duplicate entry

    • Target fix: 5.1

  • Bug#39893: Crash if select on a partitioned table, when partitioning is disabled

    • Target fix: 5.1

  • Bug#42849: innodb crash with varying time_zone on partitioned timestamp primary key

    • Target fix: 5.1

  • Bug#50300: ALTER TABLE REORGANIZE PARTITION .... changes row_format of table

    • Target fix: 5.1

  • Bug#46639: 1030 (HY000): Got error 124 from storage engine on INSERT ... SELECT ...

    • Target fix: 5.1

  • Bug#46923: select count(*) from partitioned table fails with ONLY_FULL_GROUP_BY

    • Target fix: 5.1

  • Bug#35845: unneccesary call to ha_start_bulk_insert for not used partitions

    • Target fix: 5.1

  • Bug#45823: Assertion failure in file row/row0mysql.c line 1386

    • Target fix: 5.1

  • Bug#46478: timestamp field incorrectly defaulted when partition is reorganized

    • Target fix: 5.1

Server: Privileges

  • Bug#48872: Privileges for stored functions ignored if function name is mixed case

    • Target fix: 5.1.42

  • Bug#44658: Create procedure makes server crash when user does not have ALL privilege

    • Target fix: 5.1

  • Bug#37191: Failed assertion in CREATE VIEW

    • Target fix: 5.1

  • Bug#49752: 2469.126.2 unintentionally breaks authentication against MySQL 5.1 server

    • Target fix: 5.1

  • Bug#35591: FLUSH PRIVILEGES caused a crash

    • Target fix: 5.1

  • Bug#30305: Create routine in wrong context in SHOW PRIVILEGES

    • Target fix: 5.1

  • Bug#48319: Server crashes on "GRANT/REVOKE ... TO CURRENT_USER"

    • Target fix: 5.1

  • Bug#36742: GRANT hostname case handling inconsistent

    • Target fix: 5.1

  • Bug#45100: Incomplete DROP USER in case of SQL_MODE = 'PAD_CHAR_TO_FULL_LENGTH'

    • Target fix: 5.1

Server: Query Cache

  • Bug#43758: Query cache can lock up threads in 'freeing items' state

    • Target fix: 5.1.36

  • Bug#39253: Large query cache still freezes server after fix for Bug#21074

    • Target fix: 5.1

  • Bug#41098: Query Cache returns wrong result with concurrent insert

    • Target fix: 5.1

Server: RBR

  • Bug#42977: RBR logs for rows with more than 250 column results in corrupt binlog.

    • Target fix: 5.1.34

  • Bug#40221: Replication failure on RBR + UPDATE the primary key

    • Target fix: 5.1.31

  • Bug#41986: Replication slave does not pick up proper AUTO_INCREMENT value for Innodb tables

    • Target fix: 5.1.31

  • Bug#40004: Replication failure with no PK + no indexes

    • Target fix: 5.1.30

  • Bug#48350: truncate temporary table crashes replication

    • Target fix: 5.1

  • Bug#49481: RBR: MyISAM and bit fields may cause slave to stop on delete: cant find record

    • Target fix: 5.1

  • Bug#47678: Changes to n-tables that happen early in a trans. are only flushed upon commit

    • Target fix: 5.1

  • Bug#42914: No LAST_IO_ERROR for max_allowed_packet errors

    • Target fix: 5.1

  • Bug#46640: output from mysqlbinlog command in 5.1 breaks replication

    • Target fix: 5.1

  • Bug#47418: RBR fails, failure with mixup of base/temporary/view TABLE DDL

    • Target fix: 5.1

  • Bug#38230: Differences between master and slave after UPDATE or DELETE with LIMIT with pk

    • Target fix: 5.1

  • Bug#50018: binlog corruption when table has many columns

    • Target fix: 5.1

  • Bug#49618: Field length stored incorrectly in binary log for InnoDB

    • Target fix: 5.1

  • Bug#49132: Replication failure on temporary table + DDL

    • Target fix: 5.1

  • Bug#47899: CREATE TABLE...SELECT binlogged wrongly if binlog_format=row

    • Target fix: 5.1

  • Bug#39701: Mixed binlog format does not switch to row mode on LOAD_FILE

    • Target fix: 5.1

  • Bug#42749: infinite loop writing to row based binlog - processlist shows "freeing items"

    • Target fix: 5.1

  • Bug#39753: Replication failure on MIXED + bit + myisam + no PK

    • Target fix: 5.1

  • Bug#42941: --database paramater to mysqlbinlog fails with RBR

    • Target fix: 5.1

  • Bug#45999: row based replication fails when auto_increment field = 0

    • Target fix: 5.1

  • Bug#45243: crash on win in sql thread clear_tables_to_lock() -> free()

    • Target fix: 5.1

  • Bug#47312: RBR: Disabling key on slave breaks replication: HA_ERR_WRONG_INDEX

    • Target fix: 5.1

  • Bug#49482: RBR: Replication may break on deletes when MyISAM tables + char field are used

    • Target fix: 5.1

Server: Replication

  • Bug#49479: Slave stops with syntax error: LOAD DATA event without escaped field names

    • Target fix: 5.1.43

  • Bug#48506: crash in CREATE TABLE <existing_view> IF NOT EXISTS LIKE <tmp_tbl> with RBL

    • Target fix: 5.1.42

  • Bug#48297: Schema name is ignored when LOAD DATA is written into binlog, replication aborts

    • Target fix: 5.1.41

  • Bug#44581: Slave stops when transaction with non-transactional table gets lock wait timeout

    • Target fix: 5.1.37

  • Bug#40116: Uncommited changes are replicated and stay on slave after rollback on master

    • Target fix: 5.1.31

  • Bug#50407: mysqlbinlog --database=X produces bad output for SAVEPOINTs

    • Target fix: 5.1

  • Bug#34541: mysqlbinlog prints 'set;' in stm mode after changing autocommit mode

    • Target fix: 5.1

  • Bug#43579: mysql_upgrade tries to alter log tables on replicated database

    • Target fix: 5.1

  • Bug#37148: Most callers of mysql_bin_log.write ignore the return result

    • Target fix: 5.1

  • Bug#34739: unexpected binlog file name when --log-bin is set to a directory name

    • Target fix: 5.1

  • Bug#49119: Master crashes when executing 'REVOKE ... ON {PROCEDURE|FUNCTION} FROM ...'

    • Target fix: 5.1

  • Bug#47323: mysqlbinlog --verbose displays bad output when events contain subset of columns

    • Target fix: 5.1

  • Bug#41948: Query_log_event constructor needlessly contorted

    • Target fix: 5.1

  • Bug#40013: mixed replication: row based format could lead to stale tmp tables on the slave

    • Target fix: 5.1

  • Bug#47142: "slave start until" stops 1 event too late in 4.1 to 5.0 replication

    • Target fix: 5.1

  • Bug#41980: SBL, INSERT .. SELECT .. LIMIT = ERROR, even when @@SQL_LOG_BIN is 0 !

    • Target fix: 5.1

  • Bug#35583: mysqlbinlog replay fails with ERROR 1146 when temp tables are used

    • Target fix: 5.1

  • Bug#22504: load data infile sql statement in replication architechure get error

    • Target fix: 5.1

  • Bug#48993: valgrind errors in mysqlbinlog

    • Target fix: 5.1

  • Bug#48357: SHOW BINLOG EVENTS: Wrong offset or I/O error

    • Target fix: 5.1

  • Bug#45214: get_master_version_and_clock does not report error when queries fail

    • Already fixed in: 5.1

  • Bug#39526: sql_mode not retained in binary log for CREATE PROCEDURE

    • Target fix: 5.1

  • Bug#28976: Mixing trans and non-trans tables in one transaction results in incorrect binlog

    • Target fix: 5.1

  • Bug#50620: Adding an index to a table prevents slave from logging into slow log

    • Target fix: 5.1

  • Bug#38197: Errors in @@init_slave not visible in 'show slave status'

    • Target fix: 5.1

  • Bug#47287: RBR: replication diff on basic case with txn- and non-txn tables in a statement

    • Target fix: 5.1

  • Bug#48632: Fix for Bug#23300 Has Not Been Backported To 5.x Release

    • Target fix: 5.1

  • Bug#43046: mixed mode switch to row format with temp table lead to wrong result

    • Already fixed in: 5.1

  • Bug#28421: Infinite loop on slave relay logs

    • Target fix: 5.1

  • Bug#46130: Slave does not correctly handle "expected errors"

    • Target fix: 5.1

  • Bug#38174: secure-file-priv breaks LOAD DATA INFILE replication in statement mode

    • Target fix: 5.1

  • Bug#49222: Mark RAND() as unsafe

    • Target fix: 5.1

  • Bug#38240: crash in rotate_relay_log during 'flush logs' and 'kill' or shutdown of server

    • Target fix: 5.1

  • Bug#50078: Executing REPAIR on master with broken table does not correctly update slave

    • Target fix: 5.1

  • Bug#44179: reset slave crashes in my_error when reset_logs returns non-zero

    • Target fix: 5.1

  • Bug#42415: UPDATE with LIMIT clause unsafe for statement format even when ORDER BY PK

    • Target fix: 5.1

  • Bug#51019: crash/invalid memory accesses after an error occurs with binlogging

    • Target fix: 5.1

  • Bug#47995: Mark system functions as unsafe

    • Target fix: 5.1

  • Bug#40482: server/mysqlbinlog crashes when reading invalid Incident_log_event

    • Target fix: 5.1

  • Bug#42829: binlogging enabled for all schemas regardless of binlog-db-db / binlog-ignore-db

    • Target fix: 5.1

  • Bug#44442: Incident events are silent in mysqlbinlog output

    • Target fix: 5.1

  • Bug#44331: Restore of database with events produces warning in replication

    • Target fix: 5.1

  • Bug#31240: load data infile replication between (4.0 or 4.1) and 5.1 fails

    • Target fix: 5.1

  • Bug#51089: SHOW STATUS LIKE 'Slave_running' is not compatible with `SHOW SLAVE STATUS'

    • Target fix: 5.1

  • Bug#50414: valgrind warnings: invalid file descriptor -1 in syscall write()/read()

    • Target fix: 5.1

  • Bug#46364: MyISAM transbuffer problems (NTM problem)

    • Target fix: 5.1

  • Bug#38934: slave slave until does not work with --replicate-same-server-id

    • Target fix: 5.1

  • Bug#38205: Row-based Replication (RBR) causes inconsistencies: HA_ERR_FOUND_DUPP_KEY

    • Target fix: 5.1

  • Bug#44270: RESET SLAVE does not reset Last_IO_Error or Last_IO_Errno

    • Target fix: 5.1

  • Bug#46129: Failing mixed stm (with trans and non-trans tables) causes wrong seq in binlog

    • Already fixed in: 5.1

  • Bug#45242: crash on win in mysql_close() -> free()

    • Target fix: 5.1

  • Bug#41961: Some log_event types do not skip post-header when reading

    • Target fix: 5.1

  • Bug#46030: rpl_truncate_3innodb causes server crash on windows

    • Target fix: 5.1

  • Bug#36763: TRUNCATE TABLE fails to replicate when stmt-based binlogging is not supported.

    • Target fix: 5.1

  • Bug#41166: stored function requires "deterministic" if binlog_format is "statement"

    • Already fixed in: 5.1

  • Bug#46014: rpl_stm_reset_slave crashes the server sporadically in pb2

    • Target fix: 5.1

  • Bug#48340: rpl_cross_version: Found warnings/errors in server log file!

    • Target fix: 5.1

  • Bug#45677: Slave stops with Duplicate entry for key PRIMARY when using trigger

    • Target fix: 5.1

  • Bug#45694: Deadlock in replicated statement is not retried

    • Target fix: 5.1

  • Bug#34628: LOAD DATA CONCURRENT INFILE drops CONCURRENT in binary log

    • Target fix: 5.1

  • Bug#48321: CURRENT_USER() incorrectly replicated for DROP/RENAME USER;REVOKE;GRANT;ALTER EV

    • Target fix: 5.1

  • Bug#39393: slave-skip-errors does not work when using ROW based replication

    • Target fix: 5.1

  • Bug#42861: Assigning invalid directories to --slave-load-tmpdir crashes the slave

    • Target fix: 5.1

Server: SE API

  • Bug#39053: UNISTALL PLUGIN does not allow the storage engine to cleanup open connections

    • Target fix: 5.1

  • Bug#46599: ALTER TABLE causes inconsistent values for foreign keys

    • Target fix: 5.1

Server: SP

  • Bug#42188: crash and/or memory corruption with user variables in trigger

    • Target fix: 5.1.32

  • Bug#38066: Events log 'note' level messages by default in the error log

    • Target fix: 5.1.31

  • Bug#40770: Server Crash when running with triggers including variable settings (rpl_sys)

    • The crash is observed when the trigger/SP assigns values to user variables. The crash can be avoided by using local variables instead of user variables in the trigger/SP code.

      Target fix: 5.1.31

  • Bug#45235: 5.1 does not support 5.0-only syntax triggers in any way

    • Target fix: 5.1

  • Bug#45261: Crash, stored procedure + decimal

    • Target fix: 5.1

  • Bug#47627: SET @@{global.session}.local_variable in stored routine causes crash

    • Target fix: 5.1

  • Bug#43884: SP + filename param as TEXT + LOAD_FILE inside, causes valgrind warnings in PB

    • Target fix: 5.1

  • Bug#47870: Bogus "The table mysql.proc is missing,..."

    • Target fix: 5.1

  • Bug#41726: upgrade from 5.0 to 5.1.30 crashes if you didn't run mysql_upgrade

    • Target fix: 5.1

  • Bug#43587: Putting event_scheduler=1 in init SQL file crashes mysqld

    • Already fixed in: 5.1

  • Bug#44798: MySQL engine crashes when creating stored procedures with execute_priv=N

    • Target fix: 5.1

  • Bug#36540: CREATE EVENT and ALTER EVENT statements fail with large server_id

    • Target fix: 5.1

  • Bug#34895: 'show procedure status' or 'show function status' + 'flush tables' crashes

    • Target fix: 5.1

Server: Tests

  • Bug#48646: mysql-test main.log_tables-big fails on 5.1.40

    • Target fix: 5.1

  • Bug#48758: mysqltest crashes on sys_vars.collation_server_basic in gcov builds

    • Target fix: 5.1

Server: Types

  • Bug#49517: Inconsistent behavior while using NULLable BIGINT and INT columns in comparison

    • Target fix: 5.1.43

  • Bug#49480: WHERE using YEAR columns returns unexpected results

    • Target fix: 5.1.42

  • Bug#49489: Comparison using a DOUBLE column started producing different results

    • Target fix: 5.1.42

  • Bug#47925: regression of range optimizer and date comparison in 5.1.39!

    • Target fix: 5.1.41

  • Bug#42014: Crash, name_const with collate

    • Target fix: 5.1.32

  • Bug#43668: Server returns wrong MAX() value with year(2) type and no index

    • Target fix: 5.1

  • Bug#49478: year(2) datatype index anomalies

    • Target fix: 5.1

  • Bug#35558: Wrong server metadata blows up the client

    • Target fix: 5.1

  • Bug#45262: Bad effects with CREATE TABLE and DECIMAL

    • Target fix: 5.1

  • Bug#40625: Concat fails on DOUBLE values in a Stored Procedure, while DECIMAL works

    • Target fix: 5.1

  • Bug#48294: assertion when creating a view based on some row() construct in select query

    • Target fix: 5.1

  • Bug#50591: bit(31) causes Duplicate entry '1-NULL' for key 'group_key'

    • Target fix: 5.1

  • Bug#49910: Behavioural change in SELECT/WHERE on YEAR(4) data type

Server: Views

  • Bug#47734: Assertion failed: ! is_set() when locking a view with non-existing definer

    • Target fix: 5.1

  • Bug#46384: mysqld segfault when trying to create table with same name as existing view

    • Target fix: 5.1

  • Bug#40825: Error 1356 while selecting from a view with a "HAVING" clause though query works

    • Target fix: 5.1

  • Bug#47736: killing a select from a view when the view is processing a function, asserts

    • Target fix: 5.1

  • Bug#44860: ALTER TABLE on view crashes server

    • Target fix: 5.1

  • Bug#46616: Assertion `!table->auto_increment_field_not_null' on view manipulations

    • Target fix: 5.1

  • Bug#45806: crash when replacing into a view with a join!

    • Target fix: 5.1

Server: XML

  • Bug#43183: ExctractValue() brings result list in missorder

    • Target fix: 5.1.36 5.0

  • Bug#42495: updatexml: Assertion failed: xpath->context, file .\item_xmlfunc.cc, line 2507

    • Target fix: 5.1.32

  • Bug#38227: EXTRACTVALUE doesn't work with DTD declarations

    • Target fix: 5.1

Tests: Replication

  • Bug#45511: rpl.rpl_binlog_corruption fails with warning messages in Valgrind

    • Target fix: 5.1


  • Bug#44091: libmysqld gets stuck waiting on mutex on initialization

    • Target fix: 5.1.35

  • Bug#43733: Select on processlist let the embedded server crash (concurrent_innodb_safelog)

    • Target fix: 5.1

  • Bug#39289: libmysqld.a calls exit() upon error

    • Target fix: 5.1

  • Bug#38522: 5 seconds delay when closing application using embedded server

    • Target fix: 5.1

  • Bug#37995: Error message truncation in test "innodb" in embedded mode

    • Target fix: 5.1

  • Bug#47416: Build failure on OS X 10.6: duplicate symbol _timed_mutexes

    • Target fix: 5.1

  • Bug#43706: libmysqld segfaults when re-intialised

    • Target fix: 5.1

  • Bug#50667: The InnoDB plugin prevents initialization of the "embedded" server

    • Target fix: 5.1

  • Bug#38293: Libmysqld crash in mysql_library_init if language file missing

    • Target fix: 5.1

  • Bug#34517: SHOW GLOBAL STATUS does not work properly in embedded server.

    • Target fix: 5.1

B.5.8.2. Additional Known Issues

The following problems are also known and fixing them is also a high priority:

  • MySQL Cluster fails to recover from an out-of-disk failure when using disk data. (Bug#17614)

  • Subquery optimization for IN is not as effective as for =.

  • Even if you use lower_case_table_names=2 (which enables MySQL to remember the case used for databases and table names), MySQL does not remember the case used for database names for the function DATABASE() or within the various logs (on case-insensitive systems).

  • Dropping a FOREIGN KEY constraint doesn't work in replication because the constraint may have another name on the slave.

  • REPLACE (and LOAD DATA with the REPLACE option) does not trigger ON DELETE CASCADE.

  • DISTINCT with ORDER BY doesn't work inside GROUP_CONCAT() if you don't use all and only those columns that are in the DISTINCT list.

  • If one user has a long-running transaction and another user drops a table that is updated in the transaction, there is small chance that the binary log may contain the DROP TABLE command before the table is used in the transaction itself. We plan to fix this by having the DROP TABLE command wait until the table is not being used in any transaction.

  • When inserting a big integer value (between 263 and 264–1) into a decimal or string column, it is inserted as a negative value because the number is evaluated in a signed integer context.

  • FLUSH TABLES WITH READ LOCK does not block COMMIT if the server is running without binary logging, which may cause a problem (of consistency between tables) when doing a full backup.

  • ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE may cause problems on tables for which you are using INSERT DELAYED.

  • Performing LOCK TABLE ... and FLUSH TABLES ... doesn't guarantee that there isn't a half-finished transaction in progress on the table.

  • Replication uses query-level logging: The master writes the executed queries to the binary log. This is a very fast, compact, and efficient logging method that works perfectly in most cases.

    It is possible for the data on the master and slave to become different if a query is designed in such a way that the data modification is nondeterministic (generally not a recommended practice, even outside of replication).

    For example:

    • CREATE TABLE ... SELECT or INSERT ... SELECT statements that insert zero or NULL values into an AUTO_INCREMENT column.

    • DELETE if you are deleting rows from a table that has foreign keys with ON DELETE CASCADE properties.

    • REPLACE ... SELECT, INSERT IGNORE ... SELECT if you have duplicate key values in the inserted data.

    If and only if the preceding queries have no ORDER BY clause guaranteeing a deterministic order.

    For example, for INSERT ... SELECT with no ORDER BY, the SELECT may return rows in a different order (which results in a row having different ranks, hence getting a different number in the AUTO_INCREMENT column), depending on the choices made by the optimizers on the master and slave.

    A query is optimized differently on the master and slave only if:

    • The table is stored using a different storage engine on the master than on the slave. (It is possible to use different storage engines on the master and slave. For example, you can use InnoDB on the master, but MyISAM on the slave if the slave has less available disk space.)

    • MySQL buffer sizes (key_buffer_size, and so on) are different on the master and slave.

    • The master and slave run different MySQL versions, and the optimizer code differs between these versions.

    This problem may also affect database restoration using mysqlbinlog|mysql.

    The easiest way to avoid this problem is to add an ORDER BY clause to the aforementioned nondeterministic queries to ensure that the rows are always stored or modified in the same order.

    In future MySQL versions, we will automatically add an ORDER BY clause when needed.

The following issues are known and will be fixed in due time:

  • Log file names are based on the server host name (if you don't specify a file name with the startup option). You have to use options such as --log-bin=old_host_name-bin if you change your host name to something else. Another option is to rename the old files to reflect your host name change (if these are binary logs, you need to edit the binary log index file and fix the binary log file names there as well). See Section 5.1.2, “Server Command Options”.

  • mysqlbinlog does not delete temporary files left after a LOAD DATA INFILE command. See Section 4.6.7, “mysqlbinlog — Utility for Processing Binary Log Files”.

  • RENAME doesn't work with TEMPORARY tables or tables used in a MERGE table.

  • Due to the way table format (.frm) files are stored, you cannot use character 255 (CHAR(255)) in table names, column names, or enumerations. This is scheduled to be fixed in version 5.1 when we implement new table definition format files.

  • When using SET CHARACTER SET, you can't use translated characters in database, table, and column names.

  • You can't use “_” or “%” with ESCAPE in LIKE ... ESCAPE.

  • You cannot build the server in another directory when using MIT-pthreads. Because this requires changes to MIT-pthreads, we are not likely to fix this. See Section 2.3.5, “MIT-pthreads Notes”.

  • BLOB and TEXT values can't reliably be used in GROUP BY, ORDER BY or DISTINCT. Only the first max_sort_length bytes are used when comparing BLOB values in these cases. The default value of max_sort_length is 1024 and can be changed at server startup time or at runtime.

  • Numeric calculations are done with BIGINT or DOUBLE (both are normally 64 bits long). Which precision you get depends on the function. The general rule is that bit functions are performed with BIGINT precision, IF() and ELT() with BIGINT or DOUBLE precision, and the rest with DOUBLE precision. You should try to avoid using unsigned long long values if they resolve to be larger than 63 bits (9223372036854775807) for anything other than bit fields.

  • You can have up to 255 ENUM and SET columns in one table.

  • In MIN(), MAX(), and other aggregate functions, MySQL currently compares ENUM and SET columns by their string value rather than by the string's relative position in the set.

  • mysqld_safe redirects all messages from mysqld to the mysqld log. One problem with this is that if you execute mysqladmin refresh to close and reopen the log, stdout and stderr are still redirected to the old log. If you use the general query log extensively, you should edit mysqld_safe to log to host_name.err instead of host_name.log so that you can easily reclaim the space for the old log by deleting it and executing mysqladmin refresh.

  • In an UPDATE statement, columns are updated from left to right. If you refer to an updated column, you get the updated value instead of the original value. For example, the following statement increments KEY by 2, not 1:

    mysql> UPDATE tbl_name SET KEY=KEY+1,KEY=KEY+1;
  • You can refer to multiple temporary tables in the same query, but you cannot refer to any given temporary table more than once. For example, the following doesn't work:

    mysql> SELECT * FROM temp_table, temp_table AS t2;
    ERROR 1137: Can't reopen table: 'temp_table'
  • The optimizer may handle DISTINCT differently when you are using “hidden” columns in a join than when you are not. In a join, hidden columns are counted as part of the result (even if they are not shown), whereas in normal queries, hidden columns don't participate in the DISTINCT comparison. We will probably change this in the future to never compare the hidden columns when executing DISTINCT.

    An example of this is:

    SELECT DISTINCT mp3id FROM band_downloads
           WHERE userid = 9 ORDER BY id DESC;


    SELECT DISTINCT band_downloads.mp3id
           FROM band_downloads,band_mp3
           WHERE band_downloads.userid = 9
           AND band_mp3.id = band_downloads.mp3id
           ORDER BY band_downloads.id DESC;

    In the second case, using MySQL Server 3.23.x, you may get two identical rows in the result set (because the values in the hidden id column may differ).

    Note that this happens only for queries where that do not have the ORDER BY columns in the result.

  • If you execute a PROCEDURE on a query that returns an empty set, in some cases the PROCEDURE does not transform the columns.

  • Creation of a table of type MERGE doesn't check whether the underlying tables are compatible types.

  • If you use ALTER TABLE to add a UNIQUE index to a table used in a MERGE table and then add a normal index on the MERGE table, the key order is different for the tables if there was an old, non-UNIQUE key in the table. This is because ALTER TABLE puts UNIQUE indexes before normal indexes to be able to detect duplicate keys as early as possible.

  Ñîçäàíèå ñàéòîâ | |