Changes in MySQL 5.5.62
Functionality Added or Changed
* Previously, file I/O performed in the I/O cache in the mysys library was not instrumented, affecting in particular file I/O statistics reported by the Performance Schema about the binary log index file. Now, this I/O is instrumented and Performance Schema statistics are accurate. Thanks to Yura Sorokin for the contribution.
* The zlib library version bundled with MySQL was raised from version 1.2.3 to version 1.2.11. MySQL implements compression with the help of the zlib library.
* The zlib compressBound() function in zlib 1.2.11 returns a slightly higher estimate of the buffer size required to compress a given length of bytes than it did in zlib version 1.2.3. The compressBound() function is called by InnoDB functions that determine the maximum row size permitted when creating compressed InnoDB tables or inserting rows into compressed InnoDB tables. As a result, CREATE TABLE ... ROW_FORMAT=COMPRESSED or INSERT operations with row sizes very close to the maximum row size that were successful in earlier releases could now fail.
Bugs Fixed
* MySQL Server and test RPM packages were missing perl-Data-Dumper as a dependency.
* For the mysql client, the -b short option was associated with two long options, --no-beep and --binary-as-hex. The -b option now is associated only with --no-beep.
* During server startup/shutdown, PID files could be mishandled.
* For MEMORY tables, memory overflow errors could occur.
* When converting from a BLOB (or TEXT) type to a smaller BLOB (or TEXT) type, no warning or error was reported informing about the truncation or data loss. Now an appropriate error is issued in strict SQL mode and a warning in nonstrict SQL mode.
* ALTER TABLE ... REORGANIZE PARTITION ... could result in incorrect behavior if any partition other than the last was missing the VALUES LESS THAN part of the syntax.
MySQL 5.5.59:
Configuration Notes
* For RHEL, SLES, and Fedora RPMs, the default plugin directory for debug builds has been changed from /usr/lib64/mysql/plugin to /usr/lib64/mysql/plugin/debug.
Test Suite Notes
* Documentation for the MySQL Test Suite is now maintained in the MySQL source tree using Doxygen (see http://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_MYSQL_TEST_RUN.html). The related Unix man pages that previously were produced from the old test suite manual are no longer updated and have gone out of date. Consequently, they are no longer included in MySQL distributions.
Bugs Fixed
* InnoDB: Warnings that should only appear in a debug version of MySQL were printed to the error log when the length of the history list exceeded 2000000.
* Packaging: Initialization of the MySQL Server Docker container failed with the message “hostname: command not found” when the server was being initialized. That was due to a missing library in the Docker image.
* Partitioning: Queries involving NULL were not always handled correctly on tables that were partitioned by LIST.
* Microsoft Windows: On Windows, with the myisam_use_mmap and flush system variables enabled, MyISAM did not always flush table files properly.
* VALUES() was not handled correctly in some cases.
* Incorrect results or a server exit could result when SHA2() was passed a user-defined variable in some character sets.
* Creating a table with excessive index information could cause a server exit.
* Setting the MYSQL_GROUP_SUFFIX environment variable had no effect.
* A circular dependency problem involving sql/sql_builtin.cc was resolved.
* A prepared statement containing an ORDER BY list that referred to a parameter was not always handled correctly.
Changes in MySQL 5.5.58:
Packaging Notes
---------------
mysqlcheck was missing in the MySQL Server Docker image, which prevented mysql_upgrade from running.
Bugs Fixed
----------
Replication: Replication clients no longer enable LOCAL capability for LOAD DATA statements, because they do not use LOAD DATA LOCAL statements.
yaSSL could incorrectly perform TLS cipher negotiation.
The server failed to check the maximum path length for partition names.
Identifiers containing a mixture of backslashes and backticks could be parsed incorrectly.
NAME_CONST() can return null if incorrect arguments are given. In some cases, this was not handled and could cause a server exit.
* Security Fix: The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.2l. Issues fixed in the new OpenSSL version are described at http://www.openssl.org/news/vulnerabilities.html.
This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead.
Platform-Specific Notes
* Linux: The generic Linux build for MySQL 5.6 is now built on Oracle Linux 6 using glibc 2.12. Systems that use the build need to have glibc 2.12 or later installed on them.
Functionality Added or Changed
* For Windows, MSI installer packages now include a check for the required Visual Studio redistributable package, and produce a message asking the user to install it if it is missing.
* The mysql client now supports a --binary-as-hex option that causes display of binary data using hexadecimal notation (0xvalue). Thanks to Daniël van Eeden for the patch.
* mysqlaccess now looks for its configuration file only in the SYSCONFDIR directory and /etc.
Bugs Fixed
* InnoDB: The server allocated memory unnecessarily for an operation that rebuilt the table.
* InnoDB: When using an index merge optimizer switch, a SELECT COUNT(*) operation sometimes returned 0. Partitioning code incorrectly performed a memcpy instead of a column copy of columns read by the index, causing the wrong records to be copied.
* Replication: A USE statement that followed a SET GTID_NEXT statement sometimes had no effect.
* Replication: If the binary log on a master server was rotated and a full disk condition occurred on the partition where the binary log file was being stored, the server could stop unexpectedly. The fix adds a check for the existence of the binary log when the dump thread switches to next binary log file. If the binary log is disabled, all binary logs up to the current active log are transmitted to slave and an error is returned to the receiver thread.
* Replication: If a relay log index file named relay log files that did not exist, RESET SLAVE ALL sometimes did not fully clean up properly.
* Replication: mysqlbinlog, if invoked with the --raw option, does not flush the output file until the process terminates. But if also invoked with the --stop-never option, the process never terminates, thus nothing is ever written to the output file. Now the output is flushed after each event.
* Replication: A memory leak in mysqlbinlog was fixed. The leak happened when processing fake rotate events, or when using --raw and the destination log file could not be created. The leak only occurred when processing events from a remote server. Thanks to Laurynas Biveinis for his contribution to fixing this bug.
* Replication: Multi-threaded slaves could not be configured with small queue sizes using slave_pending_jobs_size_max if they ever needed to process transactions larger than that size. Any packet larger than slave_pending_jobs_size_max was rejected with the error ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX, even if the packet was smaller than the limit set by slave_max_allowed_packet.
* With this fix, slave_pending_jobs_size_max becomes a soft limit rather than a hard limit. If the size of a packet exceeds slave_pending_jobs_size_max but is less than slave_max_allowed_packet, the transaction is held until all the slave workers have empty queues, and then processed. All subsequent transactions are held until the large transaction has been completed. The queue size for slave workers can therefore be limited while still allowing occasional larger transactions.
* mysqldump could write database names in USE statements incorrectly.
* If the mysql_stmt_close() C API function was called, it freed memory that later could be accessed if mysql_stmt_error(), mysql_stmt_errno(), or mysql_stmt_sqlstate() was called. To obtain error information after a call to mysql_stmt_close(), call mysql_error(), mysql_errno(), or mysql_sqlstate() instead.
* Queries could be cached incorrectly, leading to incorrect query results, under these circumstances: InnoDB table; rows are being inserted but have not yet been committed; a query uses the table as a base table in a derived table; the optimizer chooses to materialize the derived table.
* Man pages for a few utilities were missing from Debian/Ubuntu packages.
* The field-t unit test failed to run with AddressSanitizer enabled. Thanks to Laurynas Biveinis for the patch.
* Debian client packages were missing information about conflicts with native packages.
* The Perl path in #! lines at the beginning of Perl scripts has been adjusted to /usr/local/bin/perl for FreeBSD 11.
* The server exited abnormally attempting to access invalid memory.
* A race condition could occur for CREATE TABLE statements with DATA DIRECTORY or INDEX DIRECTORY clauses.
* MySQL compilation in different directories produced different builds to leakage of absolute paths into debug information and __FILE__.
* mysqld_failed to start the server if the --datadir option was specified with a relative path name.
* With read_only enabled, creation of non-TEMPORARY tables by non-SUPER users was permitted under certain conditions.
*Certain stored functions, if used in a query WHERE clause, could be handled using Index Condition Pushdown (which should not happen), resulting in a server exit.
* On x86 machines, the uint3korr() macro read 4 bytes of data instead of the intended 3 bytes.
* An assertion was raised during a fetch operation by the memcached plugin.
* Queries that contained UNION in a subquery and GROUP BY could return incorrect results.
* LOAD XML INFILE performance became noticeably slower when the XML file being read contained a great many spaces, such as those introduced by indenting or pretty-printing. Now all leading whitespace is trimmed from each such value before reading it into memory.
-------------------------------------------------------------------
(From https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-56.html)
Changes in MySQL 5.5.56 (2017-05-02, General availability)
Binary packages for MySQL 5.5.56 are identical to those for MySQL
5.5.55, except for the version number. The change in 5.5.56 for Bug
#25942414 is applicable only to those who build from source.
Security Notes
For the WITH_SSL CMake option, no is no longer a permitted value or
the default value. The default is now bundled. Consequently, MySQL now
is always built with SSL support. (Bug #25942414)
-------------------------------------------------------------------
(pkgsrc changes)
- Removed ssl option both from PKG_{SUPPORTED,SUGGESTED}_OPTIONS.
This may give error if ssl is explicitly designated, but I believe
that is the (kind of) upstream intension.
(or left ssl in SUPPORTED and ignore it ?)
---------------------------------------------------
Picks securiy part from
https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-55.html
-----
Security Notes
The mysql_options() C API function now supports a
MYSQL_OPT_SSL_MODE option. The only permitted option value is
SSL_MODE_REQUIRED, to require a secure connection to the server. It
causes mysql_real_connect() to fail if an encrypted connection cannot
be obtained, without falling back to an unencrypted connection. Thus,
mysql_real_connect() returns an error if the server does not support
SSL or the client is not configured to use SSL. The client/server
exchange terminates immediately after the initial server packet has
been received if the server indicates that it does not support SSL.
To require an encrypted connection in MySQL 5.5, the standard MySQL
client programs call mysql_options() to set MYSQL_OPT_SSL_MODE if the
--ssl-mode=REQUIRED command-line option was specified. Third-party
applications that must be able to require encrypted connections can
use the same technique. For details, see mysql_ssl_set().
The minor C API version number was not incremented for this
change. Application programs compiled for MySQL 5.5 that require
MYSQL_OPT_SSL_MODE may fail to operate properly if the dynamic loader
provides an older client library without MYSQL_OPT_SSL_MODE. Such
applications must be written to handle this possibility by checking
whether the mysql_options() call succeeds or fails. (Bug #25575605)
Security Notes
--------------
Incompatible Change: These changes were made to mysqld_safe:
* Unsafe use of rm and chown in mysqld_safe could result in privilege escalation. chown now can be used only when the target directory is /var/log. An incompatible change is that if the directory for the Unix socket file is missing, it is no longer created; instead, an error occurs. Due to these changes, /bin/bash is required to run mysqld_safe on Solaris. /bin/sh is still used on other Unix/Linux platforms.
* The --ledir option now is accepted only on the command line, not in option files.
* mysqld_safe ignores the current working directory.
Other related changes:
* Initialization scripts that invoke mysqld_safe pass --basedir explicitly.
* Initialization scripts create the error log file only if the base directory is /var/log or /var/lib.
* Unused systemd files for SLES were removed.
Bugs Fixed
Packaging Notes
---------------
RPM packages now create the /var/lib/mysql-files directory, which is now the default value of the secure_file_priv system variable that specifies a directory for import and export operations.
Security Notes
--------------
Incompatible Change: The secure_file_priv system variable is used to limit the effect of data import and export operations.
Functionality Added or Changed
------------------------------
yaSSL was upgraded to version 2.4.2. This upgrade corrects issues with: Potential AES side channel leaks; DSA padding for unusual sizes; the SSL_CTX_load_verify_locations() OpenSSL compatibility function failing to handle long path directory names.
Bugs Fixed
----------
Replication: mysqlbinlog --read-from-remote-server log1 log2 was opening a new connection for log2 without freeing the connection used for log1. Thanks to Laurynas Biveinis for the contribution. (Bug 81675, Bug 23540182)
For mysqld_safe, the argument to --malloc-lib now must be one of the directories /usr/lib, /usr/lib64, /usr/lib/i386-linux-gnu, or /usr/lib/x86_64-linux-gnu. In addition, the --mysqld and --mysqld-version options can be used only on the command line and not in an option file. (Bug 24464380)
It was possible to write log files ending with .ini or .cnf that later could be parsed as option files. The general query log and slow query log can no longer be written to a file ending with .ini or .cnf. (Bug 24388753)
Privilege escalation was possible by exploiting the way REPAIR TABLE used temporary files. (Bug 24388746)
Certain internal character-handling functions could fail to handle a too-large character and cause a server exit. (Bug 23296299)
A blank server name in CREATE SERVER statements produced a server exit rather than an error. (Bug 23295288)
The optimizer failed to check a function return value for an area calculation, leading to a server exit. (Bug 23280059)
A prepared statement that used a parameter in the select list of a derived table that was part of a join could cause a server exit. (Bug 22392374, Bug 24380263)
MEDIUMINT columns used in operations with long integer values could result in buffer overflow. (Bug 19984392)
EINTR handling in the client library has been fixed so that interrupted read and write calls are retried. Previously, EINTR was ignored. (Bug 82019, Bug 23703570)
Bugs Fixed
Replication: When using statement-based or mixed binary logging format with --read-only=ON, it was not possible to modify temporary tables.
MySQL Server upgrades performed using RPM packages failed when upgrading from MySQL 5.1 Community to MySQL 5.5 Community or MySQL 5.1 Commercial to MySQL 5.5 Commercial.
A buffer overflow in the regex library was fixed.
Certain arguments to NAME_CONST() could cause a server exit.
Installing MySQL from a yum or zypper repository resulted in /var/log/mysqld.log being created with incorrect user and group permissions.
If a stored function updated a view for which the view table had a trigger defined that updated another table, it could fail and report an error that an existing table did not exist.
If an INSTALL PLUGIN statement contained invalid UTF-8 characters in the shared library name, it caused the server to hang (or to raise an assertion in debug builds).
For multibyte character sets, LOAD DATA could fail to allocate space correctly and ignore input rows as a result.
Functionality Added or Changed
The version of the tcmalloc library included in MySQL distributions was very old. It has been removed and is no longer included with MySQL.
Bugs Fixed
INSERT with ON DUPLICATE KEY UPDATE and REPLACE on a table with a foreign key constraint defined failed with an incorrect “duplicate entry” error rather than a foreign key constraint violation error.
Setting sort_buffer_size to a very large value could cause some operations to fail with an out-of-memory error.
Several potential buffer overflow issues were corrected.
If the CA certificate as given to the --ssl-ca option had an invalid path, yaSSL returned an error message different from OpenSSL. Now both return SSL connection error: SSL_CTX_set_default_verify_paths failed.
Some string functions returned one or a combination of their parameters as their result. If one of the parameters had a non-ASCII character set, the result string had the same character set, resulting in incorrect behavior when an ASCII string was expected.
A null pointer dereference of a parser structure could occur during stored procedure name validation.
mysqld_multi displayed misleading error messages when it was unable to execute my_print_defaults.
Security Notes
--------------
MySQL client programs now support an --ssl-mode option that enables you to specify the security state of the connection to the server. The default value is DISABLED (establish an unencrypted connection). --ssl-mode=REQUIRED) can be specified to require a secure connection, or fail if a secure connection cannot be obtained.
These clients support --ssl-mode: mysql, mysqladmin, mysqlcheck, mysqldump, mysqlimport, mysqlshow, mysqlpump, mysqlslap, mysqltest, mysql_upgrade.
For more information, see Command Options for Secure Connections.
Bugs Fixed
* yaSSL was upgraded to version 2.3.9. This upgrade corrects an issue in which yaSSL handled only cases of zero or one leading zeros for the key agreement instead of potentially any number, which in rare cases could cause connections to fail when using DHE cipher suites.
* The Valgrind function signature in mysql-test/valgrind.supp was upgraded for Valgrind 3.11.
* Bugs Fixed
MySQL Server RPM packages now contain a conflict indicator for MySQL Connector C, such that an error occurs when installing MySQL Server if MySQL Connector C is also installed. To install MySQL Server, remove any MySQL Connector C packages first.
mysql_upgrade now attempts to print more informative errors than FATAL ERROR: Upgrade failed.
These client programs now support the --enable-cleartext-plugin option: mysqlcheck, mysqldump, mysqlimport, mysqlshow. This option enables the mysql_clear_password cleartext authentication plugin. (See The Cleartext Client-Side Authentication Plugin.)
Bugs Fixed
* yaSSL was upgraded to version 2.3.8.
* InnoDB: A data corruption occurred on ARM64. GCC builtins did not issue the correct fences when setting or unsetting the lock word.
* InnoDB: In READ COMMITTED mode, a REPLACE operation on a unique secondary index resulted in a constraint violation. Thanks to Alexey Kopytov for the patch.
* InnoDB: The IBUF_BITMAP_FREE bit indicated that there was more free space in the leaf page than was actually available.
* InnoDB: Setting lower_case_table_names=0 on a case-insensitive file system could result in a hang condition when running an INSERT INTO ... SELECT ... FROM tbl_name operation with the wrong tbl_name letter case. An error message is now printed and the server exits when attempting to start the server with --lower_case_table_names=0 on a case-insensitive file system.
* Partitioning: CREATE TABLE statements that used an invalid function in a subpartitioning expression did not always fail gracefully as expected.
* Partitioning: ALTER TABLE when executed from a stored procedure did not always work correctly with tables partitioned by RANGE.
* Certain subqueries as arguments to PROCEDURE ANALYSE() could cause a server exit.
* mysql_ssl_rsa_setup could create an unwanted .rnd file in the data directory. (The file is actually created by openssl, which mysql_ssl_ras_setup invokes. mysql_ssl_rsa_setup now cleans up the file.)
* An assertion could be raised due to incorrect error handling if a SELECT ... FOR UPDATE subquery resulted in deadlock and caused a rollback.
* Servers linked against yaSSL and compiled with GCC 4.8.2 could fail to respond correctly to connection attempts until several seconds after startup.
* For tables with subpartitions, the server could exit due to incorrect error handling during partition pruning if the partition could be identified but not the subpartition.
* DELETE could check privileges for the wrong database when table aliases were used.
* Within a trigger, use of a cursor that accessed OLD or NEW values from a row could cause a server exit.
* MySQL sometimes produced no warning when it was unable to interpret a character in a given character set.
* For MySQL distributions linked against yaSSL, a corrupt client key file could cause clients to exit.
* Execution of certain BINLOG statements while temporary tables were open by HANDLER statements could cause a server exit.
* Security Fix: Due to the LogJam issue (https://weakdh.org/), OpenSSL has changed the Diffie-Hellman key length parameters for openssl-1.0.1n and up. OpenSSL has provided a detailed explanation at http://openssl.org/news/secadv_20150611.txt. To adopt this change in MySQL, the key length used in vio/viosslfactories.c for creating Diffie-Hellman keys has been increased from 512 to 2,048 bits.
* InnoDB: On Unix-like platforms, os_file_create_simple_no_error_handling_func and os_file_create_func opened files in different modes when innodb_flush_method was set to O_DIRECT.
* InnoDB: An assertion was raised when InnoDB attempted to dereference a NULL foreign key object.
* InnoDB: An index record was not found on rollback due to inconsistencies in the purge_node_t structure.
* The Spencer regex library used for the REGEXP operator could be subject to heap overflow in some circumstances.
* A buffer-overflow error could occur for mysqlslap during option parsing.
* GROUP BY or ORDER BY on a CHAR(0) NOT NULL column could lead to a server exit.
* mysql-systemd-start failed if datadir was set in /etc/my.cnf.
* On OS X 10.10 (Yosemite), mysqld failed to start automatically. The startup item has been replaced with a launchd job, which enables the preference pane checkbox for automatic startup to work again.
Bugs fixed:
* InnoDB; Partitioning: The CREATE_TIME column of the INFORMATION_SCHEMA.TABLES table now shows the correct table creation time for partitioned InnoDB tables. The CREATE_TIME column of the INFORMATION_SCHEMA.PARTITIONS table now shows the correct partition creation time for a partition of partitioned InnoDB tables.
The UPDATE_TIME column of the INFORMATION_SCHEMA.TABLES table now shows when a partitioned InnoDB table was last updated by an INSERT, DELETE, or UPDATE. The UPDATE_TIME column of the INFORMATION_SCHEMA.PARTITIONS table now shows when a partition of a partitioned InnoDB table was last updated.
* InnoDB: An assertion was raised on shutdown due to XA PREPARE transactions holding explicit locks.
* InnoDB: Removal of a foreign key object from the data dictionary cache during error handling caused the server to exit.
* InnoDB: SHOW ENGINE INNODB STATUS output showed negative reservation and signal count values due to a counter overflow error.
* InnoDB: Estimates that were too low for the size of merge chunks in the result sorting algorithm caused a server exit.
* SHOW VARIABLES mutexes were being locked twice, resulting in a server exit.
* A Provides rule in RPM .spec files misspelled “mysql-embedded” as “mysql-emdedded”.
* Under certain conditions, the libedit command-line library could write outside an array boundary and cause a client program crash.
* Host value matching for the grant tables could fail to use the most specific of values that contained wildcard characters.
* A user with a name of event_scheduler could view the Event Scheduler process list without the PROCESS privilege.
* SHOW GRANTS after connecting using a proxy user could display the password hash of the proxied user.
* For a prepared statement with an ORDER BY that refers by column number to a GROUP_CONCAT() expression that has an outer reference, repeated statement execution could cause a server exit.
* Loading corrupt spatial data into a MyISAM table could cause the server to exit during index building.
* Certain queries for the INFORMATION_SCHEMA TABLES and COLUMNS tables could lead to excessive memory use when there were large numbers of empty InnoDB tables.
* MySQL failed to compile using OpenSSL 0.9.8e.
* CMake support was updated to handle CMake version 3.1.
* The server now includes its version number when it writes the initial “starting” message to the error log, to make it easier to tell which server instance error log output applies to. This value is the same as that available from the version system variable.
* Bug fixes.
* Support for the SSL 2.0 and SSL 3.0 protocols has been disabled because they provide weak encryption.
* yaSSL was upgraded to version 2.3.7.
* The valid date range of the SSL certificates in mysql-test/std_data has been extended to the year 2029.
* Bugs Fixed
InnoDB: An ALTER TABLE ... ADD FOREIGN KEY operation could cause a serious error.
InnoDB: With a transaction isolation level less than or equal to READ COMMITTED, gap locks were not taken when scanning a unique secondary index to check for duplicates. As a result, duplicate check logic failed allowing duplicate key values in the unique secondary index.
InnoDB: During recovery, a segmentation fault would occur when marking a table as corrupt.
yaSSL client code did not validate the encryption size or session ID length, which could cause the client to exit.
MySQL installation from RPM packages could fail if Postfix had been installed using yum.
yaSSL could fail preauthorization if the client supplied inaccurate buffer lengths.
Competition between threads could lead to timeout failure trying to rotate the audit log file.
On Linux (OEL6), if Sun DTrace was installed, the MySQL build failed.
LPAD() and RPAD() could cause a server exit if the pad string argument was not well formed.
The optimizer could create a zero-length column for a temporary table, causing a server exit.
CMake support was updated to handle CMake version 3.
The timed_mutexes system variable has no effect and is deprecated.
Bugs Fixed
InnoDB: Opening a parent table that has thousands of child tables could result in a long semaphore wait condition.
Partitioning: Selecting from a table having multiple columns in its primary key and partitioned by LIST COLUMNS(R), where R was the last (rightmost) column listed in the primary key definition, returned an incorrect result.
Replication: When using row-based replication, updating or deleting a row on the master that did not exist on the slave led to failure of the slave when it tried to process the change. This problem occurred with InnoDB tables lacking a primary key.
Replication: Quotation marks were not always handled correctly by LOAD DATA INFILE when written into the binary log.
Replication: A group of threads involved in acquiring locks could deadlock when the following events occurred:
Dump thread reconnects from slave; on master, a new dump thread tries to kill zombie dump threads; having acquired the thread's LOCK_thd_data, it is about to acquire LOCK_log.
Application thread executing show binary logs, having acquired LOCK_log and about to acquire LOCK_index.
Application thread executing PURGE BINARY LOGS; having acquired LOCK_index, it is about to acquire LOCK_thread_count.
Application thread executing SHOW PROCESSLIST (or SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST), having acquired LOCK_thread_count and about to acquire the zombie dump thread's LOCK_thd_data.
Bugs Fixed
InnoDB: For each insert, memset would be called three times to allocate memory for system fields. To reduce CPU usage, the three memset calls are now combined into a single call.
Replication: When used on a table employing a transactional storage engine, a failed TRUNCATE TABLE was still written to the binary log and thus replayed on the slave. This could lead to inconsistency when the master retained data that was removed on the slave.
Now in such cases TRUNCATE TABLE is logged only when it executes successfully.
Certain INFORMATION_SCHEMA queries could cause a server exit.
For indexes on prefixes or character string columns, index corruption could occur for assignment of binary data to the column due to improper character counting.
Solaris-specific scripts were included in and installed by non-Solaris packages.
EXPLAIN on a query with an EXISTS subquery containing a UNION could cause a server exit. Multiple executions of a prepared EXPLAIN on a UNION of subqueries could cause a server exit.
Executing a correlated subquery on an ARCHIVE table which has an AUTO_INCREMENT column caused the server to hang.
The client library could cause clients to exit due to incorrectly mapping the client error number to the corresponding message, if reallocation of packet buffer memory occurred.
Calling mysql_get_server_version() with an invalid connection handler argument caused the client to exit. Now it returns 0 and reports a CR_COMMANDS_OUT_OF_SYNC error.
On Windows, calling mysql_thread_init() call without mysql_init() caused the client to exit. windows. Now it returns a nonzero result because it is an error to call mysql_thread_init() before the client library is initialized with mysql_library_init().
CMake produced not-useful warnings about INTERFACE_LINK_LIBRARIES policy.
LOAD DATA LOCAL INFILE could use all CPU if import errors occurred when there were no line delimiters.
A statement of the following form broke row-based replication because it created a table having a field of data type BIGINT with a display width of 3000, which is beyond the maximum acceptable value of 255:
CREATE TABLE t1 AS SELECT REPEAT('A',1000) DIV 1 AS a;
Functionality Added or Changed
On Solaris, mysql_config --libs now includes -R/path/to/library so that libraries can be found at runtime.
Bugs Fixed
InnoDB: A regression introduced by Bug 14329288 would result in a performance degradation when a compressed table does not fit into memory.
InnoDB: The maximum value for innodb_thread_sleep_delay is now 1000000 microseconds. The previous maximum value (4294967295 microseconds on 32-bit and 18446744073709551615 microseconds on 64-bit) was unnecessarily large. Because the maximum value of innodb_thread_sleep_delay is limited by the value set for innodb_adaptive_max_sleep_delay (when set to a non-zero value), the maximum value for innodb_thread_sleep_delay is now the same as the maximum value for innodb_adaptive_max_sleep_delay.
InnoDB: In debug builds, creating a unique index on a binary column, with input data containing duplicate keys, would cause an assertion.
InnoDB: InnoDB would fail to start when innodb_data_file_path specified the data file size in kilobytes by appending K to the size value.
InnoDB: An insert buffer merge would cause an assertion error due to incorrectly handled ownership information for externally stored BLOBs.
InnoDB: Assertion failure in thread thread_num in file ibuf0ibuf.cc line 4080
InnoDB: Failing assertion: rec_get_deleted_flag(rec, page_is_comp(page))
InnoDB: Decreasing the auto_increment_increment value would have no affect on the next auto-increment value.
Replication: The server did not handle correctly the insertion of a row larger than 4 GB when using row-based replication.
Replication: When using row-based replication, an additional auto-increment column on the slave version of a table was not updated correctly; a zero was inserted instead.
Replication: Statements involving the Performance Schema tables should not be written to the binary log, because the content of these tables is applicable only to a given MySQL Server instance, and may differ greatly between different servers in a replication topology. The database administrator should be able to configure (INSERT, UPDATE, or DELETE) or flush (TRUNCATE TABLE) performance schema tables on a single server without affecting others. However, when replicating from a MySQL 5.5 master to a MySQL 5.5 or later slave, warnings about unsafe statements updating Performance Schema tables were elevated to errors. For MySQL 5.6 and later slaves, this prevented the simultaneous use of performance_schema and GTIDs (see Replication with Global Transaction Identifiers, in the MySQL 5.6 Manual).
This fix causes all updates on tables in the performance_schema database to be filtered on the master and not replicated, regardless of the type of logging that is in effect. Prior to this fix, statements using were handled by being marked as unsafe for replication, which caused warnings during execution; the statements were nonetheless written to the binary log, regardless of the logging format in effect.
Existing replication behavior for tables in the INFORMATION_SCHEMA database is not changed by this fix.
For more information, see MySQL Performance Schema.
Compilation failed if MySQL was configured with CFLAGS set to include a -Werror option with an argument.
A shared libmysqld embedded server library was not built on Linux.
While printing the server version, the mysql client did not check for buffer overflow in a string variable.
Contraction information in a collation could be mishandled, resulting in incorrect decisions about whether a character is part of a contraction, and miscalculation of contraction weights.
DROP TRIGGER succeeded even with the read_only system variable enabled.
Updating the Performance Schema setup_instruments table on a replication master caused a slave to exit.
Due to a race condition, it was possible for two threads to end up with the same query ID for different queries.
When run by root, mysqld --help --verbose exited with a nonzero error code after displaying the help message.
MySQL client programs from a Community Edition distribution could not connect using SSL to a MySQL server from an Enterprise Edition. This was due to a difference in certificate handling by yaSSL and OpenSSL (used for Community and Enterprise, respectively). OpenSSL expected a blank certificate to be sent when not all of the --ssl-ca, --ssl-cert, and --ssl-key options were specified, and yaSSL did not do so. To resolve this, yaSSL has been modified to send a blank certificate when an option is missing.
A deadlock error occurring during subquery execution could cause an assertion to be raised.
The Performance Schema stage/sql/Waiting to get readlock instrument is no longer used and has been removed.
For system variables that take a string value, SET statements permitted an unquoted value, but values that contained dots were parsed incorrectly and only part of the value was assigned. For example, SET GLOBAL slow_query_log_file = my_slow.log assigned the value my_slow. Now such values must be quoted or an error occurs.
On Windows, mysql_install_db.pl could be run only from within the bin directory under the installation directory.
Functionality Added or Changed
CMake now supports a -DTMPDIR=dir_name option to specify the default tmpdir value. If unspecified, the value defaults to P_tmpdir in <stdio.h>. Thanks to Honza Horak for the patch.
Bugs Fixed
InnoDB: Table renaming errors would appear in the LATEST FOREIGN KEY ERROR section of the SHOW ENGINE INNODB STATUS output.
Partitioning: Queries using the index_merge optimization (see Index Merge Optimization) could return invalid results when run against tables that were partitioned by HASH.
Partitioning: When no partition had returned a row since the last HA_ERR_KEY_NOT_FOUND error, the use of uninitialized memory in the priority queue used for returning rows in sorted order could lead to a crash of the server.
Replication: mysqlbinlog --verbose failed when it encountered a corrupt row event in the binary log. Such a row event could also cause the slave to fail.
Replication: When log_warnings is greater than 1, the master prints binary log dump thread information—containing the slave server ID, binary log file name, and binary log position—in mysqld.1.err. A slave server ID greater than 2 billion was printed with a negative value in such cases.
Replication: Invalid event offsets in the binary log were not always handled correctly, which could lead to replication failure.
The cache used for the Index Merge access method was freed only after successful retrieval of all rows. Interruption or failure of the operation led to a file descriptor leak.
For utf8 and utf8mb4 strings, handler functions unnecessarily called a Unicode conversion function.
Use of a nonmulti-byte algorithm for skipping leading spaces in multi-byte strings could cause a server exit.
For the utf8_bin collation, ORDER BY LOWER(col_name) could produce incorrect ordering.
On Windows, the --local-service server option did not work, and was not displayed in the --help message.
The prototype of the Performance Schema instrumentation API mysql_cond_timedwait() call was fixed to be drop-in compatible with pthread_cond_timedwait(). This fix affects only implementers of third-party plugins.
For the path specified with the --basedir option, mysql_plugin attempted to unlink the path rather than free the memory in which the path was stored.
COUNT(DISTINCT) sometimes produced an incorrect result when the last read row contained a NULL value.
Some scripts displayed out-of-date information regarding where to report bugs.
Updating a FEDERATED table with UPDATE... JOIN caused a server exit when the local table contained a single row and that row could be joined to a row in the FEDERATED table.
mysql_install_db referred to the obsolete mysqlbug script for reporting problems. It now refers to http://bugs.mysql.com/ instead.
* Previously, MySQL Server distributions included the MySQL Reference Manual in Info format (the Docs/mysql.info file). Because the license for the manual restricts redistribution, its inclusion in Community packages caused problems for downstream redistributors, such as those who create Linux distributions. Community distributions of MySQL Server no longer include the mysql.info file, to make the repackaging and redistribution process easier (for example, the source tarball and its checksum can be used directly). This change applies to all source and binary Community packaging formats. Commercial (Enterprise) distributions are unchanged.
* A new CMake option, WITH_ASAN, permits enabling address sanitization for compilers that support it.
* Attempts to use the thread_concurrency system variable (which has an effect only for Solaris 8 and earlier) now indicate that it has no effect when that is the case.
* Bugs Fixed
* MySQL 5.7 changed audit log file output to a new format that has better compatibility with Oracle Audit Vault. This format has been backported to MySQL 5.5 and it is possible to select either the old or new format using the new audit_log_format system variable, which has permitted values of OLD and NEW (default OLD). For details about each format, see The Audit Log File.
* InnoDB; Partitioning: Following any query on the INFORMATION_SCHEMA.PARTITIONS table, InnoDB index statistics as shown in the output of statements such as SELECT * FROM INFORMATION_SCHEMA.STATISTICS were read from the last partition, instead of from the partition containing the greatest number of rows.
* InnoDB: The row_sel_sec_rec_is_for_clust_rec function would incorrectly prepare to compare a NULL column prefix in a secondary index with a non-NULL column in a clustered index.
* InnoDB: An incorrect purge would occur when rolling back an update to a delete-marked record.
* InnoDB: InnoDB would rename a user-defined foreign key constraint containing the string “_ibfk_” in its name, resulting in a duplicate constraint.
* InnoDB: Rolling back an INSERT after a failed BLOB write would result in an assertion failure. The assertion has been modified to allow NULL BLOB pointers if an error occurs during a BLOB write.
* InnoDB: A regression introduced with the fix for Bug 11762038 would cause InnoDB to raise an incorrect error message. The message stated that, “InnoDB cannot delete/update rows with cascading foreign key constraints that exceed max depth of 20”. The error message would occur when killing connections reading from InnoDB tables that did not have foreign key constraints.
* InnoDB: The documentation incorrectly stated that START TRANSACTION WITH CONSISTENT SNAPSHOT provides a consistent snapshot only if the current isolation level is REPEATABLE READ or SERIALIZABLE. START TRANSACTION WITH CONSISTENT SNAPSHOT only works with REPEATABLE READ. All other isolation levels are ignored. The documentation has been revised and a warning is now generated whenever the WITH CONSISTENT SNAPSHOT clause is ignored.
* InnoDB: The srv_master_thread background thread, which monitors server activity and performs activities such as page flushing when the server is inactive or in a shutdown state, runs on a one second delay loop. srv_master_thread would fail to check if the server is in a shutdown state before sleeping.
more...
* Previously, program options could be specified in full or as any unambiguous prefix. For example, the --compress option could be given to mysqldump as --compr, but not as --comp because the latter is ambiguous. Option prefixes now are deprecated. They can cause problems when new options are implemented for programs. A prefix that is currently unambiguous might become ambiguous in the future. If an unambiguous prefix is given, a warning now occurs to provide feedback. For example:
Warning: Using unique option prefix compr instead of compress is
deprecated and will be removed in a future release. Please use the
full name instead.
Option prefixes are no longer supported in MySQL 5.7; only full options are accepted.
* comp_err now checks to make sure that new errors are not being added to MySQL 5.1 or 5.5 because the set of errors for these series is frozen.
* Bugs Fixed
* mysql_upgrade now verifies that the server version matches the version against which it was compiled, and exits if there is a mismatch. In addiion, a --version-check option permits specifying whether to enable version checking (the default), or disable checking if given as --skip-version-checking.
* Bugs Fixed
The internal interface of the Thread Pool plugin has changed. Old versions of the plugin will work with current versions of the server, but versions of the server older than 5.5.28 will not work with current versions of the plugin.
Bugs Fixed
InnoDB: Certain information_schema tables originally introduced in MySQL 5.6 are now also available in MySQL 5.5 and MySQL 5.1: INNODB_BUFFER_PAGE, INNODB_BUFFER_PAGE_LRU, and INNODB_BUFFER_POOL_STATS.
InnoDB: When a SELECT ... FOR UPDATE, UPDATE, or other SQL statement scanned rows in an InnoDB table using a < or <= operator in a WHERE clause, the next row after the affected range could also be locked. This issue could cause a lock wait timeout for a row that was not expected to be locked. The issue occurred under various isolation levels, such as READ COMMITTED and REPEATABLE READ.
Partitioning: For tables using PARTITION BY HASH or PARTITION BY KEY, when the partition pruning mechanism encountered a multi-range list or inequality using a column from the partitioning key, it continued with the next partitioning column and tried to use it for pruning, even if the previous column could not be used. This caused partitions which possibly matched one or more of the previous partitioning columns to be pruned away, leaving partitions that matched only the last column of the partitioning key.
This issue was triggered when both of the following conditions were met:
The columns making up the table's partitioning key were used in the same order as in the partitioning key definition by a SELECT statement's WHERE clause as in the column definitions;
The WHERE condition used with the last column of the partitioning key was satisfied only by a single value, while the condition testing some previous column from the partitioning key was satisfied by a range of values.
An example of a statement creating a partitioned table and a query against this for which the issue described above occurred is shown here:
CREATE TABLE t1 (
c1 INT,
c2 INT,
PRIMARY KEY(c2, c1)
) PARTITION BY KEY() # Use primary key as partitioning key
PARTITIONS 2;
SELECT * FROM t1 WHERE c2 = 2 AND c1 <> 2;
This issue is resolved by ensuring that partition pruning skips any remaining partitioning key columns once a partition key column that cannot be used in pruning is encountered.
Partitioning: The buffer for the row currently read from each partition used for sorted reads was allocated on open and freed only when the partitioning handler was closed or destroyed. For SELECT statements on tables with many partitions and large rows, this could cause the server to use excessive amounts of memory.
This issue has been addressed by allocating buffers for reads from partitioned tables only when they are needed and freeing them immediately once they are no longer needed. As part of this fix, memory is now allocated for reading from rows only in partitions that have not been pruned (see Section 18.4, “Partition Pruning”).
Replication: On 64-bit Windows platforms, values greater than 4G for the max_binlog_cache_size and max_binlog_stmt_cache_size system variables were truncated to 4G. This caused LOAD DATA INFILE to fail when trying to load a file larger than 4G in size, even when max_binlog_cache_size was set to a value greater than this.
Replication: In master-master replication with --log-slave-updates enabled, setting a user variable and then performing inserts using this variable caused the Exec_master_log_position column in the output of SHOW SLAVE STATUS not to be updated.
The RPM spec file now also runs the test suite on the new binaries, before packaging them.
The libmysqlclient_r client library exported symbols from yaSSL that conflict with OpenSSL. If a program linked against that library and libcurl, it could crash with a segmentation fault.
The argument for LIMIT must be an integer, but if the argument was given by a placeholder in a prepared statement, the server did not reject noninteger values such as '5'.
The Thread Pool plugin did not respect the wait_timeout timeout for client sessions.
CHECK TABLE and REPAIR TABLE could crash if a key definition differed in the .frm and .MYI files of a MyISAM table. Now the server produces an error.
A query for a FEDERATED table could return incorrect results when the underlying table had a compound index on two columns and the query included an AND condition on the columns.
mysqlhotcopy failed for databases containing views.
The argument to the --ssl-key option was not verified to exist and be a valid key. The resulting connection used SSL, but the key was not used.
Adding a LIMIT clause to a query containing GROUP BY and ORDER BY could cause the optimizer to choose an incorrect index for processing the query, and return more rows than required.
mysqlbinlog did not accept input on the standard input when the standard input was a pipe.
Important Change: The YEAR(2) data type is now deprecated because it is problematic. Support for YEAR(2) will be removed in a future release of MySQL. For more information, see Section 11.3.4, “YEAR(2) Limitations and Migrating to YEAR(4)”.
* The --safe-mode server option now is deprecated and will be removed in MySQL
5.6.
* Performance: InnoDB: Improved the algorithm related to adaptive flushing.
This fix increases the rate of flushing in cases where compression is used
and the data set is larger than the buffer pool, leading to eviction.
* InnoDB: In a transaction using the REPEATABLE READ isolation level, an UPDATE
or DELETE statement for an InnoDB table could sometimes overlook rows
recently committed by other transactions. As explained in Section 14.3.9.2,
“Consistent Nonlocking Reads”, DML statements within a REPEATABLE READ
transaction apply to rows committed by other transactions, even if a query
could not see those rows.
* InnoDB: The Innodb_buffer_pool_pages_flushed status variable was incorrectly
set to twice the value it should be. Its value should never exceed the value
of Innodb_pages_written.
* InnoDB: The error handling and message was improved for attempting to create
a foreign key with a column referencing itself. The message suggested
a potential problem with the data dictionary, when no such problem existed.
* InnoDB: The CHECK TABLE statement could fail for a large InnoDB table due to
a timeout value of 2 hours. For typical storage devices, the issue could
occur for tables that exceeded approximately 200 or 350 GB, depending on I/O
speed. The fix relaxes the locking performed on the table being checked,
which makes the timeout less likely. It also makes InnoDB recognize the
syntax CHECK TABLE QUICK, which avoids the possibility of the timeout
entirely.
* Replication: It was theoretically possible for concurrent execution of more
than one instance of SHOW BINLOG EVENTS to crash the MySQL Server.
* Replication: Statements using AUTO_INCREMENT, LAST_INSERT_ID(), RAND(), or
user variables could be applied in the wrong context on the slave when using
statement-based replication and replication filtering server options (see
Section 16.2.3, “How Servers Evaluate Replication Filtering Rules”).
* Replication: An INSERT into a table that has a composite primary key that
includes an AUTO_INCREMENT column that is not the first column of this
composite key is not safe for statement-based binary logging or replication.
Such statements are now marked as unsafe and fail with an error when using
the STATEMENT binary logging format. For more information, see Section
16.1.2.3, “Determination of Safe and Unsafe Statements in Binary Logging”, as
well as Section 16.4.1.1, “Replication and AUTO_INCREMENT”.
Changes (http://dev.mysql.com/doc/refman/5.5/en/news-5-5-24.html):
Functionality Added or Changed
* Important Change: Replication: INSERT ON DUPLICATE KEY UPDATE is now
marked as unsafe for statement-based replication if the target table has
more than one primary or unique key. For more information, see Section
16.1.2.3, "Determination of Safe and Unsafe Statements in Binary
Logging".
Bugs Fixed
* Security Fix: Bug #64884 was fixed.
* InnoDB: Replication: When binary log statements were replayed on the
slave, the Com_insert, Com_update, and Com_delete counters were
incremented by BEGIN statements initiating transactions affecting InnoDB
tables but not by COMMIT statements ending such transactions. This
affected these statements whether they were replicated or they were run
using mysqlbinlog. (Bug #12662190)
* If the --bind-address option was given a host name value and the host
name resolved to more than one IP address, the server failed to
start. For example, with --bind-address=localhost, if localhost resolved
to both 127.0.0.1 and ::1, startup failed. Now the server prefers the
IPv4 address in such cases. (Bug #61713, Bug #12762885)
* mysql_store_result() and mysql_use_result() are not for use with
prepared statements and are not intended to be called following
mysql_stmt_execute(), but failed to return an error when invoked that
way in libmysqld. (Bug #62136, Bug #13738989)
References: See also Bug #47485.
* On Windows, mysqlslap crashed for attempts to connect using shared
memory. (Bug #31173, Bug #11747181, Bug #59107, Bug #11766072)
Bugs Fixed
* Security Fix: Bug 59533 was fixed.
* Performance: Partitioning: InnoDB Storage Engine: The statistics used by the
optimizer for queries against partitioned InnoDB tables were based only on the
first partition of each such table, leading to use of the wrong execution
plan.
* References: This bug was introduced by Bug 11756867.
* Performance: InnoDB Storage Engine: Improved the performance of the DROP TABLE
statement for InnoDB tables, especially on systems with a large buffer pool.
The fix speeds up the processing for freeing entries in the adaptive hash
index.
* InnoDB Storage Engine: Deleting a huge amount of data from InnoDB tables
within a short time could cause the purge operation that flushes data from the
buffer pool to stall. If this issue occurs, restart the server to work around
it. This issue is only likely to occur on 32-bit platforms.
* InnoDB Storage Engine: If the server crashed during a TRUNCATE TABLE or CREATE
INDEX statement for an InnoDB table, or a DROP DATABASE statement for
a database containing InnoDB tables, an index could be corrupted, causing an
error message when accessing the table after restart:
InnoDB: Error: trying to load index index_name for table table_name
InnoDB: but the index tree has been freed!
In MySQL 5.1, this fix applies to the InnoDB Plugin, but not the built-in
InnoDB storage engine.
* InnoDB Storage Engine: When data was removed from an InnoDB table, newly
inserted data might not reuse the freed disk blocks, leading to an unexpected
size increase for the system tablespace or .ibd file (depending on the
setting of innodb_file_per_table. The OPTIMIZE TABLE could compact a .ibd file
in some cases but not others. The freed disk blocks would eventually be
reused as additional data was inserted.
More...
* InnoDB Storage Engine: A deprecation warning is now issued when
--ignore-builtin-innodb is used.
* yaSSL was upgraded from version 1.7.2 to 2.2.0.
* Security Fix: Bug 13510739 and Bug 63775 were fixed.
* Important Change: InnoDB Storage Engine: When a row grew in size due to an
UPDATE operation, other (non-updated) columns could be moved to off-page
storage so that information about the row still fit within the constraints of
the InnoDB page size. The pointer to the new allocated off-page data was not
set up until the pages were allocated and written, potentially leading to
lost data if the system crashed while the column was being moved out of the
page. The problem was more common with tables using ROW_FORMAT=DYNAMIC or
ROW_FORMAT=COMPRESSED along with the Barracuda file format, particularly with
the innodb_file_per_table setting enabled, because page allocation operations
are more common as the .ibd tablespace files are extended. Still, the problem
could occur with any combination of InnoDB version, file format, and row
format.
* InnoDB Storage Engine: An erroneous assertion could occur, in debug builds
only, when creating an index on a column containing zero-length values (that
is, '').
* InnoDB Storage Engine: A DDL operation such as ALTER TABLE ... ADD COLUMN
could stall, eventually timing out with an Error 1005: Can't create table
message referring to fil_rename_tablespace.
* InnoDB Storage Engine: A DDL operation for an InnoDB table could cause a busy
MySQL server to halt with an assertion error:
More...