Released on 8 Apr 2008
MySQL 5.1.24 Changelog
  • Functionality Added or Changed

  • Bugs Fixed

Functionality Added or Changed

  • Important Change; MySQL Cluster; Packaging: Beginning with this release, standard MySQL 5.1 binaries are no longer built with support for the NDBCLUSTER storage engine, and the NDBCLUSTER code included in 5.1 mainline sources is no longer guaranteed to be maintained or supported. Those using MySQL Cluster in MySQL 5.1.23 and earlier MySQL 5.1 mainline releases should upgrade to MySQL Cluster NDB 6.2.15 or a later MySQL Cluster NDB 6.2 or 6.3 release. (Bug #36193)

  • Important Change: The FEDERATED storage engine is not included in binary distributions of MySQL 5.1.24. (It will be included again in 5.1.25.)

  • Replication: Introduced the slave_exec_mode system variable to control whether idempotent or strict mode is used for replication conflict resolution. Idempotent mode suppresses duplicate-key, no-key-found, and some other errors, and is needed for circular replication, multi-master replication, and some other complex replication setups when using MySQL Cluster, where idempotent mode is the default. However, strict mode is the default for storage engines other than NDB. (Bug #31609)

  • Replication: When running the server with --binlog-format=MIXED or --binlog-format=STATEMENT, a query that referred to a system variable used the slave's value when replayed on the slave. This meant that, if the value of a system variable was inserted into a table, the slave differed from the master. Now, statements that refer to a system variable are marked as unsafe, which means that:

    • When the server is using --binlog-format=MIXED, the row-based format is used automatically to replicate these statements.

    • When the server is using --binlog-format=STATEMENT, these statements produce a warning.

    (Bug #31168)

    References: See also Bug #34732.

  • The PROCESS privilege now is required to start or stop the InnoDB monitor tables (see InnoDB Monitors). Previously, no privilege was required. (Bug #34053)

  • For binary .tar.gz packages, mysqld and other binaries now are compiled with debugging symbols included to enable easier use with a debugger. If you do not need debugging symbols and are short on disk space, you can use strip to remove the symbols from the binaries. (Bug #33252)

  • Formerly, when the MySQL server crashed, the generated stack dump was numeric and required external tools to properly resolve the names of functions. This is not very helpful to users having a limited knowledge of debugging techniques. In addition, the generated stack trace contained only the names of functions and was formatted differently for each platform due to different stack layouts.

    Now it is possible to take advantage of newer versions of the GNU C Library provide a set of functions to obtain and manipulate stack traces from within the program. On systems that use the ELF binary format, the stack trace contains important information such as the shared object where the call was generated, an offset into the function, and the actual return address. Having the function name also makes possible the name demangling of C++ functions.

    The library generates meaningful stack traces on the following platforms: i386, x86_64, PowerPC, IA64, Alpha, and S390. On other platforms, a numeric stack trace is still produced, and the use of the resolve_stack_dump utility is still required. (Bug #31891)

  • mysqltest now has mkdir and rmdir commands for creating and removing directories. (Bug #31004)

  • The server uses less memory when loading privileges containing table grants. (Patch provided by Google.) (Bug #25175)

  • Added the Uptime_since_flush_status status variable, which indicates the number of seconds since the most recent FLUSH STATUS statement. (Community contribution by Jeremy Cole) (Bug #24822)

  • SHOW OPEN TABLES now supports FROM and LIKE clauses. (Bug #12183)

  • The innodb_flush_method value, fdatasync, has been renamed to fsync. This change is to avoid confusing the fdatasync option name with the fdatasync() system call, which is no longer used by InnoDB. As of MySQL 3.23.41, InnoDB uses an fsync() system call instead of fdatasync() as the default InnoDB flush method.

  • The new read-only global system variables report_host, report_password, report_port, and report_user system variables provide runtime access to the values of the corresponding --report-host, --report-password, --report-port, and --report-user options.

  • The use of InnoDB hash indexes now can be controlled by setting the new innodb_adaptive_hash_index system variable at server startup. By default, this variable is enabled. See Adaptive Hash Indexes.

Bugs Fixed

  • Security Fix; Important Change: It was possible to circumvent privileges through the creation of MyISAM tables employing the DATA DIRECTORY and INDEX DIRECTORY options to overwrite existing table files in the MySQL data directory. Use of the MySQL data directory in DATA DIRECTORY and INDEX DIRECTORY is no longer permitted. This is now also true of these options when used with partitioned tables and individual partitions of such tables.


    Additional fixes were made in MySQL 5.1.28, 5.1.41.

    (Bug #32167, CVE-2008-2079)

    References: See also Bug #39277.

  • Security Fix: A client that connects to a malicious server could be tricked by the server into sending files from the client host to the server. This occurs because the libmysqlclient client library would respond to a FETCH LOCAL FILE request from the server even if the request is sent for statements from the client other than LOAD DATA LOCAL INFILE. The client library has been modified to respond to a FETCH LOCAL FILE request from the server only if is sent in response to a LOAD DATA LOCAL INFILE statement from the client.

    The client library now also checks whether CLIENT_LOCAL_FILE is set and refuses to send a local file if not.


    Binary distributions ship with the local-infile capability enabled. Applications that do not use this functionality should disable it to be safe.

    (Bug #29605)

  • Security Enhancement; Important Change: On Windows Vista and Windows Server 2008, a user without administrative privileges does not have write permissions to the Program Files directory where MySQL and the associated data files are normally installed. Using data files located in the standard Program Files installation directory could therefore cause MySQL to fail, or lead to potential security issues in an installed instance.

    To address the problem, on Windows XP, Windows Vista and Windows Server 2008, the datafiles and data file configuration are now set to the Microsoft recommended AppData folder. The AppData folder is typically located within the user's home directory.


    When upgrading an existing 5.1.23 or 6.0.4 installation of MySQL you must take a backup of your data and configuration file (my.ini before installing the new version. To migrate your data, either extract the data and re-import (using mysqldump, then upgrade and re-import using mysql), or back up your data, upgrade to the new version, and copy your existing data files from your old datadir directory to the new directory located within AppData.

    Failure to back up your data and follow these procedures may lead to data loss.

    (Bug #34593)

  • Performance: InnoDB adaptive hash latches could be held too long during filesort operations, resulting in a server crash. Now the hash latch is released when a query on InnoDB tables performs a filesort. This eliminates the crash and may provide significant performance improvements on systems on which many queries using filesorts with temporary tables are being performed. (Bug #32149)

  • Performance: InnoDB exhibited thread thrashing with more than 50 concurrent connections under an update-intensive workload. (Bug #22868)

  • Incompatible Change: In MySQL 5.1.23, the last_errno and last_error members of the NET structure in mysql_com.h were renamed to client_last_errno and client_last_error. This was found to cause problems for connectors that use the internal NET structure for error handling. The change has been reverted. (Bug #34655)

    References: See also Bug #12713.

  • Incompatible Change: It was possible to use FRAC_SECOND as a synonym for MICROSECOND with DATE_ADD(), DATE_SUB(), and INTERVAL; now, using FRAC_SECOND with anything other than TIMESTAMPADD() or TIMESTAMPDIFF() produces a syntax error.

    It is now possible (and preferable) to use MICROSECOND with TIMESTAMPADD() and TIMESTAMPDIFF(), and FRAC_SECOND is now deprecated. (Bug #33834)

  • Incompatible Change: The UPDATE statement permitted NULL to be assigned to NOT NULL columns (the implicit default value for the column data type was assigned). This was changed so that on error occurs.

    This change was reverted, because the original report was determined not to be a bug: Assigning NULL to a NOT NULL column in an UPDATE statement should produce an error only in strict SQL mode and set the column to the implicit default with a warning otherwise, which was the original behavior. See Data Type Default Values, and Bug #39265. (Bug #33699)

  • Incompatible Change: For packages that are built within their own prefix (for example, /usr/local/mysql) the plugin directory will be lib/plugin. For packages that are built to be installed into a system-wide prefix (such as RPM packages with a prefix of /usr), the plugin directory will be lib/mysql/plugin to ensure a clean /usr/lib hierarchy. In both cases, the $pkglibdir configuration setting is used at build time to set the plugin directory.

    The current plugin directory location is available as the value of the plugin_dir system variable as before, but the mysql_config script now has a --plugindir option that can be used externally to the server by third-party plugin writers to obtain the default plugin directory path name and configure their installation directory appropriately. (Bug #31736)

  • Incompatible Change: The -, *, and / operators and the functions POW() and EXP() could misbehave when used with floating-point numbers. Previously they might return +INF, -INF, or NaN in cases of numeric overflow (including that caused by division by zero) or when invalid arguments were used. Now NULL is returned in all such cases. (Bug #31236)

  • Incompatible Change: Previously, the parser accepted the ODBC { OJ ... LEFT OUTER JOIN ...} syntax for writing left outer joins. The parser now permits { OJ ... } to be used to write other types of joins, such as INNER JOIN or RIGHT OUTER JOIN. This helps with compatibility with some third-party applications, but is not official ODBC syntax.

    A consequence of this change is that the parser no longer permits nested { OJ ... } constructs (which are not legal ODBC syntax, anyway). Queries that use such constructs should be rewritten. For example, this query is now produces an error:

    SELECT * FROM   {OJ      {OJ a LEFT OUTER JOIN b ON a.a1=b.a1}      LEFT OUTER JOIN c ON b.b1 = c.b1};

    That can be replaced by any of the following rewrites:

    SELECT * FROM    {OJ a LEFT OUTER JOIN b          LEFT OUTER JOIN c ON b.b1 = c.b1 ON a.a1=b.a1};SELECT * FROM   {OJ a LEFT OUTER JOIN b ON a.a1=b.a1         LEFT OUTER JOIN c ON b.b1 = c.b1};SELECT * FROM     a LEFT OUTER JOIN b ON a.a1=b.a1 LEFT OUTER JOIN c ON b.b1 = c.b1;

    The first two are legal according to ODBC, and you nest the joins inside a single { OJ ...} clause. The third is standard SQL syntax, without ODBC decoration. It can be used with parentheses to emphasize the evaluation order:

    SELECT * FROM     ((a LEFT OUTER JOIN b ON a.a1=b.a1)         LEFT OUTER JOIN c ON b.b1 = c.b1);

    (Bug #28317)

  • Incompatible Change: The utf8_general_ci and ucs2_general_ci collations did not sort the letter "U+00DF SHARP S" equal to 's'.

    As a result of this bug fix, indexes must be rebuilt for columns that use the utf8_general_ci or ucs2_general_ci collation for columns that contain SHARP S. See Checking Whether Tables or Indexes Must Be Rebuilt. (Bug #27877)

    References: See also Bug #37046.

  • Important Change; Partitioning: The following statements did not function correctly with corrupted or crashed tables and have been disabled:





    ALTER TABLE ... REBUILD PARTITION is unaffected by this change and continues to be available. This statement and ALTER TABLE ... REORGANIZE PARTITION may be used to analyze and optimize partitioned tables, since these operations cause the partition files to be rebuilt. (Bug #20129)

    References: See also Bug #39434.

  • Important Change; Replication: When the master crashed during an update on a transactional table while in autocommit mode, the slave failed. This fix causes every transaction (including autocommit transactions) to be recorded in the binary log as starting with a BEGIN and ending with a COMMIT or ROLLBACK.


    The current fix does not cause nontransactional changes to be wrapped in BEGIN ... COMMIT or BEGIN ... ROLLBACK when written to the binary log. For this purpose, any statements affecting tables using a nontransactional storage engine such as MyISAM are regarded as nontransactional, even when autocommit is enabled.

    (Bug #26395)

    References: See also Bug #29288, Bug #49522.

  • Important Change: InnoDB free space information is now shown in the Data_free column of SHOW TABLE STATUS and in the DATA_FREE column of the INFORMATION_SCHEMA.TABLES table. (Bug #32440)

    References: See also Bug #11379.

  • Important Change: The server handled truncation of values having excess trailing spaces into CHAR, VARCHAR, and TEXT columns in different ways. This behavior has now been made consistent for columns of all three of these types, and now follows the existing behavior of VARCHAR columns in this regard; that is, a Note is always issued whenever such truncation occurs.

    This change does not affect columns of these three types when using a binary encoding; BLOB columns are also unaffected by the change, since they always use a binary encoding. (Bug #30059)

  • Important Change: An AFTER UPDATE trigger was not invoked when the UPDATE did not make any changes to the table for which the trigger was defined. Now AFTER UPDATE triggers behave the same in this regard as do BEFORE UPDATE triggers, which are invoked whether the UPDATE makes any changes in the table or not. (Bug #23771)

  • Important Note; Replication: Network timeouts between the master and the slave could result in corruption of the relay log. This fix rectifies a long-standing replication issue when using unreliable networks, including replication over wide area networks such as the Internet. If you experience reliability issues and see many You have an error in your SQL syntax errors on replication slaves, we strongly recommend that you upgrade to a MySQL version which includes this fix. (Bug #26489)

  • Partitioning: In some cases, matching rows from a partitioned MyISAM using a BIT column as the primary key were not found by queries. (Bug #34358)

  • Partitioning: Enabling innodb_file_per_table produced problems with partitioning and tablespace operations on partitioned InnoDB tables, in some cases leading to corrupt partitions or causing the server to crash. (Bug #33429)

  • Partitioning: A table defined using PARTITION BY KEY and having a BIT column referenced in the partitioning key did not behave correctly; some rows could be inserted into the wrong partition, causing wrong results to be returned from queries. (Bug #33379)

  • Partitioning: For InnoDB tables, there was a race condition involving the data dictionary and repartitioning. (Bug #33349)

  • Partitioning: When ALTER TABLE DROP PARTITION was executed on a table on which there was a trigger, the statement failed with an error. This occurred even if the trigger did not reference any tables. (Bug #32943)

  • Partitioning: Currently, all partitions of a partitioned table must use the same storage engine. One may optionally specify the storage engine on a per-partition basis; however, where this is the done, the storage engine must be the same as used by the table as a whole. ALTER TABLE did not enforce these rules correctly, the result being that inaccurate error messages were shown when trying to use the statement to change the storage engine used by an individual partition or partitions. (Bug #31931)

  • Partitioning: Using the DATA DIRECTORY and INDEX DIRECTORY options for partitions with CREATE TABLE or ALTER TABLE statements appeared to work on Windows, although they are not supported by MySQL on Windows systems, and subsequent attempts to use the tables referenced caused errors. Now these options are disabled on Windows, and attempting to use them generates a warning. (Bug #30459)

  • Replication: The failure of a CREATE TABLE ... ENGINE=InnoDB ... SELECT statement caused the slave to lose data. (Bug #35762)

  • Replication: When using row-based replication, a slave could crash at startup because it received a row-based replication event that InnoDB could not handle due to an incorrect test of the query string provided by MySQL, which was NULL for row-based replication events. (Bug #35226)

  • Replication: insert_id was not written to the binary log for inserts into BLACKHOLE tables. (Bug #35178)

  • Replication: When using statement-based replication and a DELETE, UPDATE, or INSERT ... SELECT statement using a LIMIT clause is encountered, a warning that the statement is not safe to replicate in statement mode is now issued; when using MIXED mode, the statement is now replicated using the row-based format. (Bug #34768)

  • Replication: mysqlbinlog did not output the values of auto_increment_increment and auto_increment_offset when both were equal to their default values (for both of these variables, the default is 1). This meant that a binary log recorded by a client using the defaults for both variables and then replayed on another client using its own values for either or both of these variables produced erroneous results. (Bug #34732)

    References: See also Bug #31168.

  • Replication: When the Windows version of mysqlbinlog read 4.1 binary logs containing LOAD DATA INFILE statements, it output backslashes as path separators, causing problems for client programs expecting forward slashes. In such cases, it now converts \\ to / in directory paths. (Bug #34355)

  • Replication: SHOW SLAVE STATUS failed when slave I/O was about to terminate. (Bug #34305)

  • Replication: The character sets and collations used for constant identifiers in stored procedures were not replicated correctly. (Bug #34289)

  • Replication: mysqlbinlog from a 5.1 or later MySQL distribution could not read binary logs generated by a 4.1 server when the logs contained LOAD DATA INFILE statements. (Bug #34141)

    References: This bug was introduced by Bug #32407.

  • Replication: A CREATE USER, DROP USER, or RENAME USER statement that fails on the master, or that is a duplicate of any of these statements, is no longer written to the binary log; previously, either of these occurrences could cause the slave to fail. (Bug #33862)

    References: See also Bug #29749.

  • Replication: SHOW BINLOG EVENTS could fail when the binary log contained one or more events whose size was close to the value of max_allowed_packet. (Bug #33413)

  • Replication: An extraneous ROLLBACK statement was written to the binary log by a connection that did not use any transactional tables. (Bug #33329)

  • Replication: mysqlbinlog failed to release all of its memory after terminating abnormally. (Bug #33247)

  • Replication: When a stored routine or trigger, running on a master that used MySQL 5.0 or MySQL 5.1.11 or earlier, performed an insert on an AUTO_INCREMENT column, the insert_id value was not replicated correctly to a slave running MySQL 5.1.12 or later (including any MySQL 6.0 release). (Bug #33029)

    References: See also Bug #19630.

  • Replication: The error message generated due to lack of a default value for an extra column was not sufficiently informative. (Bug #32971)

  • Replication: When a user variable was used inside an INSERT statement, the corresponding binary log event was not written to the binary log correctly. (Bug #32580)

  • Replication: When using row-based replication, deletes from a table with a foreign key constraint failed on the slave. (Bug #32468)

  • Replication: The --base64-output option for mysqlbinlog was not honored for all types of events. This interfered in some cases with performing point-in-time recovery. (Bug #32407)

    References: See also Bug #46640, Bug #34777.

  • Replication: SQL statements containing comments using -- syntax were not replayable by mysqlbinlog, even though such statements replicated correctly. (Bug #32205)

  • Replication: When using row-based replication from a master running MySQL 5.1.21 or earlier to a slave running 5.1.22 or later, updates of integer columns failed on the slave with Error in Unknown event: row application failed. (Bug #31583)

    References: This bug was introduced by Bug #21842.

  • Replication: Replicating write, update, or delete events from a master running MySQL 5.1.15 or earlier to a slave running 5.1.16 or later caused the slave to crash. (Bug #31581)

  • Replication: When using row-based replication, the slave stopped when attempting to delete nonexistent rows from a slave table without a primary key. In addition, no error was reported when this occurred. (Bug #31552)

  • Replication: Errors due to server ID conflicts were reported only in the slave's error log; now these errors are also shown in the Server_IO_State column in the output of SHOW SLAVE STATUS. (Bug #31316)

  • Replication: STOP SLAVE did not stop connection attempts properly. If the I/O slave thread was attempting to connect, STOP SLAVE waited for the attempt to finish, sometimes for a long period of time, rather than stopping the slave immediately. (Bug #31024)

    References: See also Bug #30932.

  • Replication: Issuing a DROP VIEW statement caused replication to fail if the view did not actually exist. (Bug #30998)

  • Replication: Replication of LOAD DATA INFILE could fail when read_buffer_size was larger than max_allowed_packet. (Bug #30435)

  • Replication: Replication crashed with the NDB storage engine when mysqld was started with --character-set-server=ucs2. (Bug #29562)

  • Replication: When using row-based logging, nontransactional updates were not written atomically to the binary log. If a nontransactional update was made concurrently with some other update, this could cause incorrect binary logging, and consequently the slave could diverge from the master. Now, nontransactional updates are always written atomically to the binary log. (Bug #29020)

  • Replication: Setting server_id did not update its value for the current session. (Bug #28908)

  • Replication: Some older servers wrote events to the binary log using different numbering from what is currently used, even though the file format number in the file is the same. Slaves running MySQL 5.1.18 and later could not read these binary logs properly. Binary logs from these older versions now are recognized and event numbers are mapped to the current numbering so that they can be interpreted properly. (Bug #27779, Bug #32434)

    References: This bug was introduced by Bug #22583.

  • Replication: MASTER_POS_WAIT() did not return NULL when the server was not a slave. (Bug #26622)

  • Replication: The nonspecific error message Wrong parameters to function register_slave resulted when START SLAVE failed to register on the master due to excess length of any the slave server options --report-host, --report-user, or --report-password. An error message specific to each of these options is now returned in such cases. The new error messages are:

    • Failed to register slave: too long 'report-host'

    • Failed to register slave: too long 'report-user'

    • Failed to register slave; too long 'report-password'

    (Bug #22989)

    References: See also Bug #19328.

  • Replication: PURGE BINARY LOGS TO and PURGE BINARY LOGS BEFORE did not handle missing binary log files correctly or in the same way. Now for both of these statements, if any files listed in the .index file are missing from the file system, the statement fails with an error. (Bug #18199, Bug #18453)

  • Replication: START SLAVE UNTIL MASTER_LOG_POS=position issued on a slave that was using --log-slave-updates and that was involved in circular replication would cause the slave to run and stop one event later than that specified by the value of position. (Bug #13861)

  • Manually replacing a binary log file with a directory having the same name caused an error that was not handled correctly. (Bug #35675)

  • Using LOAD DATA INFILE with a view could crash the server. (Bug #35469)

  • Selecting from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS could cause a server crash. (Bug #35406)

    References: See also Bug #35108.

  • For a TEMPORARY table, DELETE with no WHERE clause could fail when preceded by DELETE statements with a WHERE clause. (Bug #35392)

  • If the server crashed with an InnoDB error due to unavailability of undo slots, errors could persist during rollback when the server was restarted: There are two UNDO slot caches (for INSERT and UPDATE). If all slots end up in one of the slot caches, a request for a slot from the other slot cache failed. This can happen if the request is for an UPDATE slot and all slots are in the INSERT slot cache, or vice versa. (Bug #35352)

  • In some cases, when too many clients tried to connect to the server, the proper SQLSTATE code was not returned. (Bug #35289)

  • Memory-allocation failures for attempts to set key_buffer_size to large values could result in a server crash. (Bug #35272)

  • For InnoDB tables, ALTER TABLE DROP failed if the name of the column to be dropped began with foreign. (Bug #35220)

  • Queries could return different results depending on whether ORDER BY columns were indexed. (Bug #35206)

  • When a view containing a reference to DUAL was created, the reference was removed when the definition was stored, causing some queries against the view to fail with invalid SQL syntax errors. (Bug #35193)

  • SELECT ... FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS caused the server to crash if the table referenced by a foreign key had been dropped. This issue was observed on Windows platforms only. (Bug #35108)

    References: See also Bug #35406.

  • Debugging symbols were missing for some executables in Windows binary distributions. (Bug #35104)

  • Nonconnection threads were being counted in the value of the Max_used_connections status variable. (Bug #35074)

  • A query that performed a ref_or_null join where the second table used a key having one or columns that could be NULL and had a column value that was NULL caused the server to crash. (Bug #34945)

    References: This bug was introduced by Bug #12144.

  • For some queries, the optimizer used an ordered index scan for GROUP BY or DISTINCT when it was supposed to use a loose index scan, leading to incorrect results. (Bug #34928)

  • Creating a foreign key on an InnoDB table that was created with an explicit AUTO_INCREMENT value caused that value to be reset to 1. (Bug #34920)

    References: This bug is a regression of Bug #23313.

  • mysqldump failed to return an error code when using the --master-data option without binary logging being enabled on the server. (Bug #34909)

  • Under some circumstances, the value of mysql_insert_id() following a SELECT ... INSERT statement could return an incorrect value. This could happen when the last SELECT ... INSERT did not involve an AUTO_INCREMENT column, but the value of mysql_insert_id() was changed by some previous statements. (Bug #34889)

  • Table and database names were mixed up in some places of the subquery transformation procedure. This could affect debugging trace output and further extensions of that procedure. (Bug #34830)

  • If fsync() returned ENOLCK, InnoDB could treat this as fatal and cause abnormal server termination. InnoDB now retries the operation. (Bug #34823)

  • CREATE SERVER and ALTER SERVER could crash the server if out-of-memory conditions occurred. (Bug #34790)

  • DROP SERVER does not release memory cached for server structures created by CREATE SERVER, so repeated iterations of these statements resulted in a memory leak. FLUSH PRIVILEGES now releases the memory allocated for CREATE SERVER. (Bug #34789)

  • A malformed URL used for a FEDERATED table's CONNECTION option value in a CREATE TABLE statement was not handled correctly and could crash the server. (Bug #34788)

  • Queries such as SELECT ROW(1, 2) IN (SELECT t1.a, 2) FROM t1 GROUP BY t1.a (combining row constructors and subqueries in the FROM clause) could lead to assertion failure or unexpected error messages. (Bug #34763)

  • Using NAME_CONST() with a negative number and an aggregate function caused MySQL to crash. This could also have a negative impact on replication. (Bug #34749)

  • A memory-handling error associated with use of GROUP_CONCAT() in subqueries could result in a server crash. (Bug #34747)

  • For an indexed integer column col_name and a value N that is one greater than the maximum value permitted for the data type of col_name, conditions of the form WHERE col_name < N failed to return rows where the value of col_name is N - 1. (Bug #34731)

  • A server running with the --debug option could attempt to dereference a null pointer when opening tables, resulting in a crash. (Bug #34726)

  • Assigning an incremental value to the debug system variable did not add the new value to the current value. For example, if the current debug value was 'T', the statement SET debug = '+P' resulted in a value of 'P' rather than the correct value of 'P:T'. (Bug #34678)

  • For debug builds, reading from INFORMATION_SCHEMA.TABLES or INFORMATION_SCHEMA.COLUMNS could cause assertion failures. This could happen under rare circumstances when INFORMATION_SCHEMA fails to get information about a table (for example, when a connection is killed). (Bug #34656)

  • Executing a TRUNCATE TABLE statement on a table having both a foreign key reference and a DELETE trigger crashed the server. (Bug #34643)

  • Some subqueries using an expression that included an aggregate function could fail or in some cases lead to a crash of the server. (Bug #34620)

  • Dangerous pointer arithmetic crashed the server on some systems. (Bug #34598)

  • Creating a view inside a stored procedure could lead to a crash of the MySQL Server. (Bug #34587)

  • A server crash could occur if INFORMATION_SCHEMA tables built in memory were swapped out to disk during query execution. (Bug #34529)

  • CAST(AVG(arg) AS DECIMAL) produced incorrect results for non-DECIMAL arguments. (Bug #34512)

  • The per-thread debugging settings stack was not being deallocated before thread termination, resulting in a stack memory leak. (Bug #34424)

  • Executing an ALTER VIEW statement on a table crashed the server. (Bug #34337)

  • InnoDB could crash if overflow occurred for an AUTO_INCREMENT column. (Bug #34335)

  • For InnoDB, exporting and importing a table could corrupt TINYBLOB columns, and a subsequent ALTER TABLE could corrupt TINYTEXT columns as well. (Bug #34300)

  • DEFAULT 0 was not permitted for the YEAR data type. (Bug #34274)

  • Under some conditions, a SET GLOBAL innodb_commit_concurrency or SET GLOBAL innodb_autoextend_increment statement could fail. (Bug #34223)

    References: This bug is a regression of Bug #31177.

  • mysqldump attempts to set the character_set_results system variable after connecting to the server. This failed for pre-4.1 servers that have no such variable, but mysqldump did not account for this and 1) failed to dump database contents; 2) failed to produce any error message alerting the user to the problem. (Bug #34192)

  • Use of stored functions in the WHERE clause for SHOW OPEN TABLES caused a server crash. (Bug #34166)

  • For a FEDERATED table with an index on a nullable column, accessing the table could crash a server, return an incorrect result set, or return ERROR 1030 (HY000): Got error 1430 from storage engine. (Bug #33946)

  • Passing anything other than an integer argument to a LIMIT clause in a prepared statement would fail. (This limitation was introduced to avoid replication problems; for example, replicating the statement with a string argument would cause a parse failure in the slave). Now, arguments to the LIMIT clause are converted to integer values, and these converted values are used when logging the statement. (Bug #33851)

  • An internal buffer in mysql was too short. Overextending it could cause stack problems or segmentation violations on some architectures. (This is not a problem that could be exploited to run arbitrary code.) (Bug #33841)

  • A query using WHERE (column1='string1' AND column2=constant1) OR (column1='string2' AND column2=constant2), where col1 used a binary collation and string1 matched string2 except for case, failed to match any records even when matches were found by a query using the equivalent clause WHERE column2=constant1 OR column2=constant2. (Bug #33833)

  • Large unsigned integers were improperly handled for prepared statements, resulting in truncation or conversion to negative numbers. (Bug #33798)

  • Reuse of prepared statements could cause a memory leak in the embedded server. (Bug #33796)

  • The server crashed when executing a query that had a subquery containing an equality X=Y where Y referred to a named select list expression from the parent select. The server crashed when trying to use the X=Y equality for ref-based access. (Bug #33794)

  • Some queries using a combination of IN, CONCAT(), and an implicit type conversion could return an incorrect result. (Bug #33764)

  • In some cases a query that produced a result set when using ORDER BY ASC did not return any results when this was changed to ORDER BY DESC. (Bug #33758)

  • Disabling concurrent inserts caused some cacheable queries not to be saved in the query cache. (Bug #33756)

  • ORDER BY ... DESC sorts could produce misordered results. (Bug #33697)

  • The server could crash when REPEAT or another control instruction was used in conjunction with labels and a LEAVE instruction. (Bug #33618)

  • The parser permitted control structures in compound statements to have mismatched beginning and ending labels. (Bug #33618)

  • make_binary_distribution passed the --print-libgcc-file option to the C compiler, but this does not work with the ICC compiler. (Bug #33536)

  • Threads created by the event scheduler were incorrectly counted against the max_connections thread limit, which could lead to client lockout. (Bug #33507)

  • Dropping a function after dropping the function's creator could cause the server to crash. (Bug #33464)

  • Certain combinations of views, subselects with outer references and stored routines or triggers could cause the server to crash. (Bug #33389)

  • SET GLOBAL myisam_max_sort_file_size=DEFAULT set myisam_max_sort_file_size to an incorrect value. (Bug #33382)

    References: See also Bug #31177.

  • ENUM- or SET-valued plugin variables could not be set from the command line. (Bug #33358)

  • Loading plugins using command-line options to mysqld could cause an assertion failure. (Bug #33345)

  • SLEEP(0) failed to return on 64-bit Mac OS X due to a bug in pthread_cond_timedwait(). (Bug #33304)

  • Using Control+R in the mysql client caused it to crash. (Bug #33288)

  • For MyISAM tables, CHECK TABLE (non-QUICK) and any form of REPAIR TABLE incorrected treated rows as corrupted under the combination of the following conditions:

    • The table had dynamic row format

    • The table had a CHAR (not VARCHAR) column longer than 127 bytes (for multibyte character sets this could be less than 127 characters)

    • The table had rows with a significant length of more than 127 bytes significant length in that CHAR column (that is, a byte beyond byte position 127 must be a nonspace character)

    This problem affected CHECK TABLE, REPAIR TABLE, OPTIMIZE TABLE, ALTER TABLE. CHECK TABLE reported and marked the table as crashed if any row was present that fulfilled the third condition. The other statements deleted these rows. (Bug #33222)

  • Granting the UPDATE privilege on one column of a view caused the server to crash. (Bug #33201)

  • For DECIMAL columns used with the ROUND(X,D) or TRUNCATE(X,D) function with a nonconstant value of D, adding an ORDER BY for the function result produced misordered output. (Bug #33143)

    References: See also Bug #33402, Bug #30617.

  • The CSV engine did not honor update requests for BLOB columns when the new column value had the same length as the value to be updated. (Bug #33067)

  • After receiving a SIGHUP signal, the server could crash, and user-specified log options were ignored when reopening the logs. (Bug #33065)

  • When MySQL was built with OpenSSL, the SSL library was not properly initialized with information of which endpoint it was (server or client), causing connection failures. (Bug #33050)

  • Under some circumstances a combination of aggregate functions and GROUP BY in a SELECT query over a view could lead to incorrect calculation of the result type of the aggregate function. This in turn could lead to incorrect results, or to crashes on debug builds of the server. (Bug #33049)

  • For DISTINCT queries, MySQL 4.0 and 4.1 stopped reading joined tables as soon as the first matching row was found. However, this optimization was lost in MySQL 5.0, which instead read all matching rows. This fix for this regression may result in a major improvement in performance for DISTINCT queries in cases where many rows match. (Bug #32942)

  • Repeated creation and deletion of views within prepared statements could eventually crash the server. (Bug #32890)

    References: See also Bug #34587.

  • Incorrect assertions could cause a server crash for DELETE triggers for transactional tables. (Bug #32790)

  • In some cases where setting a system variable failed, no error was sent to the client, causing the client to hang. (Bug #32757)

  • Enabling the PAD_CHAR_TO_FULL_LENGTH SQL mode caused privilege-loading operations (such as FLUSH PRIVILEGES) to include trailing spaces from grant table values stored in CHAR columns. Authentication for incoming connections failed as a result. Now privilege loading does not include trailing spaces, regardless of SQL mode. (Bug #32753)

  • The SHOW ENGINE INNODB STATUS and SHOW ENGINE INNODB MUTEX statements incorrectly required the SUPER privilege rather than the PROCESS privilege. (Bug #32710)

  • Inserting strings with a common prefix into a table that used the ucs2 character set corrupted the table. (Bug #32705)

  • Tables in the mysql database that stored the current sql_mode value as part of stored program definitions were not updated with newer mode values (NO_ENGINE_SUBSTITUTION, PAD_CHAR_TO_FULL_LENGTH). This causes various problems defining stored programs if those modes were included in the current sql_mode value. (Bug #32633)

  • A view created with a string literal for one of the columns picked up the connection character set, but not the collation. Comparison to that field therefore used the default collation for that character set, causing an error if the connection collation was not compatible with the default collation. The problem was caused by text literals in a view being dumped with a character set introducer even when this was not necessary, sometimes leading to a loss of collation information. Now the character set introducer is dumped only if it was included in the original query. (Bug #32538)

    References: See also Bug #21505.

  • Queries using LIKE on tables having indexed CHAR columns using either of the eucjpms or ujis character sets did not return correct results. (Bug #32510)

  • Executing a prepared statement associated with a materialized cursor sent to the client a metadata packet with incorrect table and database names. The problem occurred because the server sent the name of the temporary table used by the cursor instead of the table name of the original table.

    The same problem occurred when selecting from a view, in which case the name of the table name was sent, rather than the name of the view. (Bug #32265)

  • On Windows, mysqltest_embedded.exe did not properly execute the send command. (Bug #32044)

  • A variable named read_only could be declared even though that is a reserved word. (Bug #31947)

  • On Windows, the build process failed with four parallel build threads. (Bug #31929)

  • Queries testing numeric constants containing leading zeros against ZEROFILL columns were not evaluated correctly. (Bug #31887)

  • If an error occurred during file creation, the server sometimes did not remove the file, resulting in an unused file in the file system. (Bug #31781)

  • The mysqld crash handler failed on Windows. (Bug #31745)

  • When upgrading from MySQL 5.1.19 to any version between MySQL 5.1.20 to MySQL 5.1.23, the MySQL Instance Configuration Wizard failed to account for the change in name for the mysqld-nt.exe to mysqld.exe, causing MySQL to fail to start properly after the upgrade. (Bug #31674)

  • The server returned the error message Out of memory; restart server and try again when the actual problem was that the sort buffer was too small. Now an appropriate error message is returned in such cases. (Bug #31590)

  • A table having an index that included a BLOB or TEXT column, and that was originally created with a MySQL server using version 4.1 or earlier, could not be opened by a 5.1 or later server. (Bug #31331)

  • The mysql_change_user() C API function caused global Com_xxx status variable values to be incorrect. (Bug #31222)

  • When sorting privilege table rows, the server treated escaped wildcard characters (\% and \_) the same as unescaped wildcard characters (% and _), resulting in incorrect row ordering. (Bug #31194)

  • On Windows, SHOW PROCESSLIST could display process entries with a State value of *** DEAD ***. (Bug #30960)

  • ROUND(X,D) or TRUNCATE(X,D) for nonconstant values of D could crash the server if these functions were used in an ORDER BY that was resolved using filesort. (Bug #30889)

  • Resetting the query cache by issuing a SET GLOBAL query_cache_size=0 statement caused the server to crash if it concurrently was saving a new result set to the query cache. (Bug #30887)

  • Manifest problems prevented MySQLInstanceConfig.exe from running on Windows Vista. (Bug #30823)

  • If an alias was used to refer to the value returned by a stored function within a subselect, the outer select recognized the alias but failed to retrieve the value assigned to it in the subselect. (Bug #30787)

    References: This bug is a regression of Bug #20777.

  • Binary logging for a stored procedure differed depending on whether or not execution occurred in a prepared statement. (Bug #30604)

  • An orphaned PID file from a no-longer-running process could cause mysql.server to wait for that process to exit even though it does not exist. (Bug #30378)

  • The Table_locks_waited waited variable was not incremented in the cases that a lock had to be waited for but the waiting thread was killed or the request was aborted. (Bug #30331)

  • The Com_create_function status variable was not incremented properly. (Bug #30252)

  • View metadata returned from INFORMATION_SCHEMA.VIEWS was changed by the fix for Bug #11986, causing the information returned in MySQL 5.1 to differ from that returned in 5.0. (Bug #30217)

  • mysqld displayed the --enable-pstack option in its help message even if MySQL was configured without --with-pstack. (Bug #29836)

  • The mysql_config command would output CFLAGS values that were incompatible with C++ for the HP-UX platform. (Bug #29645)

  • Views were treated as insertable even if some base table columns with no default value were omitted from the view definition. (This is contrary to the condition for insertability that a view must contain all columns in the base table that do not have a default value.) (Bug #29477)

  • myisamchk always reported the character set for a table as latin1_swedish_ci (8) regardless of the table' actual character set. (Bug #29182)

  • InnoDB could return an incorrect rows-updated value for UPDATE statements. (Bug #29157)

  • The MySQL preferences pane did not work to start or stop MySQL on Mac OS X 10.5 (Leopard). (Bug #28854)

  • For upgrading to a new major version using RPM packages (such as 4.1 to 5.0), if the installation procedure found an existing MySQL server running, it could fail to shut down the old server, but also erroneously removed the server's socket file. Now the procedure checks for an existing server package from a different vendor or major MySQL version. In such case, it refuses to install the server and recommends how to safely remove the old packages before installing the new ones. (Bug #28555)

  • mysqlhotcopy silently skipped databases with names consisting of two alphanumeric characters. (Bug #28460)

  • No information was written to the general query log for the COM_STMT_CLOSE, COM_STMT_RESET, and COM_STMT_SEND_LONG_DATA commands. (These occur when a client invokes the mysql_stmt_close(), mysql_stmt_reset() and mysql_stmt_send_long_data() C API functions.) (Bug #28386)

  • The FEDERATED storage engine did not perform identifier quoting for column names that are reserved words when sending statements to the remote server. (Bug #28269)

  • The SQL parser did not accept an empty UNION=() clause. This meant that, when there were no underlying tables specified for a MERGE table, SHOW CREATE TABLE and mysqldump both output statements that could not be executed.

    Now it is possible to execute a CREATE TABLE or ALTER TABLE statement with an empty UNION=() clause. However, SHOW CREATE TABLE and mysqldump do not output the UNION=() clause if there are no underlying tables specified for a MERGE table. This also means it is now possible to remove the underlying tables for a MERGE table using ALTER TABLE ... UNION=(). (Bug #28248)

  • It was possible to exhaust memory by repeatedly running index_merge queries and never performing any FLUSH TABLES statements. (Bug #27732)

  • When utf8 was set as the connection character set, using SPACE() with a non-Unicode column produced an error. (Bug #27580)

    References: See also Bug #23637.

  • The parser rules for the SHOW PROFILE statement were revised to work with older versions of bison. (Bug #27433)

  • resolveip failed to produce correct results for host names that begin with a digit. (Bug #27427)

  • In ORDER BY clauses, mixing aggregate functions and nongrouping columns is not permitted if the ONLY_FULL_GROUP_BY SQL mode is enabled. However, in some cases, no error was thrown because of insufficient checking. (Bug #27219)

  • For the --record_log_pos option, mysqlhotcopy now determines the slave status information from the result of SHOW SLAVE STATUS by using the Relay_Master_Log_File and Exec_Master_Log_Pos values rather than the Master_Log_File and Read_Master_Log_Pos values. This provides a more accurate indication of slave execution relative to the master. (Bug #27101)

  • The MySQL Instance Configuration Wizard would not permit you to choose a service name, even though the criteria for the service name were valid. The code that checks the name has been updated to support the correct criteria of any string less than 256 character and not containing either a forward or backward slash character. (Bug #27013)

  • Memory corruption, a crash of the MySQL server, or both, could take place if a low-level I/O error occurred while an ARCHIVE table was being opened. (Bug #26978)

  • DROP DATABASE failed for attempts to drop databases with names that contained the legacy #mysql50# name prefix. (Bug #26703)

  • config-win.h unconditionally defined bool as BOOL, causing problems on systems where bool is 1 byte and BOOL is 4 bytes. (Bug #26461)

  • On Windows, for distributions built with debugging support, mysql could crash if the user typed Control+C. (Bug #26243)

  • The XPath boolean() function did not cast string and nodeset values correctly in some cases. It now returns TRUE for any nonempty string or nodeset and 0 for a NULL string, as specified in the XPath standard.. (Bug #26051)

  • When symbolic links were disabled, either with a server startup option or by enabling the NO_DIR_IN_CREATE SQL mode, CREATE TABLE silently ignored the DATA DIRECTORY and INDEX DIRECTORY table options. Now the server issues a warning if symbolic links are disabled when these table options are used. (Bug #25677)

  • Attempting to create an index with a prefix on a DECIMAL column appeared to succeed with an inaccurate warning message. Now, this action fails with the error 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. (Bug #25426)

  • mysqlcheck -A -r did not correctly identify all tables that needed repairing. (Bug #25347)

  • On Windows, an error in configure.js caused installation of source distributions to fail. (Bug #25340)

  • The Qcache_free_blocks status variable did not display a value of 0 if the query cache was disabled. (Bug #25132)

  • The client library had no way to return an error if no connection had been established. This caused problems such as mysql_library_init() failing silently if no errmsg.sys file was available. (Bug #25097)

  • On Mac OS X, the StartupItem for MySQL did not work. (Bug #25008)

  • For Windows 64-bit builds, enabling shared-memory support caused client connections to fail. (Bug #24992)

  • mysql did not use its completion table. Also, the table contained few entries. (Bug #24624)

  • If a user installed MySQL Server and set a password for the root user, and then uninstalled and reinstalled MySQL Server to the same location, the user could not use the MySQL Instance Config wizard to configure the server because the uninstall operation left the previous data directory intact. The config wizard assumed that any new install (not an upgrade) would have the default data directory where the root user has no password. The installer now writes a registry key named FoundExistingDataDir. If the installer finds an existing data directory, the key will have a value of 1, otherwise it will have a value of 0. When MySQLInstanceConfig.exe is run, it will attempt to read the key. If it can read the key, and the value is 1 and there is no existing instance of the server (indicating a new installation), the Config Wizard will permit the user to input the old password so the server can be configured. (Bug #24215)

  • Logging of statements to log tables was incorrect for statements that contained utf8-incompatible binary strings. Incompatible sequences are hex-encoded now. (Bug #23924)

  • The MySQL header files contained some duplicate macro definitions that could cause compilation problems. (Bug #23839)

  • SHOW COLUMNS on a TEMPORARY table caused locking issues. (Bug #23588)

  • For distributions compiled with the bundled libedit library, there were difficulties using the mysql client to enter input for non-ASCII or multibyte characters. (Bug #23097)

  • perror reported incomplete or inaccurate information. (Bug #23028, Bug #25177)

  • After stopping and starting the event scheduler, disabled events could remain in the execution queue. (Bug #22738)

  • The server produced a confusing error message when attempting to open a table that required a storage engine that was not loaded. (Bug #22708)

  • For views or stored programs created with an invalid DEFINER value, the error message was confusing (did not tie the problem to the DEFINER clause) and has been improved. (Bug #21854)

  • Warnings for deprecated syntax constructs used in stored routines make sense to report only when the routine is being created, but they were also being reported when the routine was parsed for loading into the execution cache. Now they are reported only at routine creation time. (Bug #21801)

  • On Mac OS X, mysqld did not react to Control+C when run under gdb, even when run with the --gdb option. (Bug #21567)

  • CREATE ... SELECT did not always set DEFAULT column values in the new table. (Bug #21380)

  • mysql_config output did not include -lmygcc on some platforms when it was needed. (Bug #21158)

  • and were missing from some binary distributions. (Bug #21023, Bug #25486)

  • The BENCHMARK() function, invoked with more than 2147483648 iterations (the size of a signed 32-bit integer), terminated prematurely. (Bug #20752)

  • mysqldumpslow returned a confusing error message when no configuration file was found. (Bug #20455)

  • MySQLInstanceConfig.exe could lose the innodb_data_home_dir setting when reconfiguring an instance. (Bug #19797)

  • DROP DATABASE did not drop orphaned FOREIGN KEY constraints. (Bug #18942)

  • CREATE TABLE permitted 0 as the default value for a TIMESTAMP column when the server was running in NO_ZERO_DATE mode. (Bug #18834)

  • A SET column whose definition specified 64 elements could not be updated using integer values. (Bug #15409)

  • If a SELECT calls a stored function in a transaction, and a statement within the function fails, that statement should roll back. Furthermore, if ROLLBACK is executed after that, the entire transaction should be rolled back. Before this fix, the failed statement did not roll back when it failed (even though it might ultimately get rolled back by a ROLLBACK later that rolls back the entire transaction). (Bug #12713)

    References: See also Bug #34655.

  • The parser incorrectly permitted SQLSTATE '00000' to be specified for a condition handler. (This is incorrect because the condition must be a failure condition and '00000' indicates success.) (Bug #8759)

  • MySQLInstanceConfig.exe did not save the innodb_data_home_dir value to the my.ini file under certain circumstances. (Bug #6627)