A known limitation of this release:
InnoDB may fail to open a tablespace that
has multiple data files due to newly introduced corruption
checking functionality. It is recommended that you do not
upgrade to this version if you have more than one file for
InnoDB tablespace. If you have
upgraded to an affected version and the server no longer
starts, you can upgrade to a later version when it becomes
available or downgrade to an earlier version.
Functionality Added or Changed
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
permits specifying whether to enable version checking (the
default), or disable checking if given as
Important Change; Replication:
When the server was running with
NULL (that is, there was no currently
selected database), statements using fully qualified table names
format were not written to the binary log. This was because the
lack of a currently selected database in such cases was treated
as a match for any possible ignore option rather than for no
such option; this meant that these statements were always
Now, if there is no current database, a statement using fully qualified table names is always written to the binary log. (Bug #11829838, Bug #60188)
When calling the
function after releasing the kernel mutex, there is a chance the
lock might be invalid and result in a Valgrind error due to an
invalid read on
lock->index. This fix copies
lock->index when the kernel mutex is
being held and passes the
(Bug #17022398, Bug #69413, Bug #16268289, Bug #68244)
After a clean shutdown,
InnoDB does not check
.ibd file headers at startup. As a result,
in a crash recovery scenario,
load a corrupted tablespace file. This fix implements
consistency and status checks to avoid loading corrupted files.
page_zip_available function would count
some fields twice.
In debug builds, an insert would fail with an invalid assertion:
sync_thread_levels_g(array, level - 1, TRUE).
Multiple concurrent calls to
dict_update_statistics() would result in
unnecessary server load.
InnoDB: When tables are linked by foreign key constraints, loading one table would open other linked tables recursively. When numerous tables are linked by foreign key constraints, this would sometimes lead to a thread stack overflow causing the server to exit. Tables linked by foreign key constraints are now loaded iteratively. Cascade operations, which were also performed in a recursive manner, are now performed iteratively using an explicit stack. (Bug #16244691, Bug #65384)
When a transaction is in
COMMITTED isolation level, gap locks are still taken
in the secondary index when a row is inserted. This occurs when
the secondary index is scanned for duplicates. The function
calls the function
LOCK_ORDINARY irrespective of the transaction
isolation level. This fix modifies the
function to call
LOCK_REC_NOT_GAP, based on the transaction
(Bug #16133801, Bug #68021)
Starting mysqld with
failed to allocate memory and returned NULL. For non-debug
builds there was no check in place and a segmentation fault
occurred. This fix adds a log message stating that memory failed
to be allocated, and adds an assertion.
(Bug #16069598, Bug #68025)
UNIV_DEBUG is enabled in debug builds,
buf_validate() is often called which
sometimes results in false alarms in tests on semaphore wait
timeout. This fix increases counter values to reduce false
explain_filename function, which provides
information about a partition by parsing the file name, would
return an error when attempting to parse a file name with no
UPDATE statements in which an
error occurred, it was possible for a temporary file opened
during the update not to be closed.
An overflow would occur for
innodb_row_lock_current_waits. This fix
modifies code logic in
Point-in-time recovery could fail when trying to restore a
single database from a binary log in row-based format using
mysqlbinlog with the
When used with the options
mysqldump printed the port number within
quotation marks, as if it were a string value rather than an
Running the server with
--log-slave-updates together with
--replicate-ignore-table in some
cases caused updates to user variables not to be logged.
Following disconnection from the master, the slave could under
certain conditions report erroneously on reconnection that it
had received a packet that was larger than
causing replication to fail.
(Bug #16438800, Bug #68490)
When semisynchronous replication was enabled, the automatic
dropping on the master of an event created using
COMPLETION NOT PRESERVE caused the master to fail.
(Bug #15948818, Bug #67276)
SET column to
NULL inside a stored procedure caused
replication to fail.
(Bug #14593883, Bug #66637)
The binary log contents got corrupted sometimes, because the
thought it had reached the end-of-cache when the function
my_b_fill() reported a '0,' while that could
also mean an error had occurred. This fix makes sure that
my_b_fill() returns a '0,' an error
check is performed on
(Bug #14324766, Bug #60173)
When replicating to a
table using the binary logging format, updates and deletes
cannot be applied and so are skipped. Now a warning is generated
for this whenever it occurs.
The WKB reader for spatial operations could fail and cause a server exit. (Bug #16451878)
Several scripts in the
that were supposed to be executable did not have the executable
access bit set.
For debug builds,
DBUG_EXPLAIN resulted in a
buffer overflow when the
system variable value was more than 255 characters.
could not be set at server startup.
Oracle RPM packages were unusable by
to issues with the
obsoletes line in the
.spec file causing yum
to interpret the package as obsoleting itself.
containing subquery having an outer reference caused the server
For debug builds,
BY) within an
ORDER BY clause could
cause a server exit.
If loose index scan was used on a query that used
MIN(), a segmentation fault could
If multiple statements were sent in a single request, the audit log plugin logged only the last one. Now it logs each statement separately. (Bug #16169063)
A prepared statement that used
GROUP_CONCAT() and an
ORDER BY clause that named multiple columns
could cause the server to exit.
ORDER BY MATCH ... AGAINST could cause a
The mysql.server script exited with an error
status command was executed with
multiple servers running.
A query with a union and a join could crash the parser. (Bug #14786792, Bug #16076289)
Installation using Solaris packages ran mysql_install_db during upgrade operations (this should occur only for new installations). (Bug #14747671, Bug #16534721)
When processing row-based-replication events in the old binary log format from prior to MySQL 5.1 GA builds, mysqlbinlog could result in out-of-bounds heap buffer reads and undefined behaviour. (Bug #14771299)
The mysql client allocated but did not free a string after reading each line in interactive mode, resulting in a memory leak. (Bug #14685362)
INSERT ... ON DUPLICATE
KEY UPDATE on a view could cause a server exit.
Grouping by an outer
in a subquery caused a server exit.
(Bug #13966809, Bug #14700180)
The server could exit due to improper handling of the error from an invalid comparison. (Bug #13009341)
The CMake check for
time_t failed on all platforms.
On 64-bit Mac OS X systems, CMake used
x86 rather than
when determining the machine type.
(Bug #58462, Bug #11765489)
The parser rejected legal queries that involved a
UNION where the right hand side
query term has a table in parenthese.
(Bug #54382, Bug #11761854)
url columns in the
mysql datatbase help tables were too short to
hold some of the URLs in the help content. For new
installations, these columns are now created as type
TEXT to accommodate longer URLs.
For upgrades, mysql_upgrade does not update the columns. Modify them manually using these statements:
ALTER TABLE mysql.help_category MODIFY url TEXT NOT NULL; ALTER TABLE mysql.help_topic MODIFY url TEXT NOT NULL;
(Bug #61520, Bug #12671635)
If Loose Index Scan was used to evaluate a query that compared
an integer column to an integer specified as a quoted string
), the query could return incorrect results.
(Bug #68473, Bug #16394084)
IF() function evaluations could
produce different results when executed in a prepared versus
(Bug #45370, Bug #11753852)
It is now possible to suppress installation of the
mysql-test directory after compiling MySQL
from source by invoking CMake with the
explicitly set to empty:
cmake . -DINSTALL_MYSQLTESTDIR=
Previously, attempts to do this resulted in an error. (Bug #58615, Bug #11765629)
Using range access with an index prefix could produce incorrect results. (Bug #68750, Bug #16540042)
MD5() code did not properly
initialize one of its data structures.
(Bug #68909, Bug #16626742)
When specified in an option file, the
plugin-dir client option was ignored.
(Bug #68800, Bug #16680313)
UPDATE containing a
subquery caused a deadlock inside
InnoDB, the deadlock was not
properly handled by the SQL layer. The SQL layer then tried to
unlock the row after
InnoDB rolled back the
transaction, raising an assertion inside
(Bug #69127, Bug #16757869)
MySQL Configuration Wizard did not anticipate existing files
from a previous MySQL install operation, causing it to fail
starting the MySQL service. (Workaround: Manually delete MySQL
data in the
(Bug #62106, Bug #16777237)