This is a milestone release, for use at your own risk. Upgrades between milestone releases (or from a milestone release to a GA release) are not supported. Significant development changes take place in milestone releases and you may encounter compatibility issues, such as data format changes that require attention in addition to the usual procedure of running mysql_upgrade. For example, you may find it necessary to dump your data with mysqldump before the upgrade and reload it afterward. (Making a backup before the upgrade is a prudent precaution in any case.)
Important Change; Microsoft Windows: MySQL builds on Windows using Visual Studio now require Visual Studio 2013 or later. The previous requirement was Visual Studio 2010 or later. (Bug #18404381)
-
Important Change: The atomic-operations API was simplified to use only the existing GCC built-in implementation or platform-provided implementations (for Windows, Solaris), and to remove the custom mutex-based fallback implementation. The retained implementations are those able to use CPU-native atomics. This simplifies the atomics APIs and related code and deals with bugs resulting from the fallback implementation.
As part of this work, the (undocumented)
WITH_ATOMIC_LOCKSandMY_ATOMIC_MODE_RWLOCKSCMake options were removed.On platforms where native atomics are supported, this change introduces no issues. For other platforms, here are potential MySQL compilation issues, and solutions:
32-bit Linux variants that use GCC 4.1 will no longer work. This includes Red Hat 5, which is a supported platform. The solution to this problem is to use a new GCC or set the
-marchcompiler option. For example, use GCC 4.4, which is available on Red Hat 5. For information about specifying compiler options, see Compiler Flags.There may be issues on unsupported platforms. For example, 64-bit PowerPC, 32-bit ARM, and 64-bit ARM will not compile with older compilers. The solution for these cases is to use GCC 4.7 or later.
(WL #7655)
CMake now checks for minimum versions of supported compilers: gcc 4.4 (Linux, Solaris); Sun Studio 12u2 (Solaris client library); Clang 3.3 (OS X, FreeBSD). This check can be disabled with the
-DFORCE_UNSUPPORTED_COMPILER=ONoption. (Bug #19187034)Noisy compiler warnings on FreeBSD 10 were silenced. (Bug #18790490)
-
CMake workarounds for older OS X and XCode versions were removed. On OS X, compilation always uses Clang, even for 32-bit builds.
Compilation on OS X is now supported for OS X 10.8 and up, using XCode 5 and up. Compilation on older versions may work but is unsupported. (Bug #18510941)
-
Previously, the
MYSQL_MAINTAINER_MODECMake option was turned on by default for debug builds and off for release builds, andMYSQL_MAINTAINER_MODEcaused-Werrorto be enabled when building with GCC. This made it cumbersome to enable-Werrorunder certain conditions, such as when compiling with Clang.Now,
MYSQL_MAINTAINER_MODEis on by default when compiling debug builds with GCC, andMYSQL_MAINTAINER_MODEenbles-Werrorregardless of whether GCC or Clang is used. Enabling-Werrorwith Clang can be done simply by explicitly setting-DMYSQL_MAINTAINER_MODE=1when running CMake. In addition, some compilation warnings reported by Clang 3.4 were fixed, making it possible to build the default debug build with-Werror. (Bug #18313717) Build support was modified to produce the same warnings for Clang as for gcc. (Bug #17959689)
Work was done to clean up the source code base, including: Removing unneeded CMake checks; removing unused macros from source files; reorganizing header files to reduce the number of dependencies and make them more modular, removing function declarations without definitions, replacing locally written functions with equivalent functions from industry-standard libraries.
-
Incompatible Change: mysql_install_db has been rewritten from Perl into C++. This enables it to be provided as an executable binary and eliminates its dependency on having Perl installed.
The new implementation involves several other differences as well. The following items list some of the most significant changes. For more information, see mysql_install_db — Initialize MySQL Data Directory.
The executable binary version is located in the
bininstallation directory, whereas the Perl version was located in thescriptsinstallation directory. For upgrades from an older version of MySQL, you may find a version of mysql_install_db in both directories. To avoid confusion, remove the version from thescriptsdirectory. For fresh installations of MySQL 5.7.5 or later, mysql_install_db is only found in thebindirectory, and thescriptsdirectory is no longer present. Applications that expect to find mysql_install_db in thescriptsdirectory should be updated to look in thebindirectory instead.Some options are handled differently. For example, the
--datadiroption is mandatory.There are several new options. For example, there are options that afford explicit control over the administrative account that is created. By default, this is
'root'@'localhost', but you can use--admin-userand--admin-hostto change the user and host parts of the account name.Several options have been removed or replaced. For example,
--skip-random-passwordshas been replaced by--insecure.mysql_install_db always overwrites the
.mysql_secretfile, rather than appending to it if it exists. It is assumed that immediately after installation, you will connect to the server using the file contents and reset the administrative password before proceeding to another deployment.mysql_install_db no longer passes unrecognized options to mysqld. (But you can use
--defaults-extra-fileto specify an option file to be added to the mysqld bootstrapping command.)mysql_install_db no longer creates a default
my.cnffile.
(WL #7688)
Incompatible Change: In MySQL 5.6.6, the
YEAR(2)data type was deprecated. Support forYEAR(2)has now been removed. Once you upgrade to MySQL 5.7.5 or newer, any remainingYEAR(2)columns must be converted toYEAR(4)to become usable again. For conversion strategies, see 2-Digit YEAR(2) Limitations and Migrating to 4-Digit YEAR. For example, run mysql_upgrade after upgrading. (WL #6263)-
Incompatible Change: The
InnoDBstorage engine can no longer be disabled. The--skip-innodboption is deprecated and has no effect, and its use results in a warning. It will be removed in a future MySQL version. This also applies to its synonyms (--innodb=OFF,--disable-innodb, and so forth).A new
innodb_lock_no_retryflag for the--debugoption is now available.--debug='d,innodb_lock_no_retry'causesInnoDBto fail immediately during startup if locks cannot be acquired, rather than making 100 attempts before failing. This may be useful during testing or debugging to produce faster server exit whenInnoDBcannot acquire its locks.One reason for disabling
InnoDBis to enable starting a server instance using the same data directory as an existing instance. (MyISAMpermits that, butInnoDBdoes not.) BecauseInnoDBcan no longer be disabled, the workaround is to stop the existing instance before starting another so that there is only one active instance using a data directory at a time. (WL #7976) The deprecated
timed_mutexessystem variable has been removed. (Bug #18277305, WL #7436)The deprecated mysqlhotcopy utility has been removed from MySQL distributions. Alternatives include mysqldump and MySQL Enterprise Backup. (WL #7854)
The deprecated mysqlbug, mysql_waitpid, and mysql_zap utilities have been removed from MySQL distributions. (WL #7689, WL #7826)
The deprecated
storage_enginesystem variable has been removed. Usedefault_storage_engineinstead. (WL #7148)
MySQL now includes DTrace support on Oracle Linux 6 or higher with UEK kernel. If DTrace is present, server builds will detect it with no special CMake options required. For information about using DTrace on MySQL, see Tracing mysqld Using DTrace. (WL #7894)
-
The server was made more consistent and resilient with regard to handling of statements for which the
IGNOREkeyword is specified.The server failed to report warnings for
INSERT IGNOREstatements.The server could fail to report warnings for multiple-table
DELETE IGNOREstatements.UPDATEtriggers for a table were invoked even forUPDATE IGNOREstatements for which a unique index caused the update to be ignored.For debug builds, an assertion could be raised for errors occurring in
DELETE IGNOREstatements.For debug builds, an assertion could be raised for deadlocks resulting from
DELETE IGNOREstatements.For
DELETE IGNOREexecuted on the parent table in a foreign key relationship, foreign key violation errors were treated as warnings (correct), but rows that did not produce foreign key violations were not deleted.
The server was made more consistent and resilient with regard to handling of statements in strict SQL mode.
In strict SQL mode, triggers could permit operations not permitted in strict mode.
In strict SQL mode, deprecation warnings about duplicate indexes were incorrectly promoted to errors.
Strict SQL mode was not applied to multiple-table
DELETEstatements.
For more information about
IGNOREand strict SQL mode, see Comparison of the IGNORE Keyword and Strict SQL Mode. (Bug #6196, Bug #11744960, Bug #43895, Bug #11752648, Bug #68726, Bug #16522924, Bug #16860715, Bug #16860829, Bug #14786621, Bug #17550423, Bug #42910, Bug #11751889, Bug #16976939, Bug #18526888, WL #6614, WL #6891)
-
Incompatible Change: A new log record type (
MLOG_FILE_NAME) is used to identify file-per-table tablespaces that have been modified since the last checkpoint. This enhancement simplifies tablespace discovery during crash recovery and eliminates scans on the file system prior to redo log application. For more information about the benefits of this enhancement, see Tablespace Discovery During Crash Recovery.This enhancement changes the redo log format, requiring that MySQL be shut down cleanly before upgrading to or downgrading from MySQL 5.7.5. (WL #7142, WL #7806)
The optimizer computes more accurate costs for semijoin materialization. (Bug #18558561)
Optimizer trace output for range access in the
considered_access_pathsection has been improved: Instead of always printing"access_type": "ref"for index lookup types,"eq_ref","ref", or"fulltext"is now printed. (Bug #18195373)-
During query execution plan construction, the optimizer now can use condition filtering to better use conditions on a table in estimating the number of qualifying rows to join to the next table. For example, even though there might be an index-based access method that can be used to select rows from the current table in a join, there might also be additional conditions for the table in the
WHEREclause that can filter (further restrict) the estimate for qualifying rows passed to the next table.To control whether the optimizer considers additional filtering conditions, use the
condition_fanout_filterflag of theoptimizer_switchsystem variable. This flag is enabled by default but can be disabled to suppress condition filtering (for example, if a particular query is found to yield better performance without it).For more information, see Condition Filtering. (WL #6635)
-
The optimizer now uses more exact index statistics. Currently, the improved values are used by
InnoDB, with these effects:In many cases, better execution plans result for queries for which previously a less optimal join index or table join order was chosen.
The row estimates in
EXPLAINoutput are more accurate, as well as the filter values in some cases.Cardinality estimates in the index statistics displayed by
SHOW INDEXare more accurate forInnoDBtables.
(WL #7339)
-
To generate execution plans, the optimizer uses a cost model that is based on estimates of the cost of various operations that occur during query execution. The optimizer has a set of compiled-in default “cost constants” available to it to make decisions regarding execution plans.
The optimizer now also has a database of cost estimates to use during execution plan construction. These estimates are stored in the
server_costandengine_costtables in themysqlsystem database and are configurable at any time: Any non-NULLcost estimate stored in the cost model tables overrides the corresponding compiled-in default estimate. AnyNULLestimate indicates to the optimizer to use the compiled-in default.Implementation and testing is ongoing to make it safe for DBAs to change these values. Currently, changing them should be considered at your own risk.
There is also a new
FLUSHvariant,FLUSH OPTIMIZER_COSTS, that causes the server to re-read the cost tables and apply any changed estimates to new sessions.For more information, see The Optimizer Cost Model.
If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate these changes into the
mysqldatabase. (WL #6564, WL #6589, WL #7276, WL #7315, WL #7316)
-
Incompatible Change: The Performance Schema now provides a
user_variables_by_threadtable that exposes user-defined variables. For more information, see Performance Schema User-Defined Variable Tables.In consequence of this change, the server now limits user-defined variable names to a maximum of 64 characters, the length of the
VARIABLE_NAMEcolumn in the table. Previously, the server did not enforce a limit. The new limit is similar to the limit on the lengths of many other identifiers in MYSQL (see User-Defined Variables). Queries that use very long user-defined variable names must be rewritten to user shorter names.If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate this change into the
performance_schemadatabase. (WL #6884) -
Previously, for the wait event tables (such as
events_waits_current), theNUMBER_OF_BYTEScolumn wasNULLfor table I/O waits; that is, for events for thewait/io/table/sql/handlerinstrument. For table I/O waits, this value now indicates the number of rows processed.In addition, for batch I/O operations (such as row fetches for table or index scans), the Performance Schema now can report a single event for
Nrows, rather than reporting a single-row eventNtimes. This change significantly reduces Performance Schema overhead for table batch I/O by reducing the number of reporting calls. The tradeoff is lesser accuracy for event timing. Rather than time for an individual row operation as in per-row reporting, timing for batch I/O includes time spent for operations such as join buffering, aggregation, and returning rows to the client.For more information on the conditions under which batch I/O reporting occurs, see the description of the
NUMBER_OF_BYTEScolumn in The events_waits_current Table. (WL #7802) -
The Performance Schema stage event tables (
events_stages_current,events_stages_history, andevents_stages_history_long) contain two new columns that, taken together, provide a stage progress indicator for each row:WORK_COMPLETED: The number of work units completed for the stageWORK_ESTIMATED: The number of work units expected for the stage
Each column is
NULLif no progress information is provided for an instrument. Interpretation of the information, if it is available, is entirely up to the instrument implementation. Initially, to demonstrate the concept, thestage/sql/copy to tmp tableinstrument provides progress information if it is enabled. In this case, the unit for interpretation of the columns is number of rows copied.For more information, see Performance Schema Stage Event Tables.
If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate this change into the
performance_schemadatabase. (WL #7414)
-
Incompatible Change: MySQL 5.6 deprecated passwords that used the older pre-4.1 password hashing format. Support for these passwords is now removed, which involves the following changes. Applications that use any feature no longer supported must be modified.
-
The server-side
mysql_old_passwordauthentication plugin is removed. Accounts that use this plugin are disabled at startup and the server writes an “unknown plugin” message to the error log. For instructions on upgrading accounts that use this plugin, see Migrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin.The client-side
mysql_old_passwordauthentication plugin is removed from the C client library. The
--secure-authoption to the server and client programs is the default, but is now a no-op. It is deprecated and will be removed in a future MySQL version.The
--skip-secure-authoption to the server and client programs is no longer supported and using it produces an error.The
secure_authsystem variable permits only a value of 1; a value of 0 is no longer permitted.For the
old_passwordssystem variable, a value of 1 (produce pre-4.1 hashes) is no longer permitted.The
OLD_PASSWORD()function has been removed.The mysqladmin
old-passwordcommand has been removed.
(WL #8006)
-
-
MySQL now includes a server-side authentication plugin named
mysql_no_loginfor setting up accounts that accept no client connections. This plugin enables DBAs to implement the following use cases:Stored program and view objects that perform sensitive or adminstrative operations must run with elevated privileges. Less-privileged users must be able to execute these objects but not be able to directly log in as the account that has the privileges. To implement this, create a no-login account using
mysql_no_login, grant it the required privileges, define objects with aDEFINERof that account, and includeSQL SECURITY DEFINERin the definitions.Access to a proxy account must always be by the usual proxy mechanism, never by users logging in directly to the proxy account. To implement this, assign
mysql_no_loginas the authentication plugin when you create the proxy account.
For more information, see No-Login Pluggable Authentication. (WL #7726)
-
MySQL distributions now attempt to deploy with SSL and RSA capabilities enabled by default.
To make it easier to support encrypted connections, MySQL servers compiled using OpenSSL now can automatically generate SSL and RSA files at startup if they are missing:
The server automatically generates server-side and client-side SSL certificate and key files in the data directory if the new
auto_generate_certssystem variable is enabled, no SSL options other than--sslare specified, and the server-side SSL files are missing from the data directory. These files enable encrypted client connections using SSL.The server automatically generates RSA private/public key-pair files in the data directory if the new
sha256_password_auto_generate_rsa_keyssystem variable is enabled, no RSA options are specified, and the RSA files are missing from the data directory. These files enable secure password exchange using RSA over unencrypted connections for accounts authenticated by thesha256_passwordplugin.
The server-side
--ssloption value now is enabled by default for all servers. For servers compiled using OpenSSL, if--sslis enabled and other SSL options are not given to configure SSL explicitly, the server attempts to enable SSL automatically at startup:If the server finds valid SSL files named
ca.pem,server-cert.pem, andserver-key.pemin the data directory, it enables SSL to permit SSL connections by clients. (These files need not have been autogenerated; what matters is that they have the indicated names and are valid.)If the server does not find valid SSL files in the data directory, it continues executing but does not enable SSL.
For any SSL and RSA files that the server finds and uses automatically, it uses the file names to set the corresponding system variables (
ssl_ca,ssl_cert,ssl_key,sha256_password_private_key_path,sha256_password_public_key_path).For more information, see Configuring MySQL to Use Encrypted Connections, and Creating SSL and RSA Certificates and Keys using MySQL. (WL #7699)
-
InnoDB:
SPATIALindexes can now be used forInnoDBtables.InnoDBsupports indexing of spatial data types, including use ofALTER TABLE ... ALGORITHM=INPLACEfor online operations (ADD SPATIAL INDEX). To support transaction isolation properties,InnoDBuses predicate locking. A predicate lock locks the minimum bounding rectangle (MBR) used for a query so that other transactions cannot insert or modify a row that would match the query condition.For more information, see Optimizing Spatial Analysis. and Predicate Locks for Spatial Indexes. (Bug #18674219, WL #6968, WL #6745, WL #6609)
-
The Open Geospatial Consortium guidelines document the use of open polygons (polygons where the start point is not equal to the end point) but the MySQL GIS implementation did not support them. Now MySQL supports open polygons: An open polygon is converted to a closed one by appending the starting point to the point sequence. Before:
mysql> SELECT AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))')); +---------------------------------------------------------------+ | AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))')) | +---------------------------------------------------------------+ | NULL | +---------------------------------------------------------------+After:
mysql> SELECT AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))')); +---------------------------------------------------------------+ | AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))')) | +---------------------------------------------------------------+ | POLYGON((10 10,20 10,20 20,10 20,10 10)) | +---------------------------------------------------------------+(Bug #17168699)
GeometryCollection()returnedNULLif the argument contained nonsupported geometries. NowGeometryCollection()returns all the proper geometries contained in the argument even if a nonsupported geometry is present. (Bug #17168643)-
This MySQL release makes increased use of the Boost.Geometry library to provide better reliability and increased functionality for spatial functions. As a result, several previously unimplemented functions have been implemented, and several previously existing functions now accept a wider range of geometry argument types (or argument type combinations for functions that take multiple geometries):
These previously unimplemented spatial operator functions are now available:
ST_ConvexHull,ST_Difference(),ST_Intersection(),ST_SymDifference(), andST_Union().These previously existing functions are more robust and return non-
NULLvalues for more geometry argument types:ST_Area(),ST_Centroid(),ST_Contains(),ST_Crosses(),ST_Disjoint(),ST_Distance(),ST_Envelope(),ST_Equals(),ST_Intersects(),ST_Overlaps(),ST_Touches(), andST_Within(). These functions also exist as non-ST_synomyms; for example,ST_Area()andArea()are synonyms.
(WL #7220, WL #7221, WL #7236)
MySQL now includes functions for converting between GeoJSON documents and spatial values:
ST_AsGeoJSON()andST_GeomFromGeoJSON(). For more information, see Spatial GeoJSON Functions. (WL #7444)-
MySQL now includes functions that enable manipulation of geohash values, which provides applications the capabilities of importing and exporting geohash data, and of indexing and searching geohash values:
ST_GeoHash()returns a geohash string given a return value length and either longitude and latitude values or aPOINTvalue.ST_LongFromGeoHash()andST_LatFromGeoHash()return the longitude or latitude value, respectively, given a geohash string argument.ST_PointFromGeoHash()produces aPOINTvalue from a geohash string argument.
(WL #7928)
-
Incompatible Change: These SQL mode changes were made:
Strict SQL mode for transactional storage engines (
STRICT_TRANS_TABLES) is now enabled by default.-
Implementation of the
ONLY_FULL_GROUP_BYSQL mode has been made more sophisticated, to no longer reject deterministic queries that previously were rejected.MySQL now recognizes when a nonaggregated selected column is functionally dependent on (uniquely determined by)
GROUP BYcolumns.MySQL has an extension to standard SQL that permits references in the
HAVINGclause to aliased expressions in the select list. Previously, enablingONLY_FULL_GROUP_BYdisables this extension, thus requiring theHAVINGclause to be written using unaliased expressions. This restriction has been lifted so that theHAVINGclause can refer to aliases regardless of whetherONLY_FULL_GROUP_BYis enabled.
In consequence,
ONLY_FULL_GROUP_BYis now enabled by default, to prohibit nondeterministic queries containing expressions not guaranteed to be uniquely determined within a group. The changes to the default SQL mode result in a default
sql_modesystem variable value with these modes enabled:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION.The
ONLY_FULL_GROUP_BYmode is now included in the modes comprised by theANSISQL mode.A new function,
ANY_VALUE(), is available that can be used to force MySQL to accept queries that it thinks should be rejected withONLY_FULL_GROUP_BYenabled. The function return value and type are the same as the return value and type of its argument, but the function result is not checked for theONLY_FULL_GROUP_BYSQL mode.
If you find that having
ONLY_FULL_GROUP_BYenabled causes queries for existing applications to be rejected, either of these actions should restore operation:If it is possible to modify an offending query, do so, either so that nondeterministic nonaggregated columns are functionally dependent on
GROUP BYcolumns, or by referring to nonaggregated columns usingANY_VALUE().If it is not possible to modify an offending query (for example, if it is generated by a third-party application), set the
sql_modesystem variable at server startup to not enableONLY_FULL_GROUP_BY.
For more information about SQL modes and
GROUP BYqueries, see Server SQL Modes, and MySQL Handling of GROUP BY. (Bug #18486310, WL #2489, WL #7764)
-
Incompatible Change: The
GET_LOCK()function has been reimplemented using the metadata locking (MDL) subsystem and its capabilities have been extended:-
Previously,
GET_LOCK()permitted acquisition of only one named lock at a time, and a secondGET_LOCK()call released any existing lock. NowGET_LOCK()permits acquisition of more than one simultaneous named lock and does not release existing locks.Applications that rely on the behavior of
GET_LOCK()releasing any previous lock must be modified for the new behavior. The capability of acquiring multiple locks introduces the possibility of deadlock among clients. The MDL subsystem detects deadlock and returns an
ER_USER_LOCK_DEADLOCKerror when this occurs.The MDL subsystem imposes a limit of 64 characters on lock names, so this limit now also applies to named locks. Previously, no length limit was enforced.
Locks acquired with
GET_LOCK()now appear in themetadata_locksPerformance Schema table. TheOBJECT_TYPEcolumn saysUSER LEVEL LOCKand theOBJECT_NAMEcolumn indicates the lock name.A new function,
RELEASE_ALL_LOCKS()permits release of all acquired named locks at once.
For more information, see Locking Functions. (WL #1159)
-
-
Incompatible Change: Previously, mysql_upgrade performed an upgrade by invoking the mysql and mysqlcheck clients. mysql_upgrade has been reimplemented to generate the required SQL statements itself and execute them by communicating directly with server.
In consequence of this change, mysql_upgrade now supports the
--bind-addressoption enabling the network interface for connecting to the server to be chosen. It also supports--net-buffer-lengthand--max-allowed-packetoptions enabling the initial and maximum communication packet size to be specified.Also in consequence of this change, mysql_upgrade no longer supports the
--tmpdiroption. This option specified the location of temporary files used to supply input to mysql, but it no longer has any purpose because mysql_upgrade no longer invokes mysql. Any upgrade scripts that invoke mysql_upgrade and use--tmpdirmust be modified to remove that option. (WL #7308) InnoDB: For optimal shutdown and recovery performance, shutdown and recovery phases are now supported by the multithreaded page cleaner feature (
innodb_page_cleaners) that was introduced in MySQL 5.7.4. (Bug #18805275)InnoDB: Work was done to introduce the notion of attachable transactions in
InnoDB(for AutoCommit / ReadOnly / ReadCommitted / NonLocking transactions). This is used to read fromInnoDBData Dictionary tables. Along with this, attachable transactions were exposed to the server. Data Dictionary access code will use them to read Data Dictionary data. (WL #7828, WL #8003)InnoDB: You can now truncate undo logs that reside in undo tablespaces. This feature is enabled using the
innodb_undo_log_truncateconfiguration option. For more information, see Truncating Undo Tablespaces. (WL #6965)InnoDB:
InnoDBmemory allocations now are instrumented for the Performance Schema and will appear in the memory summary tables. (WL #7777)-
InnoDB: Instead of inserting one index record at a time,
InnoDBnow performs a bulk load when creating or rebuilding indexes. This method of index creation is also known as a sorted index build. This enhancement, which improves the efficiency of index creation, also applies to full-text indexes. It is not supported with spatial indexes.A new global configuration option,
innodb_fill_factor, defines the percentage of space on each page that is filled with data during a sorted index build, with the remaining space reserved for future index growth. For more information, see Sorted Index Builds. (WL #7277) -
InnoDB: The
FIL_PAGE_FLUSH_LSNfield, written to the first page of eachInnoDBsystem tablespace file and toInnoDBundo tablespace files, is now only written to the first file of theInnoDBsystem tablespace (page number 0:0).As a result of this patch, if you have a multiple-file system tablespace and decide to downgrade from MySQL 5.7 to MySQL 5.6, you may encounter an invalid message on MySQL 5.6 startup stating that the log sequence numbers
xandyin ibdata files do not match the log sequence numberyin the ib_logfiles. If you encounter this message, restart MySQL 5.6 to ensure that startup has run properly. The invalid message should no longer appear. (WL #7990) -
InnoDB: The
innodb_buffer_pool_sizeparameter is now dynamic, allowing you to resize the buffer pool without restarting the server. The resizing operation, which involves moving pages to a new location in memory, is performed chunks. Chunk size is configurable using the newinnodb_buffer_pool_chunk_sizeconfiguration option. You can monitor resizing progress using the newInnodb_buffer_pool_resize_statusstatus variable. For more information, see Configuring InnoDB Buffer Pool Size Online.See Configuring InnoDB Buffer Pool Size Online for more information. (WL #6117)
Replication: When replicating from a master running a version earlier than MySQL 5.6.0 to a slave running MySQL 5.6.0 or later, the slave requires the
master_uuidvalue, which is theserver_uuidvalue from the master. Themaster_uuidvalue is unsupported on the older master, and in such a replication situation could become invalid on the newer slave. A check for emptymaster_uuidnow ensures that the slave uses an empty value formaster_uuid. (Bug #18338203)Replication: Retrying of transactions is now supported when multithreading is enabled on a slave. In previous versions,
slave_transaction_retrieswas treated as equal to 0 when using multithreaded slaves. (Bug #16390504, Bug #68465, WL #6964)-
Replication: Global transaction identifiers (GTIDs) are now logged in a MySQL system table whenever they are enabled on the server, which lifts a previous requirement to use binary logging when replicating with GTIDs. If binary logging is disabled, the server stores the GTID for each transaction in the
mysql.gtid_executedtable as the transaction is executed. If binary logging is enabled, then, whenever the binary log is rotated or the server is shut down, the server also writes into the new binary log the GTIDs for all transactions from the previous binary log.Because the
mysql.gtid_executedtable can become filled with many rows with single-transaction GTIDs having the same originating server and sequential transaction IDs, the server compresses this table periodically whenever GTIDs are enabled. You can control the frequency with which the table is compressed by setting theexecuted_gtids_compression_periodsystem variable. This variable's default value is 1000, which means that compression of the table is applied following each 1000 transactions. You can set theexecuted_gtids_compression_periodto 0 to disable the compression altogether, but you should be aware that doing this may cause the space required by this table to increase significantly. (See mysql.gtid_executed Table Compression.)Compression of the mysql.gtid_executed table is performed by a dedicated thread. You can obtain information about the state of this thread in the
threadsPerformance Schema table. (Bug #14730192, WL #6559) Replication: The system variable
simplified_binlog_gtid_recoverycan be used to change the way binary log files are searched for previous GTIDs during recovery, speeding up the process when a large number of binary log files exist. (Bug #69097, Bug #16741603, Bug #74071, Bug #19686914)Replication: The system variable
binlogging_impossible_modecontrols what happens if the server cannot write to the binary log, for example, due to a file error. For backward compatibility, the default forbinlogging_impossible_modeisIGNORE_ERROR, meaning the server logs the error, halts logging, and continues updates to the database. Setting this variable toABORT_SERVERmakes the server halt logging and shut down if it cannot write to the binary log. (Bug #51014, Bug #11758766)Replication: To make monitoring of a replication setup easier, various replication related variables have been moved to the
performance_schematables. This is particularly helpful for monitoring multi-source replication. (WL #7817)Replication: The new SQL function
WAIT_FOR_EXECUTED_GTID_SET()makes the current syncing option for the slave with master independent of the slave threads and improves the return value. (WL #7796)Replication: The new options
binlog_group_commit_sync_delayandbinlog_group_commit_sync_no_delay_countprovide a way to configure the synchronization of the binary log. This enables more transactions to be synchronized together to disk at once, reducing the overall time to commit a group of transactions because the larger groups require fewer time units per group. (WL #7742)Replication: Multithreaded slaves can use the new
slave_preserve_commit_ordervariable to ensure that the order which transactions were committed on the master is preserved on the slave. This prevents the slave from entering a state that the master was not in and is well suited to using multithreaded slaves for replication read scale-out. (WL #6813)New Debian7, Ubuntu12.04, and Ubuntu14.04 distribution support that was introduced with 5.6.17 now comes with the platform-specific packaging source placed under the
packagingdirectory, in thedeb-precise,deb-wheezy, anddeb-trustydirectories. (Bug #19020385)CMake support was updated to handle CMake version 3. (Bug #19001781)
The rwlock used for the
SAFE_HASHimplementation is now instrumented for the Performance Schema. The instrument name iswait/synch/rwlock/mysys/SAFE_HASH::lock. (Bug #18991366)The (undocumented) binary-configure.sh script has been removed from MySQL distributions. (Bug #18694238)
RHEL 4 is not supported for 5.7, so the
support-files/RHEL4-SElinuxfile was removed. (Bug #18651087)The (undocumented)
FEATURE_SETCMake option was removed. (Bug #18521389)Unused private fields reported by Clang's
-Wunused-private-fieldcompiler warning option were removed. (Bug #18489724)thr_alarm.handthr_alarm.cwere removed because they contain dead code almost exclusively. The remaining live code was moved tomysqld.cc.my_alarm.handmy_alarm.cwere also removed, and the code from them that is actually used was moved tomy_lock.c. (Bug #18411456)CMake support was updated to handle the new directory layout for Sun C++ 5.13. (Bug #73034, Bug #19010286)
The obsolete and unmaintained charset2html utility has been removed from MySQL distributions. (Bug #71897, Bug #18352347)
mysqld help text for
--general_logwas clarified. Thanks to Andrew Gaul for the patch. (Bug #71463, Bug #18127243)-
The
fill_help_tables.sqlfile that is used to load server-side help table content now contains the following statement to suppress binary logging and prevent table contents from replicating to slaves:SET sql_log_bin=0;Because help table content is specific to the a particular server version, this prevents loading incorrect content into the slaves, which do not necessarily run the same version of MySQL as the master. (Bug #69564, Bug #17015822)
The empty string provided for numeric or enumeration options (for example,
--port="") produced inconsistent or confusing behavior. Such empty option values now are rejected with an error. (Bug #68055, Bug #16102788)The mysqladmin flush-logs command now permits optional log types to be given, to specify which logs to flush. Following the
flush-logscommand, you can provide a space-separated list of one or more of the following log types:binary,engine,error,general,relay,slow. These correspond to the log types that can be specified for theFLUSH LOGSSQL statement. Thanks to Daniël van Eeden for the patch. (Bug #60878, Bug #12368203)A new status variable,
Max_used_connections_time, indicates the time at whichMax_used_connectionsreached its current value. Thanks to Jordi Prats for the patch. (Bug #59738, Bug #11766596)-
Previously, on Unix and Unix-like systems, MySQL support for sending the server error log to
syslogwas implemented by having mysqld_safe capture server error output and pass it tosyslog. The server now includes nativesyslogsupport, which has been extended to include Windows. Server error logging tosyslog, Event Log, or a file, should be controlled using mysqld options. Doing so using mysqld_safe options is now deprecated. For more information about sending server error output tosyslog, see The Error Log.In addition, system log output control is distinct from sending error output to a file or the console, on all platforms. Previously, this was true only for Windows. On Unix and Unix-like systems, error output now can be directed to a file or the console in addition to or instead of the system log as desired. This is true both for mysqld and mysqld_safe. Previously, mysqld_safe ignored its
--syslogoption with a warning if--log-errorwas also given. (Bug #55370, Bug #11762739, WL #7793, WL #8053) If connection IDs went beyond the 32-bit limit and started over at 1, the server now ensures that IDs still in use will not be reissued. (Bug #44167, Bug #11752851)
Internally, spatial data types such as
Geometryare represented asBLOBvalues, so when invoked with the--hex-bloboption, mysqldump now displays spatial values in hex. (Bug #43544, Bug #11752369)-
Scalability for
InnoDBtables was improved by avoidingTHR_LOCKlocks. As a result of this change, DML statements forInnoDBtables that previously waited for aTHR_LOCKlock will wait for a metadata lock:Explicitly or implicitly started transactions that update any table (transactional or nontransactional) will block and be blocked by
LOCK TABLES ... READfor that table. This is similar to howLOCK TABLES ... WRITEworks.-
Tables that are implicitly locked by
LOCK TABLESnow will be locked using metadata locks rather thanTHR_LOCKlocks (forInnoDBtables), and locked using metadata locks in addition toTHR_LOCKlocks (for all other storage engines). Implicit locks occur for underlying tables of a locked view, tables used by triggers for a locked table, or tables used by stored programs called from such views and triggers.Multiple-table updates now will block and be blocked by concurrent
LOCK TABLES ... READstatements on any table in the update, even if the table is used only for reading. HANDLER ... READfor any storage engine will block and be blocked by a concurrentLOCK TABLES ... WRITE, but now using a metadata lock rather than aTHR_LOCKlock.
The preceding changes are visible several ways. For example, when a DML statement such as
INSERT INTO t1in one session is blocked byLOCK TABLES t1 READin another session:In the Performance Schema,
THR_LOCKacquisitions and waits will be registered in themetadata_lockstable and forwait/lock/metadata/sql/mdlevents rather than registered in thetable_handlestable and forwait/lock/table/sql/handlerevents.In the process list (
SHOW PROCESSLISTorINFORMATION_SCHEMA.PROCESSLIST), the state value will beWaiting for table metadata lockrather thanWaiting for table level lock.The
Table_locks_immediateandTable_locks_waitedstatus variables will no longer be incremented.
Issues that went away as a result of these locking changes:
For debug builds, concurrent execution of
LOCK TABLES ... READand a DML statement affecting the sameInnoDBtable might lead toFound lock of type 6 that is write and read lockedwarnings in the error log.Execution of DDL statements under
LOCK TABLESmight have led to deadlock if 1) thisLOCK TABLESstatement, in addition to the table to be changed by DDL, also had some tables read-locked or locked implicitly (for example, through triggers) and 2) there was some concurrent DML which was blocked on a table-level lock held byLOCK TABLESand 3) there was a concurrentPREPARE(or corresponding connector API call) which prepared a statement using tables to be affected by the first DDL and some other table which was affected by another DDL statement which had to wait for the DML statement.
(Bug #42147, Bug #11751331, WL #6671)
The mysql client now indicates whether
USEstatements produced warnings. (Bug #29965, Bug #11746951)In the MySQL client/server protocol, EOF and OK packets serve the same purpose, to mark the end of a query execution result. Due to recent changes in the OK packet (such as session state tracking), and to avoid repeating the changes in the EOF packet, the EOF packet is now deprecated. (WL #7766)
-
The server-side help tables and time zone tables in the
mysqlsystem database now areInnoDB(transactional) tables. Previously, these wereMyISAM(nontransactional) tables. The affected tables are:help_category help_keyword help_relation help_topic time_zone time_zone_leap_second time_zone_name time_zone_transition time_zone_transition_typeIf you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate these changes into the
mysqldatabase.START TRANSACTIONandCOMMITstatements have been added to the output from mysql_tzinfo_to_sql used to populate the time zone tables, to ensure that reload operations are permanent. (WL #7159) -
MySQL Server now supports an “offline mode” with these characteristics:
Connected client users who do not have the
SUPERprivilege are disconnected on the next request, with an appropriate error. Disconnection includes terminating running statements and releasing locks. Such clients also cannot initiate new connections, and receive an appropriate error.Connected client users who have the
SUPERprivilege are not disconnected, and can initiate new connections to manage the server.Replication slave threads are permitted to keep applying data to the server.
Only users who have the
SUPERprivilege can control offline mode. To put a server in offline mode, change the value of the newoffline_modesystem variable fromOFFtoON. To resume normal operations, changeoffline_modefromONtoOFF. In offline mode, clients that are refused access receive anER_SERVER_OFFLINE_MODEerror. (WL #3836) ALTER TABLE ... EXCHANGE PARTITIONsyntax now includes an optional{WITH|WITHOUT} VALIDATIONclause. WhenWITHOUT VALIDATIONis specified,ALTER TABLE ... EXCHANGE PARTITIONdoes not perform row-by-row validation when exchanging a populated table with the partition, permitting database administrators to assume responsibility for ensuring that rows are within the boundaries of the partition definition.WITH VALIDATIONis the default behaviour and need not be specified explicitly. For more information, see Exchanging Partitions and Subpartitions with Tables. (WL #5630)mysqlslap now has a
--sql-modeoption that enables the SQL mode to be set for the client session. (WL #7764)-
It is now possible to specify the storage engine the server uses for on-disk internal temporary tables (see Internal Temporary Table Use in MySQL), by setting the new
internal_tmp_disk_storage_enginesystem variable. Permitted values areMYISAM(the default) andINNODB.In consequence of this change, the server is no longer prevented from using an in-memory temporary table for queries containing a string column in a
GROUP BYorDISTINCTclause larger than 512 bytes for binary strings or 512 characters for nonbinary strings. (WL #6711) The custom rwlock implementation for Windows was replaced with standard Windows API calls. As a result of this change, Windows binaries require Windows 7 / Windows Server 2008 R2 or newer. In particular, Windows binaries no longer work on Windows Vista or Windows Server 2008 (plain, not R2). (WL #7914)
-
The Boost.Geometry library now is required to build MySQL. Two new CMake options enable control over the library source location, and whether to download it automatically:
-DWITH_BOOST=specifies the Boost library directory location. It is also possible to specify the Boost location by setting thepath_nameBOOST_ROOTorWITH_BOOSTenvironment variable.-DDOWNLOAD_BOOST=specifies whether to download the Boost source if it is not present in the specified location. The default isboolOFF.
For example, if you normally build MySQL placing the object output in the
bldsubdirectory of your MySQL source tree, you can build with Boost like this:mkdir bld cd bld cmake .. -DDOWNLOAD_BOOST=ON -DWITH_BOOST=$HOME/my_boostThis causes Boost to be downloaded into the
my_boostdirectory under your home directory. If the required Boost version is already there, no download is done. If the required Boost version changes, the newer version is downloaded.If Boost is already installed locally and your compiler finds the Boost header files on its own, it may not be necessary to specify the preceding CMake options. However, if the version of Boost required by MySQL changes and the locally installed version has not been upgraded, you may have build problems. Using the CMake options should give you a successful build.
-
Important Change; Partitioning: In an
ALTER TABLEstatement, the server acceptedREBUILDwith the name of a subpartition as valid syntax even though theREBUILDkeyword in this case did nothing. NowREBUILDis rejected in such cases, and causes the statement to fail with an error. (Bug #19075411, Bug #73130)References: This issue is a regression of: Bug #14028340, Bug #65184.
-
Important Change; Replication: A
DROP TABLEstatement may be divided into multiple statements before it is sent to the binary log if it contains regular (not temporary) tables and temporary tables, or if it contains temporary tables using both transactional and non-transactional storage engines. Now, when using GTIDs,DROP TABLEstatements affecting these combinations of tables are no longer allowed unless the value of thegtid_nextsystem variable isAUTOMATIC. This is because, with GTIDs enabled on the server, issuing aDROP TABLEin the cases just described while having only one GTID associated with each statement (the SQL thread does this followingSETgtid_next=') causes problems when there are not enough GTIDs for assignment to all the resulting statements following the division of the originaluuid:number'DROP TABLE.A
DROP TABLEstatement might be split due to the behavior of the statement with respect to the current transaction varying, depending on table characteristics, as follows:DROP TABLEof a regular (not temporary) table is committed immediatelyDROP TABLEof a temporary table using a transactional storage engine is committed with the current transaction (followingCOMMIT)DROP TABLEof a temporary table that uses a nontransactional storage engine is committed immediately
Naming all three of these types of tables in a single
DROP TABLEstatement causes the MySQL server to divide the original statement into three separateDROP TABLEstatements in the binary log. If GTIDs are enabled but the value ofgtid_nextis notAUTOMATIC, issuing aDROP TABLEstatement that mixes any of the table types described previously causes the server to have an insufficient number of GTIDs to write with all of the resulting statements into the binary log. In addition,DROP TABLE IF EXISTSis always written in the binary log for all tables specified in the statement, even if some or all of the tables do not exist.Because temporary tables are handled differently by
DROP TABLEdepending on whether they use a transactional or nontransactional storage engine, any tables named by aDROP TEMPORARY TABLEstatement that do not exist are assumed to be transactional. This means that, if aDROP TEMPORARY TABLEwith two nontransactional temporary tables is issued on the master, it would writes only oneDROP TABLEstatement naming both tables. If one of the temporary tables no longer exists on the slave, then, when the SQL thread executes the statement, it tries to divide it into multiple statements due to it affecting a nontransactional (but existing) temporary table and a nonexistent transactional temporary table; this leads to problems because the SQL thread has only one GTID for the originalDROP TABLEstatement but must write twoDROP TABLEstatements in the binary log.In addition, when the slave dropped temporary tables after detecting that the master had restarted, it logged one
DROP TABLEstatement per pseudo-thread and per database, but combined temporary tables using transactional and nontransactional storage engines in a singleDROP TABLEstatement.Now, we throw an error in the client session if
gtid_nextis set to auuid:numbervalue and aDROP TABLEstatement is issued mixing any of the table types described previously.In addition, we now group the nonexistent temporary tables and assume them to be transactional only if at least one transactional temporary table is dropped by the statement. If no transactional temporary tables are dropped, any nonexistent temporary tables are assumed to be nontransactional temporary tables.
The slave now also handles dropping of temporary tables correctly in the event of the restart by the master. (Bug #17620053)
Important Change; Replication: The maximum length that can be used for the password in a
CHANGE MASTER TOstatement is 32 characters. Previously, when a longer password was employed, it was accepted, but any excess length was silently truncated by the server. Following this fix, when the password's length exceeds 32 characters,CHANGE MASTER TOfails with an error. (Bug #11752299, Bug #43439)Performance; Replication: When processing the dump thread, a semisynchronous replication master checked whether or not the dump thread came from a semisynchronous slave by checking the value of
rpl_semi_sync_slave_enabled, but did so for every operation performed on this thread, which had significant negative impact on performance. Now this check is made only once, when the dump thread is started, which should noticeably improve the performance of semisynchronous replication in most cases. (Bug #17932935)-
InnoDB; Partitioning: Large numbers of partitioned
InnoDBtables could consume much more memory when used in MySQL 5.6 or 5.7 than the memory used by the same tables used in previous releases of the MySQL Server. (Bug #17780517, Bug #70641)References: This issue is a regression of: Bug #11764622, Bug #57480.
InnoDB; Linux: The
TTASFutexMutex, the mutex implementation that uses the Linux futex, failed to requestm_lock_wordalignment. (Bug #19525395, Bug #73760)InnoDB: If a crash occurs after a drop index action during a
TRUNCATE TABLEoperation, the root page could be left in a free state. On crash recovery, an LSN check failed to check free pages when attempting to pin the root page, resulting in an assertion. (Bug #19520482)InnoDB: Replaced a
gotostatement with anifstatement in thefil_mutex_enter_and_prepare_for_iofunction infil0fil.cc. (Bug #19488149)InnoDB: An
INSERToperation on a table with spatial data columns raised an assertion. (Bug #19474851)InnoDB: Removed unused code related to binary log information stored in the
InnoDBtrx_syspage. (Bug #19471743)InnoDB: An
ALTER TABLE ... ADD FOREIGN KEYoperation could cause a serious error. (Bug #19471516, Bug #73650)InnoDB: Reduced
mem_heap_zalloccalls inupd_create. Only a single call is necessary to allocate memory forupd_t. (Bug #19297656, Bug #73272)InnoDB: In debug builds, an
INSERToperation affecting compressed tables would raise a sync-related assertion. (Bug #19295893)-
InnoDB: An
ALTER TABLEoperation raised anfk_tables.empty()assertion. After callingdict_load_foreigns(), all associated tables that are linked by a foreign key should be loaded to ensure that foreign keys are cached. (Bug #19267051)References: This issue is a regression of: Bug #16244691.
InnoDB: A transaction returned from the transaction pool was not in a clean state. (Bug #19244969)
InnoDB: An
MLOG_CHECKPOINTmarker was incorrectly omitted when performing a log checkpoint. (Bug #19233510, Bug #73304)InnoDB: On crash recovery,
InnoDBwould callexit()when encountering a corruption or inconsistency. Some of theexit()calls have been removed to allowInnoDBto shut down properly. (Bug #19229231, Bug #73300)InnoDB: When multiple
daemon_memcached_optionoptions are defined, theINFORMATION_SCHEMA.GLOBAL_VARIABLEStable andSHOW VARIABLESstatement should only display the firstdaemon_memcached_optionoption that is defined in the command line string or in the MySQL configuration file. (Bug #19204759, Bug #73287)InnoDB: Running
SHOW ENGINE INNODB STATUSrepeatedly under performance testing conditions could result in a serious error. (Bug #19196052)InnoDB: Removed unused
one_flushvariable fromstorage/innobase/include/log0log.h. (Bug #19192364, Bug #73269)InnoDB: Retrieval of multiple values with a single
getcommand would return incorrect results instead of an error message. TheInnoDBmemcached plugin does not currently support retrieval of multiple values with a singlegetcommand. (Bug #19172212, Bug #72453)InnoDB: Attempting to perform operations on a timed out key would cause the memcached daemon to crash and restart. (Bug #19172013, Bug #72586)
-
InnoDB: An
ALTER TABLEoperation that does not perform a sort on the clustered index could result in a duplicate record. (Bug #19163915)References: See also: Bug #17657223.
InnoDB: Improved error handling, diagnostics, and test coverage related to crash recovery error handling. (Bug #19145637, Bug #73179)
-
InnoDB: Improved error handling for calls to
handler::records(). (Bug #19142753, WL #6742)References: This issue is a regression of: Bug #16802288.
-
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. (Bug #19140907)References: This issue is a regression of: Bug #16133801.
InnoDB: A race condition that occurred when dynamically disabling
innodb_adaptive_hash_indexcaused the purge thread to assert. (Bug #19069698, WL #6117, WL #6578)InnoDB: The
INNODB_PAGE_ATOMIC_REF_COUNTCMake option is removed in MySQL 5.7.5. This option was enabled by default but could be disabled for systems that do not support atomic operations. As of MySQL 5.7.5, support for atomic operations is required to build MySQL, making theINNODB_PAGE_ATOMIC_REF_COUNToption obsolete. (Bug #19061440, WL #7655, WL #7682)InnoDB: In debug builds, an invalid
rw_latch == RW_NO_LATCHassertion would cause the server to halt. (Bug #18977128)InnoDB: Added debug assertions to the adaptive hash index code to check that the tablespace ID in buffer blocks match the index space. (Bug #18965518, Bug #72986)
-
InnoDB: During recovery, a segmentation fault would occur when marking a table as corrupt. (Bug #18942294)
References: This issue is a regression of: Bug #11830883.
InnoDB: A code comment for the
os_event_is_setfunction instorage/innobase/os/os0event.ccwas incorrect. (Bug #18940008, Bug #72919)InnoDB: A latching order violation would occur while inserting
BLOBdata. (Bug #18883885)InnoDB: For PowerPC,
InnoDBnow uses special PowerPC instructions for setting priority of hardware threads inInnoDBmutex spin loops. Thanks to Stewart Smith for the contribution. (Bug #18842925, Bug #72754)InnoDB: The
innodb_memcached_config.sqlconfiguration script failed after running themysql_secure_installationscript, which removes the MySQLtestdatabase. Theinnodb_memcached_config.sqlscript now creates thetestdatabase if it does not exist. (Bug #18816381, Bug #72678)InnoDB: Removed unused function definitions and declarations from the
InnoDBmemcached API. (Bug #18815992, Bug #72723)InnoDB:
CACHE_LINE_SIZEfor PowerPC was changed from 64 bytes to 128 bytes. (Bug #18814859, Bug #72718)InnoDB: Opening a parent table that has thousands of child tables could result in a long semaphore wait condition. (Bug #18806829)
InnoDB:
trx_cleanup_at_db_startupfailed to resettrx->rsegs->m-redocontent in debug code. (Bug #18795594)InnoDB: On mysqld start, specifying multiple data files using the
innodb_data_file_pathoption would return a Space id in fsp header error after data is written to the second file. (Bug #18767811)InnoDB: When storing
BLOBdata,InnoDBfailed to reserve the required tablespace pages prior to allocating the pages, which raised an assertion onINSERT. (Bug #18756233)InnoDB: A failed in-place
ALTER TABLEoperation would leave behind nonunique temporary file names in the data dictionary preventing futureALTER TABLEoperations on the same table due to temporary file name conflicts. To avoid this problem, temporary file names are made unique by appending a static global number that is initialized to a random distributed 32-bit number usingut_time()andut_crc32(). The number is then incremented atomically for each assigned temporary file name. Previously, temporary files were named using the format#sql-ibtid, wheretidis the table ID. Temporary files are now named using the format#sql-ibtid-inc, wheretidis the table ID andincis the incremented number. (Bug #18734396, Bug #72594)-
InnoDB: A regression introduced by the fix for Bug #11758237 resulted in a
cursor->index->name == TEMP_INDEX_PREFIXassertion. (Bug #18723872)References: This issue is a regression of: Bug #11758237.
InnoDB: For single item full-text searches, deleted documents were included in inverse document frequency (IDF) calculations. (Bug #18711306, Bug #72548)
InnoDB: The
page_createfunction has been optimized to use simpler functions to initialize pages. (Bug #18704384)-
InnoDB: A
DELETEoperation on a table with full-text search indexes raised an assertion. (Bug #18683832)References: See also: Bug #14639605.
-
InnoDB: To-be-imported tablespace files (
FIL_TYPE_IMPORT) were not flushed after being converted to normal tablespace files (FIL_TYPE_TABLESPACE), resulting in too many open files. (Bug #18663997)References: This issue is a regression of: Bug #18236692.
InnoDB: When
InnoDBis built as a shared library, attempting to load theInnoDBfull-text search (FTS)INFORMATION_SCHEMAplugin would fail with a Can't open shared library 'ha_innodb.so' error. (Bug #18655281, Bug #70178)InnoDB: When calling the memcached
flush_allcommand,InnoDBattempts to initialize a connection and a transaction. If the transaction is inTRX_STATE_NOT_STARTEDstate,InnoDBfailed to setCONN_DATA->CRSR_TRXto NULL, resulting in a serious error. (Bug #18652854)-
InnoDB: An
INSERToperation on a table withBLOBcolumns raised an assertion. (Bug #18646430)References: This issue is a regression of: Bug #16963396.
InnoDB: An
INSERToperation on a table withGEOMETRYcolumns raised an assertion inrtr_page_split_and_insert(). (Bug #18644435)InnoDB: The temporary tablespace file (
ibtmp1) was held open by thepage_cleanerthread and could not be removed on startup, resulting in a hang. (Bug #18642372)InnoDB: A regression introduced in MySQL 5.6.5 would cause full-text search index tables to be created in the system tablespace (space 0) even though
innodb_file_per_tablewas enabled. (Bug #18635485)InnoDB: After upgrading from 5.6.10 to MySQL versions up to and including MySQL 5.6.18,
InnoDBwould attempt to rename obsolete full-text search auxiliary tables on server startup, resulting in an assertion failure. (Bug #18634201, Bug #72079)InnoDB: In rare cases, the purge process would attempt to delete a secondary index record that was not marked for deletion, resulting in an inconsistent secondary index. (Bug #18631496)
-
InnoDB: After running
OPTIMIZE TABLEon anInnoDBtable with a spatial index, running aSELECTstatement that uses the spatial index could result in a crash. (Bug #18619945, Bug #72361)References: This issue is a regression of: Bug #13975225.
InnoDB: On startup, with
innodb_file_per_table=ON, the page cleaner thread would raise asrv_get_active_thread_type() == SRV_NONEdebug assertion when encountering an active master thread. (Bug #18598813)InnoDB:
InnoDBwould try to merge a b-tree change buffer for a dedicated undo tablespace. (Bug #18593561)InnoDB: Included
unistd.hininnodb.cmaketo enable futexes in debug builds. (Bug #18522549, Bug #72225)InnoDB:
TRUNCATE TABLEwould write page-level redo logs during theDROP TABLEstep of aTRUNCATE TABLEoperation. (Bug #18511398)InnoDB: A
COMMIToperation related to full-text search resulted in a segmentation fault. (Bug #18503734)InnoDB:
srv_active_wake_master_thread()was called directly ininnobase_commitandinnobase_prepare, waking up the master thread and incrementingsrv_activity_count.srv_active_wake_master_thread()should only be called after committing write transactions, not after read-only transactions or rollbacks. This patch also replaces some calls tosrv_active_wake_master_thread()with calls toib_wake_master_thread(). (Bug #18477009, Bug #72137)InnoDB: A
DB_LOCK_WAITduring a foreign key check caused redundant delete marking, resulting in a failing assertion. (Bug #18451287)InnoDB: With
UNIV_SYNC_DEBUGenabled, a late call tosync_check_enable()would result in anm_enabledassertion failure. (Bug #18433658)InnoDB:
InnoDBwould write to the redo log for anIMPORT TABLESPACEoperation before the tablespace import was complete. (Bug #18424134)InnoDB: The
InnoDBmemcached plugin would callplugin_delwithout acquiring thelock_pluginmutex. This bug fix also addresses a race condition inib_cursor_delete_row. (Bug #18409840)InnoDB: The
os_event_wait_time_lowfunction would sometimes returnOS_SYNC_TIME_EXCEEDEDbefore the sync time has elapsed. (Bug #18386498)InnoDB: With persistent statistics enabled,
SHOW TABLE STATUSoutput and theTABLE_ROWScolumn ofINFORMATION_SCHEMA.TABLEScould report an incorrect number of table rows for tables with externally stored pages. (Bug #18384390)-
InnoDB: Running a
SELECTon a partitioned table caused a memory access violation inmemcpy(). (Bug #18383840)References: See also: Bug #18167648.
-
InnoDB: A regression introduced by the fix for Bug#18069105 could result in a table corruption and failing assertions. (Bug #18368345)
References: This issue is a regression of: Bug #18069105.
InnoDB: The data file was not opened prior to calling
fil_fusionio_enable_atomic_write(), resulting in an assertion failure. (Bug #18368241)-
InnoDB: The fix for Bug#17699331 caused a high rate of read/write lock creation and destruction which resulted in a performance regression. (Bug #18345645, Bug #71708)
References: This issue is a regression of: Bug #17699331.
InnoDB: Code quality improvements for the redo log subsystem. (Bug #18345004)
InnoDB: Added the C++
ostreammechanism for error logging. (Bug #18320915)InnoDB: Removed the
recv_max_parsed_page_nocode variable, which was only used in a diagnostic error message. (Bug #18312967)InnoDB:
buf_pool->flush_rbt, which is only intended to be used for recovery, would be allocated for database creation and never freed. (Bug #18253089)InnoDB: Calls to
sched_getcpuwould cause page faults. (Bug #18225489)InnoDB:
ib_heap_resizefailed to verify thatnew_sizeis greater than or equal toold_sizebefore callingmemcpy. (Bug #18178915)InnoDB: After crash recovery and with
UNIV_DEBUGenabled, purge failed with abuf_pool_from_bpage(bpage) == buf_poolassertion failure. (Bug #18154145)InnoDB: Assertion code in
buf_page_release_latch()inbuf0buf.icwas too restrictive. (Bug #17869571)InnoDB: For each insert,
memsetwould be called three times to allocate memory for system fields. To reduce CPU usage, the threememsetcalls are now combined into a single call. (Bug #17858679, Bug #71014)-
InnoDB: The fix for Bug#16418661 added superfluous
buf_flush_list()logic toInnoDBstartup code. (Bug #17798076, Bug #70899)References: This issue is a regression of: Bug #16418661.
InnoDB: A problem renaming temporary tables during an
ALTER TABLEoperation would raise an assertion and print a warning to the error log. Temporary table names were not sufficiently unique. (Bug #17713871)InnoDB: In-place
ALTER TABLEoperations requiring a table rebuild would sort the clustered index even though the primary key order remained unchanged. This behavior caused unnecessary temporary table usage and I/O. (Bug #17657223)InnoDB: Under certain circumstances, adaptive hash index latches (
btr_search_latch) were persistent. With atomics-based rw-locks (read-write locks), persistent adaptive hash index latches are unnecessary and may block other adaptive hash index updates. (Bug #17554489, Bug #70216)-
InnoDB: A race condition in
fts_get_next_doc_idresulted in Duplicate FTS_DOC_ID and Cannot find index FTS_DOC_ID_INDEX in InnoDB index translation table errors. (Bug #17447086, Bug #70311)References: See also: Bug #16469399.
InnoDB: Enabling the
InnoDBTable Monitor would result in aib_table->stat_initializedassertion failure. (Bug #17039528, Bug #69641)InnoDB: Redo log writes for large, externally stored
BLOBfields could overwrite the most recent checkpoint. The 5.6.20 patch limits the size of redo logBLOBwrites to 10% of the redo log file size. The 5.7.5 patch addresses the bug without imposing a limitation. For MySQL 5.5, the bug remains a known limitation. (Bug #16963396, Bug #19030353, Bug #69477)InnoDB: The error log message that is printed on
CREATE TABLEwhen the number ofBLOBorTEXTfields exceed the row size limit did not provide sufficient information. The error message now provides the maximum row size, current row size, and the field that causes the maximum row size to be exceeded. (Bug #16874873, Bug #69336)InnoDB: An in-place
ALTER TABLEoperation on a table with a broken foreign key constraint could raise an assertion. (Bug #16869435)InnoDB: The
lock_number_of_rows_lockedfunction used a bit vector to track the number of record locks held by a transaction. To optimize reporting, the bit vector was replaced by a simple counter. (Bug #16479309, Bug #68647)InnoDB: Inserting a record into an
InnoDBtable with a key that falls between the maximum key of a full page and the minimum key of the “next” page could result in unnecessary page splits and under-filled pages. If the insert point is at the end of a page,InnoDBnow attempts to insert to the next page before splitting the page. (Bug #15923864, Bug #67718)InnoDB: With
innodb_max_dirty_pages_pct=0buffer pool flushing would not be initiated until the percentage of dirty pages reached at least 1%, which would leave up to 1% of dirty pages unflushed. (Bug #13029450, Bug #62534)InnoDB: Due to differences in memory ordering on different processor types, some mutex and read-write lock flags were not read consistently. (Bug #11755438, Bug #47213)
InnoDB: Debug assertion code in file
row0ins.ccdid not account for rw-lock shared-exclusive (sx-lock) mode, resulting in an assertion failure. (Bug #73534, Bug #19420253)InnoDB: With
foreign_key_checks=0,InnoDBpermitted an index required by a foreign key constraint to be dropped, placing the table into an inconsistent and causing the foreign key check that occurs at table load to fail.InnoDBnow prevents dropping an index required by a foreign key constraint, even withforeign_key_checks=0. The foreign key constraint must be removed before dropping the foreign key index. (Bug #70260, Bug #17449901)-
Partitioning: When the
index_merge_intersectionflag (enabled by default) or theindex_merge_unionflag was enabled by the setting of theoptimizer_switchsystem variable, queries returned incorrect results when executed against partitoned tables that used theMyISAMstorage engine, as well as partitionedInnoDBtables that lacked a primary key. (Bug #18167648)References: See also: Bug #16862316, Bug #17588348, Bug #17648468.
Partitioning: Selecting from a table having multiple columns in its primary key and partitioned by
LIST COLUMNS(, whereR)Rwas the last (rightmost) column listed in the primary key definition, returned an incorrect result. (Bug #17909699, Bug #71095)-
Replication: Misleading or confusing error messages have been revised, which were produced in the following 2 cases when using mysqlbinlog with the
--rawoption:When this option was used together with
--include-gtids.When this option was used together with
--exclude-gtidsand--read-from-remote-master=BINLOG-DUMP-NON-GTIDS.
(Bug #19459836, Bug #73625)
Replication: After the fix for Bug #16861624, killing a multithreaded slave worker which was waiting for a commit lock caused a debug assertion to fail. This fix ensures that such a situation can not occur. (Bug #19311260)
Replication: Temporary errors related to a slave worker thread which was retrying a transaction were visible in
SHOW SLAVE STATUS. This fix ensures that slave worker threads do not store temporary errors in the slave status. (Bug #19282301)Replication: A corrupted header length in
FORMAT_DESCRIPTION_LOG_EVENTcould cause the server to stop unexpectedly. This was due toFORMAT_DESCRIPTION_LOG_EVENTbeing considered invalid if the header length was too short. (Bug #19145712)Replication: Removed an unnecessary write lock that was taken by an internal function while adding a GTID to a GTID set, which should improve the performance of the function and the code dependent on it during such operations. (Bug #18963555, Bug #72977)
Replication: Semisynchronous replication did not work as expected when the
rpl_semi_sync_master_wait_no_slaveandrpl_semi_sync_master_wait_for_slave_countvariables were set. The values of the variables were changed, but the related internal status was not updated during initialization. (Bug #18835117, Bug #18466390)Replication:
RESET SLAVE ALLdid not clearIGNORE_SERVER_IDS, although this statement should clear any values that are set byCHANGE MASTER TO. NowRESET SLAVE ALLalways empties the list of server IDs to ignore, whenever it is executed. (Bug #18816897)-
Replication: The same internal function had effects which caused three similar problems when resetting or starting slaves. These three issues are listed here:
RESET SLAVEautomatically set the heartbeat period (Slave_heartbeat_period) to its default value.RESET SLAVEautomatically setSSL_VERIFY_SERVER_CERTto the default.When a server was not configured as a slave (that is, when no
CHANGE MASTER TOstatement had yet been executed), the subsequent failure ofSTART SLAVEwas expected but had the unintended side effect of resetting the heartbeat period to the default.
The function has been rewritten such that code affecting heartbeat or SSL certificate usage has been eliminated or moved to a more appropriate location, eleminating the side effects formerly seen with
RESET SLAVEor a failedSTART SLAVE.As part of this fix, in order to be able to keep heartbeats enabled by default when changing the master, if host and port are given but the heartbeat period is not specified in a
CHANGE MASTER TOstatement, we force it to the default value. (Bug #18791604, Bug #18778485, Bug #18777899) Replication: mysqlbinlog
--rawdid not check for errors caused by failed writes, which could result in silent corruption of binary logs. Now in such cases it stops with an error. (Bug #18742916, Bug #72597)-
Replication: When committing a transaction, a flag is now used to check whether a thread has been created, rather than checking the thread itself, which uses more resources, particularly when running the server with
master_info_repository=TABLE. (Bug #18684222)References: See also: Bug #17967378.
Replication: When a slave worker thread tried to execute a statement that was too large, the resulting error caused a crash. Now in such cases, the error is truncated to fit the size of the buffer. (Bug #18563480)
-
Replication: Log rotation events could cause
group_relay_log_posto be moved forward incorrectly within a group. This meant that, when the transaction was retried, or if the SQL thread was stopped in the middle of a transaction following one or more log rotations (such that the transaction or group spanned multiple relay log files), part or all of the group was silently skipped.This issue has been addressed by correcting a problem in the logic used to avoid touching the coordinates of the SQL thread when updating the log position as part of a relay log rotation whereby it was possible to update the SQL thread's coordinates when not using a multithreaded slave, even in the middle of a group. (Bug #18482854)
Replication: When using GTIDs with
MASTER_AUTO_POSITIONenabled, if an I/O thread was restarted it failed with anER_GTID_NEXT_TYPE_UNDEFINED_GROUPerror due to a partial transaction not being correctly rolled back before resuming the I/O thread. This fix ensures that the partial transaction is correctly rolled back. (Bug #18472603)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
InnoDBtables lacking a primary key. (Bug #18432495, Bug #72085)Replication: A multithreaded slave now checks that a free worker is available to dispatch the next event. In previous versions, a multithreaded slave crashes with a worker error if the thread coordinator can not find a free worker. The crash was caused when the coordinator did not return a free worker, for example if the coordinator was aborted at the same time using
STOP SLAVE. (Bug #18363515)Replication: When replicating from a MySQL 5.5 or earlier master to a MySQL 5.6 or later slave, the
SOURCE_UUIDcolumn of the slave'sperformance_schema.replication_connection_statustable contained random data. Now in such cases,SOURCE_UUIDis left blank. (Bug #18338203)-
Replication: During relay log initialization, the thread context was used as a flag for the reconstruction of the retrieved GTID set, an operation that does not depend on this parameter. This could be problematic if relay log initialization was called in another context other than the legacy replication scenario; if the invocation was made in a context where the thread context was always present, this prevented the set's reconstruction. The opposite could also happen when the thread context was not present, which cause the initialization to be performed twice.
To avoid such issues, the thread context flag is replaced with a new flag that allows the reconstruction in all contexts but prevents multiple invocations. (Bug #18337036)
-
Replication: When mysqlbinlog processed multiple binary log files into a single output file, this file was not in a useful state for point-in-time recovery, when it failed with the error, When @@SESSION.GTID_NEXT is set to a GTID, you must explicitly set it to a different value after a COMMIT or ROLLBACK. Please check GTID_NEXT variable manual page for detailed explanation. Current @@SESSION.GTID_NEXT is '
xyz'. When mysqlbinlog processes a binary log containing GTIDs, it outputsSETgtid_nextstatements, butgtid_nextis set to undefined whenever a commit occurs; this leftgtid_nextundefined when the server had finished processing the output from mysqlbinlog. When the next binary log file started with one or more anonymous statements or transactions, the combination of gtid_next being left undefined at the end of the first binary log and the second binary log containing anonymous transactions to the error described previously (Error 1837,ER_GTID_NEXT_TYPE_UNDEFINED_GROUP).To fix this issue, now, whenever mysqlbinlog encounters this situation, it inserts
SET gtid_next = AUTOMATICif required to avoid leaving the previous binary log withgtid_nextundefined.In addition, as a result of this fix, mysqlbinlog no longer outputs session variable information for every binary log; now, this value is printed only once unless it changes. (Bug #18258933, Bug #71695)
Replication: Quotation marks were not always handled correctly by
LOAD DATAwhen written into the binary log. (Bug #18207212, Bug #71603)Replication: Changing
master_info_repositorybetweenTABLEandFILEcould produce duplicate values in theReplicate_Ignore_Server_Idscolumn of the output fromSHOW SLAVE STATUSand theIgnored_server_idscolumn of themysql.slave_master_infotable. This could arise because the list of IDs stored internally by the server was not always sorted before checking for duplicates when inserting new values into the list. Now the list of server IDs to be ignored is always sorted, prior to performing this check. (Bug #18192817, Bug #18593479, Bug #18920203)Replication: In certain cases, the server mishandled triggers and stored procedures that tried to modify other tables when called by
CREATE TABLE ... SELECT. This is now handled correctly as an error. (Bug #18137535)Replication: The
REPLICATE_WILD_DO_TABLEandREPLICATE_WILD_IGNORE_TABLEoptions forCHANGE REPLICATION FILTERcould be employed with values which contained no period (.) character, even though values for these options must be in the format.. (Bug #18095449)db_name.tbl_name-
Replication: When used on a table employing a transactional storage engine, a failed
TRUNCATE TABLEwas 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 TABLEis logged only when it executes successfully. (Bug #17942050, Bug #71070) Replication: Beginning in MySQL 5.6.20, when a user specified
AUTO_INCREMENTvalue falls outside of the range between the currentAUTO_INCREMENTvalue and the sum of the current and number of rows affected values it is replicated correctly. In previous versions, an error was generated by the slave even if the user specifiedAUTO_INCREMENTvalue fell outside of the range. (Bug #17588419, Bug #70583)Replication: When the I/O thread reconnected to a master using GTIDs and multithreaded slaves while in the middle of a transaction, it failed to abort the transaction, leaving a partial transaction in the relay log, and then retrieving the same transaction again. This occurred when performing a rotation of the relay log. Now when reconnecting, the server checks before rotating the log in such cases, and waits first for any ongoing transaction to complete. (Bug #17326020)
Replication: On Windows, mysqldump failed if the error log file was deleted (missing) from the active MySQL server. (Bug #17076131)
Replication: When the binary log was rotated due to receipt of a
SIGHUPsignal, the new binary log did not contain thePrevious_gtid_eventrequired for subsequent processing of that binary log's GTID events. Now whenSIGHUPis received, steps are taken to insure that the server writes the necessaryPrevious_gtid_eventto the new log before writing any GTID events to the new log. (Bug #17026898)Replication: The
CLIENT_REMEMBER_OPTIONSflag for compressed slave connections is no longer reset and all options are retained. This restores functionality of all options to compressed slave connections. (Bug #72901, Bug #18923691, Bug #73324, Bug #19244772)Replication: When using row-based replication, setting a slave's
slave_rows_search_algorithmsvariable toHASH_SCANcaused anER_KEY_NOT_FOUNDerror even though that record existed in the storage layer. This fix ensures that the unique key for each record is correctly maintained and such a situation does not occur. (Bug #72788, Bug #18860225)-
Replication: When using row-based replication, running a long transaction involving a large number of events could trigger an Out of Memory (OOM) error if the slave's table structure was not compatible with the master's table structure. Such an incompatible situation could occur if the table on the slave had been manually changed, or when replicating between different MySQL versions that have different data types. This OOM error was caused because the virtual temporary tables created for the row conversion were not being freed until the end of the transaction, which was a problem when replicating large numbers of events.
Starting with this version, such virtual tables are correctly freed during the conversion process. (Bug #72610, Bug #18770469)
References: See also: Bug #19692387.
Replication: The error messages generated when a duplicate server UUID causes issues during replication have been improved. The slave error now identifies the duplicate server UUID and the master error identifies the zombie thread that has been killed. (Bug #72578, Bug #18731211)
Replication: When an event group was spanned across multiple relay log files, a slave could incorrectly identify GTID-header group boundaries. This meant that when a transaction was retried, or if the SQL thread was stopped in the middle of a transaction after some rotates, the
Gtid_log_eventwas being silently skipped on the slave, and the transaction was logged with the slave's GTID. This problem also impacted on usingSTART SLAVE UNTIL MASTER_LOG_POS =with GTIDs enabled. Iflog_pos;log_poswas in the middle of a transaction, theGtid_log_eventwas not correctly detected as the beginning of the transaction and replication stopped before this event. With this fix, threads correctly detect that they are part of a group, and this is used to check if aGtid_log_eventis part of a transaction. (Bug #72313, Bug #18652178, Bug #18306199)-
Replication: When
gtid_mode=ON, and a transaction is filtered out on the slave, the GTID of the transaction is still logged on the slave as an “empty” transaction (consisting of a GTID followed immediately byBEGINand thenCOMMIT). This is necessary to prevent the transaction from being retransmitted the next time the slave reconnects or is involved in a failover. The current fix addresses two issues relating to such “empty” transactions:No empty transaction was generated for
CREATE TEMPORARY TABLEorDROP TEMPORARY TABLEstatements.If the slave used a database filter (
--replicate-do-dbor--replicate-ignore-dboption), no empty transaction was generated.
(Bug #71376, Bug #18095502, Bug #18145032)
-
Replication: Client applications should be able to set the
BINLOG_DUMP_NON_BLOCKflag in the initial handshake packet (COM_BINLOG_DUMP). Clients connecting to a server issuing aCOM_BINLOG_DUMPwith the flag unset do not get an EOF when the server has sent the last event in the binary log, which causes the connection to block. This flag, which was removed in error in MySQL 5.6.5, is now restored in the current release.As part of this fix, a new
--connection-server-idoption is added to mysqlbinlog. This option can be used by the client to test a MySQL server for the presence of this issue. (Bug #71178, Bug #18000079) Replication: On a master that is using semisynchronous replication, where
rpl_semi_sync_master_wait_no_slaveis enabled andrpl_semi_sync_master_timeoutis set to long timeout, killing the I/O thread could cause the server to hang on shutdown. This fix ensures that if the dump thread finds that there no semisynchronous slaves connected to the master, the setting ofrpl_semi_sync_master_wait_no_slaveis ignored and the shutdown proceeds correctly. (Bug #71047, Bug #17879675)Replication: Uninstalling and reinstalling semisynchronous replication plugins while semisynchronous replication was active caused replication failures. The plugins now check whether they can be uninstalled and produce an error if semisynchronous replication is active. To uninstall the master-side plugin, there must be no semisynchronous slaves. To uninstall the slave-side plugin, there must be no semisynchronous I/O threads running. (Bug #70391, Bug #17638477)
Replication: When using semisynchronous replication, if the binary log position was changed to a future position on a slave then an assertion error was generated on the master. This fix ensures that in such a situation the future position is correctly acknowledged and an error is instead generated on the slave. (Bug #70327, Bug #17453826)
Replication: Replication of tables that contained temporal type fields (such as
TIMESTAMP,DATETIME, andTIME) from different MySQL versions failed due to incompatibleTIMESTAMPtypes. The fractionalTIMESTAMPformat added in MySQL 5.6.4 was not being correctly converted. You can now replicate aTIMESTAMPin either format correctly according to theslave_type_conversionsvariable. (Bug #70124, Bug #17532932)-
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 acquireLOCK_log.Application thread executing show binary logs, having acquired
LOCK_logand about to acquireLOCK_index.Application thread executing
PURGE BINARY LOGS; having acquiredLOCK_index, it is about to acquireLOCK_thread_count.Application thread executing
SHOW PROCESSLIST(orSELECT * FROM INFORMATION_SCHEMA.PROCESSLIST), having acquiredLOCK_thread_countand about to acquire the zombie dump thread'sLOCK_thd_data.
This leads to the 4 threads deadlocking in the same order which the threads have been listed here.
This problem arises because there are ordering rules for
LOCK_logandLOCK_index, as well as rules for orderingLOCK_thread_countandLOCK_thd_data, but there are no rules for ordering across these two sets of locks. This was because the internalmysqld_list_processes()function invoked bySHOW PROCESSLISTacquiredLOCK_thread_countfor the complete lifetime of the function as well as acquiring and releasing each thread'sLOCK_thd_data. Now this function takes a copy of the threads from the global thread list and performs its traversal on these, and only after releasingLOCK_thread_count. During this traversal, removal from the global thread list is blocked usingLOCK_thd_removesuch that the copies that would otherwise be destroyed by the removal remain valid during traversal. The locking order following this fix is shown here:LOCK_thd_remove -> LOCK_thd_data -> LOCK_log -> LOCK_index -> LOCK_thread_count(Bug #69954, Bug #17283409)
References: See also: Bug #73475, Bug #19364731, Bug #19365180.
Replication: When an SQL thread which was waiting for a commit lock was killed and restarted it caused a transaction to be skipped on slave. This fix ensures that thread positions are correctly persisted and transactions resume at the correct position. (Bug #69873, Bug #17450876)
Microsoft Windows: To help with crash analysis on Windows, more information has been added to the core file that is written on mysqld abort when the
core-fileoption is enabled. (Bug #14041454)With DTrace support enabled, certain other compilation options could cause the build to fail. (Bug #19506247)
yaSSL client code did not validate the encryption size or session ID length, which could cause the client to exit. (Bug #19463277, Bug #19463565)
Before fsync operations, the server reports a wait, but it reported a table-lock wait rather than a sync wait. This is a minor problem, possibly resulting in come incorrect thread pool plugin statistics. (Bug #19428231)
The optimizer could raise an assertion due to incorrectly handling the table map while sorting an internal temporary table. (Bug #19416826)
yaSSL could fail preauthorization if the client supplied inaccurate buffer lengths. (Bug #19370676, Bug #19355577)
Using Multi-Range Read (MRR) for table access could leak Performance Schema instrumented table handles. (Bug #19301539)
For
InnoDBfull-text searches, invalid multibytegb10830characters could cause a server exit. (Bug #19233075)Competition between threads could lead to timeout failure trying to rotate the audit log file. (Bug #19184973)
On Windows,
sql_yacc.ccandsql_yacc.hwere generated twice during the build process. This can lead to compilation failure if parallel processes are permitted. (Bug #19060850, Bug #27470071, Bug #89482)Repetitive functions called as arguments to
ExtractValue()were not always handled correctly. (Bug #19051306)For large sets,
EXPORT_SET()could produce undefined results or a cause a server exit. (Bug #19048609)Invalid
utf16data could cause the server to become unresponsive. (Bug #18937504)LPAD()andRPAD()could cause a server exit if the pad string argument was not well formed. (Bug #18935421)The optimizer could create a zero-length column for a temporary table, causing a server exit. (Bug #18928848)
In debug builds, certain range queries could cause an assertion failure. (Bug #18921626)
Improper copying of query strings between the
Prepared_statementandTHDdata structures could result in a server exit. (Bug #18920075)Performance Schema memory instrumentation did not honor the
ENABLEDflag in thesetup_instrumentstable or the consumers in thesetup_consumerstable. This has been corrected, with the result that unnecessary statistics are not collected and overhead is reduced. (Bug #18900309)-
When a
SELECTincluded a derived table in a join in itsFROMlist and theSELECTlist includedCOUNT(DISTINCT), theCOUNT()returned 1 even if the underlying result set was empty. (Bug #18853696)References: This issue is a regression of: Bug #11760197.
Conversion failure of “zero” dates in strict SQL mode could cause a server exit. (Bug #18840123)
Modulo operations on
DECIMALvalues in some cases could overflow and cause a server exit. (Bug #18839617)Enabling optimizer trace could cause a server exit for queries with a subquery in a
HAVINGclause. (Bug #18791851)SHA and MD5 functions failed for operations using the internal
filenamecharacter set and could cause a server exit. (Bug #18786138)Large arguments passed to mysqldump could lead to buffer overflow and program exit. (Bug #18779944)
If a materialized subquery read from a view, and contained an inner subquery having an outer reference to a column of the view, results could be incorrect. (Bug #18770217)
Passing bad arguments to
SHA2()could cause a server exit. (Bug #18767104)Spatial operations on
InnoDBtables could fail attempting to access nonexistent index statistics. (Bug #18743725)ORDER BYof a GIS function that was given invalid arguments could cause a server exit. (Bug #18701868)The code for processing the
gb18030character set had a too-strict assertion for single-character invalid characters. (Bug #18700668)After a metadata change, a reprepared trigger could cause a server exit or prune an incorrect partition. (Bug #18684393)
mysql_secure_installation ignored options defined after an unrecognized option. (Bug #18659533)
VALIDATE_PASSWORD_STRENGTH()could enter an infinite loop for some arguments. (Bug #18636291)ALTER TABLEon a partitioned table could result in the wrong storage engine being written into the table's.frmfile and displayed inSHOW CREATE TABLE. (Bug #18618561)The server could fail to properly reprepare triggers that referred to another table after that table was truncated. (Bug #18596756, Bug #72446, Bug #18665853)
Compiler flags were not passed to DTrace, causing problems for 32-bit builds cross-compiled on 64-bit platforms. (Bug #18593044)
-
For conditions on the form
t.key NOT IN (c1, c2, ...), if one or more of thec1,c2wasNULL, the optimizer generated incorrect range predicates, possibly yielding incorrect results.The range optimizer would build predicates for empty in-lists (because
NULLvalues are removed fromNOT IN (in-list)). (Bug #18556403, Bug #18715670) After conversion of an in-memory internal temporary table to disk, the server could use a pointer to the old table, resulting in a server exit. (Bug #18535226)
For queries executed using Loose Index Scan, incorrect cost estimates could be produced if index statistics were unavailable. (Bug #18497308)
Setting
default_storage_engineto a bad value could cause server failure later. (Bug #18487724)In debug builds,
MAKE_SET()within aGROUP BYclause raised an assertion. (Bug #18487060)In debug builds, subquery optimization could be overly aggressive about raising an assertion. (Bug #18486607)
In debug builds, a qsort operation on decimal values could raise an assertion. (Bug #18486249)
For debug builds, an assertion was raised for attempts using a cursor within a stored routine to fetch a large value (
INT) which cannot fit into a variable (TINYINT). (Bug #18484649)MODfor very small decimal right-hand arguments could cause a server exit. (Bug #18469276)With the
max_heap_table_sizesystem variable set to a large value (20GB), creation of a temporary table or a table using theMEMORYstorage engine caused a server exit. (Bug #18463911)mysql_session_track_get_first()andmysql_session_track_get_next()returned information only when thetypeargument wasSESSION_TRACK_SYSTEM_VARIABLES, and returned information for all types, not justSESSION_TRACK_SYSTEM_VARIABLES. Now they return information of the type requested and only that type. (Bug #18463441)For mysql_upgrade, specifying the
--defaults-extra-filewith a nonexisting file caused a segmentation fault on some platforms. (Bug #18443096)Assigning some values to the
session_track_system_variablessystem variable could cause a server exit. (Bug #18405677)mysql_install_db could hang while reading
/dev/randomto generate a randomrootpassword. (Bug #18395378)EXPLAIN FOR CONNECTIONshowed an incorrect filtering value for dynamic range queries. (Bug #18395059)The client library now includes a call to
X509_verify_cert_error_string()in the SSL certificate verification code, to be more robust in detecting invalid certificates. (Bug #18384260)Queries that use
AES_ENCRYPT(),AES_DECRYPT(), orRANDOM_BYTES()cannot be cached but were permitted to enter the query cache. (Bug #18383169)If MySQL was built with the
-DINSTALL_LIBDIR=lib64option, mysql_config did not work if the MySQL package was unpacked into a location with a different installation prefix. Also, mysql_config did not work for some RPM builds because it used an incorrect installation prefix. (Bug #18382225)Plugin registration code in the embedded server (compiled without the Performance Schema) failed for plugins compiled with the Performance Schema. (Bug #18363910)
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. (Bug #18359924)
The
HAVE_IB_LINUX_FUTEXCMake check failed due to a missing include file. (Bug #18353271)After a code reorganization in MySQL 5.7.4,
ORDER BYfor multiple-tableUPDATEstatements was ignored. (Bug #18352634)The addition in MySQL 5.7.4 of session state information to the OK packet of the client/server protocol caused the
mysql->infomember to be missing a terminating null terminator. (Bug #18349102)Improper linking of join caches by the optimizer could lead to a server exit. (Bug #18335908)
In debug builds, lack of proper object initialization of decimal objects caused an assertion to be raised. (Bug #18335446)
UNCOMPRESSED_LENGTH()could returnNULLwhen it should not have. (Bug #18335269)On Windows, some test cases ran too slowly due to mysqltest not testing properly for server termination. (Bug #18330694)
The
COM_RESET_CONNECTIONcommand did not reset some session system variables:rand_seed1,rand_seed2,timestamp. Also, it did not clear warnings, and, although it reset theprofilingvariable, it did not reset profiling information. (Bug #18329348, Bug #18329560, Bug #18328396, Bug #18329452)Certain
INFORMATION_SCHEMAqueries could cause a server exit. (Bug #18319790)EXPLAINfor some full-text queries could raise an assertion. (Bug #18313651)Solaris-specific scripts were included in and installed by non-Solaris packages. (Bug #18305641)
DELETEis not allowed on views defined as joins on the base tables. However, MySQL incorrectly permittedREPLACE(which is like a combination ofDELETEandINSERT) on such views. (Bug #18286777)For debug builds, a
0x00character in a full-text query string that used theujis_japanese_ci,utf8mb4_turkish_ci, oreucjpms_bincollation could raise an assertion. (Bug #18277305)innobase_strnxfrm()wrote one byte too many. (Bug #18277082)On Windows, use of the
gb18030_unicode_520_cicaused a server exit. (Bug #18271429)The internal
likely()andunlikely()macros conflicted with Boost symbols. To resolve this, the macros were converted to inline functions. (Bug #18242233)If the left-hand-side of an
INpredicate was a scalar subquery but returned no row, the server could exit. (Bug #18223655, Bug #18447874)For queries involving an
ANDof two geometry ranges, the optimizer could decide no index was usable but try to use it anyway, resulting in a server exit. (Bug #18220153)Argument checking for a
memmove()call inmy_net_read()was improved. (Bug #18184793)mysql_upgrade invoked the mysql and
mysqlcheckclients and the command arguments could be visible to other processes. This issue is addressed by the reimplementation of mysql_upgrade to communicate directly with the server, a change described elsewhere in these release notes. (Bug #18180398)-
yaSSL code had an off-by-one error in certificate decoding that could cause buffer overflow.
yaSSL code had an
opendir()without a correspondingclosedir(). (Bug #18178997, Bug #17201924) EXPLAINon a query with anEXISTSsubquery containing aUNIONcould cause a server exit. Multiple executions of a preparedEXPLAINon aUNIONof subqueries could cause a server exit. (Bug #18167356)mysqladmin password masked the old password given on the command line, but not the new password. (Bug #18163964)
For
InnoDBtables, boolean full-text queries for terms ending with*could return incorrect results. (Bug #18128757)For XA transactions, -1 could be assigned as the format ID part of an XID value, resulting in mishandling (server hang or exit) of concurrent XA statements. (Bug #18107853)
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. (Bug #18080920)
For full-text queries on
InnoDBtables, attempts to access deleted document IDs could lead to a server exit. (Bug #18079671)The optimizer could compute a negative cost value when constructing an execution plan for
MERGEtable queries. (Bug #18066518)Executing a correlated subquery on an
ARCHIVEtable which has anAUTO_INCREMENTcolumn caused the server to hang. (Bug #18065452)Calling
mysql_get_server_version()with an invalid connection handler argument caused the client to exit. Now it returns 0 and reports aCR_COMMANDS_OUT_OF_SYNCerror. (Bug #18053212)MyISAMtemporary files could be used to mount a code-execution attack. (Bug #18045646)If the optimizer chose to perform an index scan, in some cases it could choose a noncovering rather than a covering index. (Bug #18035906)
-
The CMake
-DWITHOUT_PARTITION_STORAGE_ENGINE=1option did not work. As part of fixing this problem, a preferred syntax for disabling storage engines was implmented. The syntax-DWITH_is now preferred toengine_STORAGE_ENGINE=0-DWITHOUT_. For example, use:engine_STORAGE_ENGINE=1-DWITH_EXAMPLE_STORAGE_ENGINE=0 -DWITH_FEDERATED_STORAGE_ENGINE=0 -DWITH_PARTITION_STORAGE_ENGINE=0Rather than:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1(Bug #17947926)
The C client library could leak memory when client plugins were used. (Bug #17933308)
For debug builds,
DROP FUNCTIONwith a too-long function name raised an assertion. (Bug #17903490)A
BEFORE UPDATEtrigger could insertNULLinto aNOT NULLcolumn. (Bug #17864349)A
UNION ALLquery withSQL_CALC_FOUND_ROWSand aLIMITwith an offset for one query block reported an incorrect number of found rows. (Bug #17833261)For debug builds, a
DELETEstatement with a subquery that returned multiple rows in a context requiring a scalar subquery could raise a diagnostic area assertion. (Bug #17787664)Using an outer reference in a
GROUP BYorORDER BYclause in a subquery could cause a server exit. (Bug #17748273)For queries that selected from the
events_statements_currentPerformance Schema table, adding anORDER BYclause could produce incorrect results. (Bug #17729044)A (rare) deadlock could occur between
LOCK_thd_dataand theInnoDBtrx_sysmutex. One thread could read a query string while it was being removed by another thread. (Bug #17606098)On Windows, calling
mysql_thread_init()call withoutmysql_init()caused the client to exit. windows. Now it returns a nonzero result because it is an error to callmysql_thread_init()before the client library is initialized withmysql_library_init(). (Bug #17514920)For
REPLACEon a view, a row being replaced in a view might conflict with one or more rows in the base table, some of which might not be accessible by the view. In some cases, rows inaccessible by the view could be replaced. (Bug #17487701)mysqldump could create table definitions in the dump file that resulted in
Too many columnserrors when reloading the dump file. (Bug #17477959)Using
LOAD DATAto load fixed-length data into a view could cause a server exit. (Bug #17458965)The optimizer trace could cause a server exit in cases where a subquery was transformed away. (Bug #17458054)
UPDATEstatements that modified full-text indexes could cause a server exit. (Bug #17457755)Sending a
SIGQUITorSIGINTsignal to mysql could result in aglibcdouble free or corruption error. (Bug #17297324)A server could have its socket file taken over by a second server listening on different TCP/IP port but the same socket file. The socket file also would be unlinked by normal shutdown of the second server. To avoid this, the server now uses a lock file with the same name as the socket file and a
.locksuffix. (For example,/tmp/mysql.sockhas a lock file of/tmp/mysql.sock.lock.) The lock file contains the process ID of the server process that created the socket file. (Bug #17286856)If a query had both
MIN()/MAX()and(for example,aggregate_function(DISTINCT)SUM(DISTINCT)) and was executed using Loose Index Scan, the result values ofMIN()/MAX()were set improperly. (Bug #17217128)For
UNIONstatements, the rows-examined value was calculated incorrectly. This was manifest as too-large values for theROWS_EXAMINEDcolumn of Performance Schema statement tables (such asevents_statements_current). (Bug #17059925)When joining one large table without indexes to a number of smaller tables with indexes, the optimizer chose to join on the large table as the last table, causing a large number of large table scans. (Bug #16838146)
Row constructor arguments to
INTERVAL()could cause a server exit. (Bug #16439419)An assertion could be raised when creating a index on a prefix of a
TINYBLOBorGEOMETRYcolumn in anInnoDBcolumn. (Bug #16368875, Bug #18776592, Bug #17665767)mysql_config_editor left some files open when they were no longer needed, resulting in Valgrind warnings. (Bug #16368498)
-
Several issues related to the
ONLY_FULL_GROUP_BYSQL mode were corrected:With
ONLY_FULL_GROUP_BYenabled, some valid queries were rejected if the accessed table was replaced by a view.Queries of the form
SELECT DISTINCTqualify as forbidden by SQL2003 (hiddencol1... ORDER BYcol2ORDER BYcolumns combined withDISTINCT), but were not rejected with theONLY_FULL_GROUP_BYSQL mode enabled.
(Bug #16021396, Bug #18993257, Bug #13581713)
The change made in MySQL 5.7.0 to display the XID value in hexadecimal for
XA RECOVERif it contained nonprintable characters was reverted because it caused problems for some clients. Now the statement takes an optionalCONVERT XIDkeyword so that clients can request the XID value in hexadecimal on demand. (Bug #14670465)Use of a nonmultibyte algorithm for skipping leading spaces in multibyte strings could cause a server exit. (Bug #12368495, Bug #18315770)
Executing a
DELETEstatement on a table with no key in safe-update mode resulted in anER_UPDATE_WITHOUT_KEY_IN_SAFE_MODEerror. For debug builds, usingIGNOREin the statement resulted in an assertion being raised. (Bug #74493, Bug #19873291)Binary MySQL distributions for OS X 10.8 and up now bundle the
MySQL.prefPaneandMySQLStartupItem.pkgtools into the main package as configurable options instead of separate packages. (Bug #74123, Bug #19701502)For debug builds, a
SELECTunder load from theevents_statements_currentPerformance Schema table could raise an assertion. (Bug #73530, Bug #19419463)mysql_secure_installation failed to run properly if the
rootaccount authentication plugin wassha256_password. (Bug #73148, Bug #19127636)The server did not take the
lower_case_table_namesvalue into account in determining the database directory from which to read thedb.optsfile, and thus could read the file from an incorrect directory. (Bug #72900, Bug #18923685)SHA2()failed to returnNULLif the hash-length argument wasNULLor not one of the permitted values. (Bug #72856, Bug #18899869)mysql_install_db failed to create the initial
rootaccount ifautocommitwas disabled. (Bug #72724, Bug #18911807)The mysql client displayed
gb18030data incorrectly. (Bug #72573, Bug #18726196)The
gb18030_chinese_cicollation treated'Y'equal to'~'. (Bug #72565, Bug #18729428)The query cache was not invalidated for a table when a
CASCADE DELETEorCASCADE UPDATEreferential constraint was specified and the database name or table name contained special characters. (Bug #72547, Bug #18710853)NOW(in a view definition was stored asN)NOW(), thus losing the fractional seconds part. (Bug #72472, Bug #18675237)If a prepared statement being executed produced an error, the server failed to write the statement to the general query log. (Bug #72375, Bug #18616826)
-
A new CMake option,
SUNPRO_CXX_LIBRARY, enables linking againstlibCstdinstead ofstlport4on Solaris 10 or later. This works only for client code because the server depends on C++98. Example usage:cmake -DWITHOUT_SERVER=1 -DSUNPRO_CXX_LIBRARY=Cstd(Bug #72352, Bug #18605389)
A
SELECTstatement using a subquery withUNIONandORDER BYdid not permit use of an alias in the outer statement. (Bug #72189, Bug #18498344)-
UNIONqueries with an aggregate function in anORDER BYclause were not rejected as they should be. Now such queries are rejected with anER_AGGREGATE_ORDER_FOR_UNIONerror. Example:SELECT 1 AS foo UNION SELECT 2 ORDER BY MAX(1);A nonaggregated query with an
ORDER BYapplied to it cannot contain aggregate functions, but was not rejected as it should be. Now such queries are rejected with anER_AGGREGATE_ORDER_NON_AGG_QUERYerror. Example:SELECT a FROM t1 ORDER BY COUNT(*);(Bug #72174, Bug #18503515, Bug #72512, Bug #18694751)
MODoperations on aDECIMALvalue with leading zeros could produce incorrect results. (Bug #72100, Bug #18509896)mysqlslap accepted an
--iterationsoption value of 0, which resulted in a divide-by-zero error. The minimum option value now is 1. Thanks to Tsubasa Tanaka for the patch. (Bug #72082, Bug #18430704)-
mysql_upgrade could fail if the
mysql.usertable contained multiple accounts with the same user name and host name where the host name differed in lettercase. This is still not permitted, but now mysql_upgrade prints a more informative error message to indicate the nature of the problem:ERROR 1644 (45000): Multiple accounts exist for user_name, host_name that differ only in Host lettercase; remove all except one of them(Bug #72066, Bug #18415196)
ER_CANT_CREATE_GEOMETRY_OBJECTwas treated as a fatal error, thus not catchable with condition handlers. (Bug #72064, Bug #18413646)Some comparisons between
BIGINTsigned and unsigned values could yield incorrect results. (Bug #72046, Bug #18408499)For
IN()predicates with values different from the key data value, the optimizer sometimes used a table scan when it could do a range scan. (Bug #71962, Bug #18364815)mysql_config_editor exited when given an empty argument to the
--login-pathoption. (Bug #71837, Bug #18311024, Bug #18830493)Upgrades using RPM packages could change the ownership of an installation directory. (Bug #71715, Bug #18281535)
The
threadsPerformance Schema table displayed aPROCESS_IDvalue ofNULLfor replication threads. Now it displays the same ID asSHOW PROCESSLISTand theINFORMATION_SCHEMA.PROCESSLISTtable. (Bug #71682, Bug #18259356)In the
DIGEST_TEXTcolumn of Performance Schema statement events tables, references to system variables of the form@@were stored asvar_name@ @. (Bug #71634, Bug #18304086)var_nameFor mysqldump, dump and restore operations failed for database names that contained backslash (
'\'). Thanks to Xiaobin Lin for the patch. (Bug #71437, Bug #18109728)A simultaneous
OPTIMIZE TABLEand onlineALTER TABLEon the sameInnoDBtable could result in deadlock. (Bug #71433, Bug #18110156)XA STARTafter a server restart with the exising XID followed byXA COMMITfailed to commit. (Bug #71352, Bug #18068253)Proxy users were unable to execute statements if the proxied user password had expired. (Bug #71337, Bug #18057562)
MySQL did not compile with Bison 3. (Bug #71250, Bug #18017820, Bug #18978946)
Deadlock could occur if three threads simultaneously performed
INSTALL PLUGIN,SHOW VARIABLES, andmysql_change_user(). (Bug #71236, Bug #18008907, Bug #72870, Bug #18903155)-
A statement of the following form broke row-based replication because it created a table having a field of data type
BIGINTwith 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;(Bug #71179, Bug #17994219)
When MySQL runs as service on Windows,
NTService.Stop()initiates shutdown and exit events during shutdown. After a code reorganization in MySQL 5.7.3, a call toclean_up()was missed, resulting in initiation of crash recovery. (Bug #71104, Bug #17980260)If there was a predicate on a column referenced by
MIN()orMAX()and that predicate was not present in all the disjunctions on key parts earlier in the compound index, Loose Index Scan returned an incorrect result. (Bug #71097, Bug #17909656)Invalid memory access could occur when using prepared statements if a mysql client connection was lost after statement preparation was complete and there was at least one statement that was in initialized state but not prepared yet. (Bug #70429, Bug #17512527)
-
Client auto-reconnect did not work for clients linked against
libmysqlclient, even withMYSQL_OPT_RECONNECTenabled.Also, if a
FEDERATEDtable was accessed afterwait_timeoutexpired, aLost connection to MySQL servererror occurred without an attempt to re-establish the connection. (Bug #70026, Bug #17309863, Bug #14874, Bug #11745408) Full-text queries on
MyISAMtables that included aLIMITclause but noWHEREclause could return too few rows. (Bug #69908, Bug #17261347)Updates could fail to update all applicable rows in cases where multiple key values were identical except for trailing spaces. (Bug #69684, Bug #17156940)
On Windows,
REPAIR TABLEandOPTIMIZE TABLEfailed forMyISAMtables with.MYDfiles larger than 4GB. (Bug #69683, Bug #17235179)For logging of prepared statements to the general query log, the
Executeline was logged after statement execution, not before. (Bug #69453, Bug #16953758, Bug #20536590)Calls to
UNCOMPRESS()produced Valgrind warnings during verification of the zip header of the compressed data. (Bug #69202, Bug #18693654)mysql_tzinfo_to_sql mishandled some values from the abbreviation list (read from the timezone information file) due to failure to account for the null character appended to the end of the char array. (Bug #68861, Bug #16664462)
Some statements could be written to the slow query log twice. (Bug #68626, Bug #16467055)
File permissions and line endings of several test and configuration files were made more consistent to avoid warnings from package checkers. (Bug #68521, Bug #16415173, Bug #16395459, Bug #68517, Bug #16415032, Bug #71112, Bug #17919313, Bug #71113, Bug #17919422)
In some cases, a successful
CREATE VIEWcould add invalid parentheses to expressions in the view definition. (Bug #67791, Bug #15948263)If the general query log or slow query log file was set to a FIFO or socket file, and the file reader went away, the server stopped executing statements. Now the server detects such files, logs an error message, and continues with the appropriate log disabled. (Bug #67088, Bug #14757009)
For non-debug builds of several client programs, the
--helpmessage did not correctly indicate that the--debug,--debug-check, and--debug-infoapply only for debug builds. (Bug #66854, Bug #16272328)Notification of events for the general log were received by the audit log plugin only if the general query log was enabled. Now notifications are posted regardless of whether the general query log is enabled. (Bug #60782, Bug #12368204, Bug #20536590, Bug #75796, Bug #20479643)
Queries that used
GROUP BY INSERT()could produce spurious duplicate-key errors. (Bug #58081, Bug #11765149)mysql_install_db could fail if not invoked in the MySQL installation base directory. (Bug #54034, Bug #11761529)
-
With
big_tablesenabled, queries that usedCOUNT(DISTINCT)on a simple join with a constant equality condition on a non-duplicate key returned incorrect results. (Bug #52582, Bug #11760197)References: See also: Bug #18853696.
LOAD DATA LOCALcould use all CPU if import errors occurred when there were no line delimiters. (Bug #51840, Bug #11759519)For an existing nondynamic (built-in) plugin, the error message for an attempted
UNINSTALL PLUGINwas misleading (the plugin does not exist). Now the message indicates that built-in plugins cannot be uninstalled. (Bug #51771, Bug #11759453)LIKEmatches failed for code points of HALF WIDTH KATAKANA in thesjisandcp932character sets. (Bug #47641, Bug #11755818)-
The server failed to produce an error for
INSERTstatements that provided no column names but did provide column values. (Bug #20943, Bug #11745889, Bug #18064775)References: This issue is a regression of: Bug #16820562.
Connection IDs are 32-bit unsigned integers, beginning at 1. When the server assigns connection IDs and reaches the top of the 32-bit range, it rolls the value over to begin at 1 again. It was possible that the server would assign a connection ID to a new thread while that ID was still in use by an existing thread, if the old thread was particularly long running. For such cases, reference to the ID becomes ambiguous. For example, it cannot reliably be determined for
KILLwhich thread to kill, which could lead to undefined behavior. This behavior has been corrected so that in-use IDs are not reused. (WL #7293)connection_id