Most of MySQL gurus and famous users are probably in San Francisco now, getting ready for fun at MySQL Connect. Part of that fun should come from the announcement of great new
MySQL 5.6.14 release (that somewhat silently happened yesterday).
I am sitting at home though and I've seen at best 3 sunny days in September. The rest of the time it rains, so hardly I can do anything more funny and useful than review of MySQL bug reports even during my weekend. Let me try to tell you what MySQL 5.6.14 is really about and what you should expect from it based on the list of bugs fixed. Please, do not blame me if my summary would be different from the upcoming keynotes at MySQL Connect. It rains here...
I'll use good old approach of checking my older posts about bugs in MySQL 5.6.13 and comparing it to the
release notes of MySQL 5.6.14. You have to read them carefully anyway to check if any of the bugs you cared about are fixed. Chances are real, with 67 or so bugs mentioned, but previous releases of MySQL 5.6 GA contained notably more fixes. Either release before MySQL Connect was a top priority or MySQL 5.6 is getting mature now, with less problems remaining to solve in new releases.
Let's check, starting from InnoDB bugs I had written about
back in June. From the bugs I mentioned there I see no new fixes, even
Bug #69179 (that I've mentioned many times and that should be already fixed in recent Percona Server 5.5.x) and
Bug #69236 (single thread performance regression affecting Facebook) are still just "Verified".
Bug #69325 is also still "Verified", even though at least documenting potential memory use by ALTER against a partitioned InnoDB table (as it was suggested by Shane back in May) would help a lot...
MySQL 5.6.13 was released less than 2 months ago, so surely one should not expect that all new bugs are fixed so fast. But I am really disappointed to see
Bug #69892 (that questions the possibility of forced recovery if InnoDB persistent statistics was ever used and
that I had written about here) still "Verified".
It can not be that bad, so I checked later
post, and found one problem I've cared about solved in MySQL 5.6.14. The problem of improper use of InnoDB tables to store replication information (see
Bug #69898) is fixed. Related
Bug #69907 is still "Verified", even though recent comment claim it is a duplicate of the previous one and must be fixed in MySQL 5.6.14. Let's assume it's a matter of documenting or just a mistake. In any case, if you plan to use crash safe replication in MySQL 5.6, you should upgrade to 5.6.14 ASAP!
Of the InnoDB bugs I had not paid attention to recently that I'd like to mention the following ones fixed (quote from the Release Notes):
- 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.
(Bug #11766851, Bug #60071)
- InnoDB:
When logging the delete-marking of a record during online
ALTER TABLE...ADD
PRIMARY KEY
, InnoDB
writes the
transaction ID to the log as it was before the deletion or
delete-marking of the record. When doing this,
InnoDB
would overwrite the
DB_TRX_ID
field in the original table, which
could result in locking issues.
(Bug #17316731)
- 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.
(Bug #17312846)
- InnoDB:
An incorrect purge would occur when rolling back an update to a
delete-marked record.
(Bug #17302896)
- InnoDB:
An assertion would be raised in
fil_node_open_file
due to a missing
.ibd
file. Instead of asserting,
InnoDB
should return false and the caller of
fil_node_open_file
should handle the return
message.
(Bug #17305626, Bug #70007)
- InnoDB:
The assertion
ut_ad(oldest_lsn <= cur_lsn)
in file buf0flu.cc
would fail because the
current max LSN would be retrieved from the buffer pool before
the oldest LSN.
(Bug #17252421)
Bug #60071 was waiting since 5.5 GA times and it's great to see it fixed.
Bug #70007, on the other hand, was reported just a month ago against 5.6.13. Both fixes should make my colleague Justin happy.
Other bugs sounds serious and show good work of MySQL QA in Oracle probably, but it's hard to say anything more than we see in the Release Notes as all the details are hidden in internal Oracle's bugs database.
Let's move on to replication bugs I mentioned
in June.
Bug #69444 is still "Verified".
Bug #69135 from Giuseppe is till "Open". Even
Bug #69097 is still "Verified", since April 30... Read
Bug #69095 to find out why you should not switch replication format from STATEMENT to ROW if you use GTIDs and why failures in this case do not indicate any bug... I hope Giuseppe is satisfied (I am just not brave enough to recommend to switch to GTID-based replication in production, yet).
Bug #68892 is closed, but it says the fix will go to MySQL 5.6.15...
To summarize, MySQL 5.6.14 had NOT solved any more of my replication-related concerns expressed back in June, comparing to 5.6.13. The only really great improvement is the fix for
Bug #69898, as explained above. Your millage may vary though, as I see many fixes to bugs in internal bugs database related to Replication, like these (quote from the Release Notes):
-
Replication:
When a master with semisynchronous replication enabled was shut
down, the master failed to wait for either a semisyncnronous
ACK
or timeout before completing the
shutdown. This prevented semisynchronous replication from
reverting to asynchronous replication and allowed open
transactions to complete on the master, which resulted in
missing events on the slave.
To fix this problem, dump threads are now stopped last during
shutdown, after the client is told to stop, so that, if the dump
thread has pending events from active clients, they can be sent
to the slave.
(Bug #16775543)
-
Replication:
A session attachment error during group commit causes the
rollback of the transaction (as intended), but the transaction
in which this happened was still written to the binary log and
replicated to the slave. Thus, such an error could lead to a
mismatched master and slave.
Now when this error occurs, an incident event is written in the
binary log which causes replication to stop, and notifies the
user that redundant events may exist in the binary log. An
additional error is also now reported to the client, indicating
that the ongoing transaction has been rolled back.
(Bug #16579083)
-
Replication:
START SLAVE
failed when the
server was started with the options
--master-info-repository=TABLE
relay-log-info-repository=TABLE
and with autocommit
set to 0,
together with --skip-slave-start
.
A workaround for previous versions of MySQL is to restart the
slave mysqld without the
--skip-slave-start
option.
(Bug #16533802)
Probably I have to stop at this stage and try to get some real-life experience with MySQL 5.6.14...
To summarize: if you use MySQL 5.6 in production setup where replication is a key component, you should definitely upgrade to MySQL 5.6.14. Do not expect it to solve all the problems you cared about though, for me it was not the case.