Dear MySQL users,
MySQL Server 5.7.5 (Milestone Release) is a new version of the world's
most popular open source database. This is the fifth public milestone
release of MySQL 5.7.
[Due to length restrictions, this announcement is split into three parts.
This is part 1.]
http://dev.mysql.com/doc/mysql-development-cycle/en/development-milestone-releases.html
As with any other pre-production release, caution should be
taken when installing on production level systems or systems with
critical data.
Note that 5.7.5 includes all features in MySQL 5.6.
For information on installing MySQL 5.7.5 on new servers, please see the
MySQL installation documentation at
http://dev.mysql.com/doc/refman/5.7/en/installing.html
MySQL Server 5.7.5 is available in source and binary form for a number of
platforms from the "Development Releases" selection of our download
pages at
http://dev.mysql.com/downloads/mysql/
Some Linux RPM package sets have changed since 5.7.4 in order to be
compatible with our repositories.
Since the previous milestone 5.7.4, packages for Debian 6, FreeBSD 9,
Red Hat Enterprise Linux/Oracle Linux 5 and OSX 10.6 and 10.7 have
been discontinued while packages for newer OS releases have been
addded: FreeBSD 10, OSX 10.8 and Red Hat Enterprise
Linux/Oracle Linux 7.
MySQL Server 5.7.5 is also available from our repository for Linux
platforms, go here for details:
http://dev.mysql.com/downloads/repo/
Windows packages are now available via the new Installer for Windows
Installer or .ZIP (no-install) packages for more advanced needs. It
should be noted that the previous MSI packaging is no longer available
and the point and click configuration wizards and all MySQL products
are now available in the unified Installer for Windows:
http://dev.mysql.com/downloads/installer/
5.7.5 also comes with a web installer as an alternative to the full
installer.
The web installer doesn't come bundled with any actual products
and instead relies on download-on-demand to fetch only the
products you choose to install. This makes the initial download
much smaller but increases install time as the individual products
will need to be downloaded.
We welcome and appreciate your feedback, bug reports, bug fixes,
patches, etc.:
http://bugs.mysql.com/report.php
The following section lists the changes in MySQL 5.7.5 since the
previous milestone.
http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html
Enjoy!
On behalf of the MySQL Build Team at Oracle,
- Bjorn Munch
Changes in MySQL 5.7.5 (2014-09-25, Milestone 15)
Note
This is a milestone release, for use at your own risk. 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.
Due to the large number of changes in the milestone release, some
may not have made it into this changelog at the time of the release.
The complete changelog will be updated at this location:
http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html
Compilation Notes
* Important Change: 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/Clang 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_LOCKS and
MY_ATOMIC_MODE_RWLOCKS CMake 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 -march compiler option. For example, use
GCC 4.4, which is available on Red Hat 5. For information
about specifying compiler options, see Compiler Flags
(http://dev.mysql.com/doc/refman/5.7/en/source-configurat
ion-options.html#cmake-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.
* CMake now checks for minimum versions of supported compilers:
gcc 4.4 (Linux, Solaris); Sun Studio 12u2 (Solaris client
library); Clang 3.3 (Mac OS X, FreeBSD). This check can be
disabled with the -DFORCE_UNSUPPORTED_COMPILER=ON option. (Bug
#19187034)
* Noisy compiler warnings on FreeBSD 10 were silenced. (Bug
#18790490)
* CMake workarounds for older Mac OS X and XCode versions were
removed. On Mac OS X, compilation always uses Clang, even for
32-bit builds.
Compilation on Mac OS X is now supported for Mac OS 10.8 and
up, using XCode 5 and up. Compilation on older versions may
work but is unsupported. (Bug #18510941)
* Previously, the MYSQL_MAINTAINER_MODE CMake option was turned
on by default for debug builds and off for release builds, and
MYSQL_MAINTAINER_MODE caused -Werror to be enabled when
building with GCC. This made it cumbersome to enable -Werror
under certain conditions, such as when compiling with Clang.
Now, MYSQL_MAINTAINER_MODE is on by default when compiling
debug builds with GCC, and MYSQL_MAINTAINER_MODE enbles
-Werror regardless of whether GCC or Clang is used. Enabling
-Werror with Clang can be done simply by explicitly setting
-DMYSQL_MAINTAINER_MODE=1 when 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)
DTrace Support
* 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
(http://dev.mysql.com/doc/refman/5.7/en/dba-dtrace-server.html
).
InnoDB Notes
* 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
(http://dev.mysql.com/doc/refman/5.7/en/innodb-recovery-tables
pace-discovery.html).
This enhancement changes the redo log format, requiring that
MySQL be shut down cleanly before upgrading to or downgrading
from MySQL 5.7.5.
* Incompatible Change: The InnoDB storage engine can no longer
be disabled. The --skip-innodb option is deprecated and has no
effect, and its use results in a warning. It will be removed
in a future MySQL release. This also applies to its synonyms
(--innodb=OFF, --disable-innodb, and so forth).
A new innodb_lock_no_retry flag for the --debug option is now
available. --debug='d,innodb_lock_no_retry' causes InnoDB to
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 when InnoDB cannot acquire its locks.
One reason for disabling InnoDB is to enable starting a server
instance using the same data directory as an existing
instance. (MyISAM permits that, but InnoDB does not.) Because
InnoDB can 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.
Performance Schema Notes
* Incompatible Change: The Performance Schema now provides a
user_variables_by_thread table that exposes user-defined
variables. For more information, see Performance Schema
Connection Attribute Tables
(http://dev.mysql.com/doc/refman/5.7/en/performance-schema-con
nection-attribute-tables.html).
In consequence of this change, the server now limits
user-defined variable names to a maximum of 64 characters, the
length of the VARIABLE_NAME column 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
(http://dev.mysql.com/doc/refman/5.7/en/user-variables.html)).
Queries that use very long user-defined variable names must be
rewritten to user shorter names.
If you upgrade to this release of MySQL from an earlier
version, you must run mysql_upgrade (and restart the server)
to incorporate this change into the performance_schema
database.
Optimizer Notes
* The optimizer computes more accurate costs for semi-join
materialization. (Bug #18558561)
* Optimizer trace output for range access in the
considered_access_path section has been improved: Instead of
always printing "access_type": "ref" for index lookup types,
"eq_ref", "ref", or "fulltext" is now printed. (Bug #18195373)
* 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 has in addition a database of cost estimates
to use during execution plan construction. These estimates are
stored in the server_cost and engine_cost tables in the mysql
system database and are configurable at any time: Any non-NULL
cost estimate stored in the cost model tables overrides the
corresponding compiled-in default estimate. Any NULL estimate
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 FLUSH variant, FLUSH OPTIMIZER_COSTS, that
causes the server to reread the cost tables and apply any
changed estimates to new sessions.
For more information, see The Optimizer Cost Model
(http://dev.mysql.com/doc/refman/5.7/en/cost-model.html).
If you upgrade to this release of MySQL from an earlier
version, you must run mysql_upgrade (and restart the server)
to incorporate these changes into the mysql database.
* 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 EXPLAIN output are more accurate, as
well as the filter values in some cases.
+ Cardinality estimates in the index statistics displayed
by SHOW INDEX are more accurate for InnoDB tables.
* During query execution plan construction, the optimizer now
uses condition filtering to make better use of all conditions
on a table in determining the estimate of qualifying rows that
will be joined to the next table. This behavior is controlled
by the condition_fanout_filter flag for the optimizer_switch
system variable. This flag is on by default but can be
disabled to suppress use of condition filtering.
Performance Schema Notes
* The Performance Schema stage event tables
(events_stages_current, events_stages_history, and
events_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 stage
+ WORK_ESTIMATED: The number of work units expected for the
stage
Each column is NULL if 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, the stage/sql/copy to
tmp table instrument 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
(http://dev.mysql.com/doc/refman/5.7/en/performance-schema-sta
ge-tables.html).
If you upgrade to this release of MySQL from an earlier
version, you must run mysql_upgrade (and restart the server)
to incorporate this change into the performance_schema
database.
* Previously, for the wait event tables (such as
events_waits_current), the NUMBER_OF_BYTES column was NULL for
table I/O waits; that is, for events for the
wait/io/table/sql/handler instrument. 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 N rows, rather than reporting a single-row
event N times. 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_BYTES
column in The events_waits_current Table
(http://dev.mysql.com/doc/refman/5.7/en/events-waits-current-t
able.html).
Security Notes
* 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 mysql_old_password authentication 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
(http://dev.mysql.com/doc/refman/5.7/en/account-upgrades.
html).
+ The --secure-auth option 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 release.
+ The --skip-secure-auth option to the server and client
programs is no longer supported and using it produces an
error.
+ The secure_auth system variable permits only a value of
1; a value of 0 is no longer permitted.
+ For the old_passwords system variable, a value of 1
(produce pre-4.1 hashes) is no longer permitted.
+ The OLD_PASSWORD() function is removed.
SQL Mode Notes
* Incompatible Change: These SQL mode changes were made:
+ Strict SQL mode for transactional storage engines
(STRICT_TRANS_TABLES) is now enabled by default.
+ Implementation for the ONLY_FULL_GROUP_BY SQL mode has
been made more sophisticated, to no longer reject
deterministic queries that previously were rejected. In
consequence, this mode is now enabled by default, to
prohibit only nondeterministic queries for which
expressions are not guaranteed to be uniquely determined
within a group.
Checking for ONLY_FULL_GROUP_BY has also become more
sophisticated and no longer rejects queries that are
deterministic.
+ The changes to the default SQL mode result in a default
sql_mode system variable value of
ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TA
BLES.
+ The ONLY_FULL_GROUP_BY mode is now included in the the
ANSI SQL mode.
+ A new function, ANY_VALUE(), is available. Its return
value and type are the same as the return value and type
of its argument, but the function result is not checked
for the ONLY_FULL_GROUP_BY SQL mode. The function does
not make a nondeterministic query deterministic, but it
can be used to force MySQL to accept queries that it
thinks should be rejected with ONLY_FULL_GROUP_BY
enabled.
For more information about SQL modes, see Server SQL Modes
(http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html).
Security Notes
* MySQL now includes a server-side authentication plugin named
mysql_no_login for 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 a DEFINER of
that account, and include SQL SECURITY DEFINER in 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_login as the authentication plugin when you
create the proxy account.
For more information, see The No-Login Authentication Plugin
(http://dev.mysql.com/doc/refman/5.7/en/mysql-no-login-plugin.
html).
Spatial Data Support
* InnoDB: SPATIAL indexes can now be used for InnoDB tables.
InnoDB supports indexing of spatial data types, including use
of ALTER TABLE ... ALGORITHM=INPLACE for online operations
(ADD SPATIAL INDEX). To support transaction isolation
properties, InnoDB uses 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
(http://dev.mysql.com/doc/refman/5.7/en/optimizing-spatial-ana
lysis.html). and Predicate Locking for Spatial Indexes
(http://dev.mysql.com/doc/refman/5.7/en/innodb-predicate-locks
.html). (Bug #18674219)
* GeometryCollection() returned NULL if the argument contained
nonsupported geometries. Now GeometryCollection() returns all
the proper geometries contained in the argument even if a
nonsupported geometry is present. (Bug #17168643)
* 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 2
0))'));
+---------------------------------------------------------------+
| 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 2
0))'));
+---------------------------------------------------------------+
| AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))')) |
+---------------------------------------------------------------+
| POLYGON((10 10,20 10,20 20,10 20,10 10)) |
+---------------------------------------------------------------+
(Bug #17168699)
* 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
a POINT value.
+ ST_LongFromGeoHash() and ST_LatFromGeoHash() return the
longitude or latitude value, respectively, given a
geohash string argument.
+ ST_PointFromGeoHash() produces a POINT value from a
geohash string argument.
* MySQL now includes functions for converting between GeoJSON
documents and spatial values: ST_AsGeoJSON() and
ST_GeomFromGeoJSON(). For more information, see Spatial
GeoJSON Functions
(http://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functi
ons.html).
* Several previously unimplemented spatial functions are now
available: The ST_ConvexHull function and the set operation
functions ST_Difference(), ST_SymDifference(),
ST_Intersection(), and ST_Union().
Functionality Added or Changed
* 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-address option enabling the network interface for
connecting to the server to be chosen. It also supports
--net-buffer-length and --max-allowed-packet options enabling
the initial and maximum communication packet size to be
specified.
Also in consequence of this change, mysql_upgrade no longer
supports the --tmpdir option. 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 --tmpdir must be modified to remove that option.
* Incompatible Change: In MySQL 5.6.6, the YEAR(2) data type was
deprecated. Support for YEAR(2) has now been removed. Once you
upgrade to MySQL 5.7.5 or newer, any remaining YEAR(2) columns
must be converted to YEAR(4) to become usable again. For
conversion strategies, see YEAR(2) Limitations and Migrating
to YEAR(4)
(http://dev.mysql.com/doc/refman/5.7/en/migrating-to-year4.htm
l). For example, run mysql_upgrade after upgrading.
* Incompatible Change: The GET_LOCK() 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 second GET_LOCK() call
released any existing lock. Now GET_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_DEADLOCK
error 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 the
Performance Schema metadata_locks table. The OBJECT_TYPE
column says USER LEVEL LOCK and the OBJECT_NAME column
indicates the lock name.
+ A new function, RELEASE_ALL_LOCKS() permits release of
all acquired named locks at once.
For more information, see Miscellaneous Functions
(http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-function
s.html).
* 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 executable binary version is located in the bin
installation directory, whereas the Perl version is located in
the scripts installation directory. For upgrades from an older
version of MySQL, you may find a version in both directories.
To avoid confusion, remove the version in the scripts
directory.
* InnoDB: For optimal shutdown and recovery performance,
shutdown and recovery phases are now supported by the
multi-threaded page cleaner feature (innodb_page_cleaners)
that was introduced in MySQL 5.7.4. (Bug #18805275)
* InnoDB: The innodb_buffer_pool_size parameter 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 new innodb_buffer_pool_chunk_size
configuration option. You can monitor resizing progress using
the new Innodb_buffer_pool_resize_status status variable. For
more information, see Resizing the InnoDB Buffer Pool Online
(http://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-onl
ine-resize.html).
See Resizing the InnoDB Buffer Pool Online
(http://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-onl
ine-resize.html) for more information.
* InnoDB: The FIL_PAGE_FLUSH_LSN field, written to the first
page of each InnoDB system tablespace file and to InnoDB undo
tablespace files, is now only written to the first file of the
InnoDB system tablespace (page number 0:0).
* InnoDB: Instead of inserting one index record at a time,
InnoDB now 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. 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.
* InnoDB: InnoDB memory allocations now are instrumented for the
Performance Schema
(http://dev.mysql.com/doc/refman/5.7/en/performance-schema.htm
l) and will appear in the memory summary tables
(http://dev.mysql.com/doc/refman/5.7/en/memory-summary-tables.
html).
* InnoDB: You can now truncate undo logs that reside in undo
tablespaces. This feature is enabled using the
innodb_undo_log_truncate configuration option. For more
information, see Truncating Undo Logs That Reside in Undo
Tablespaces
(http://dev.mysql.com/doc/refman/5.7/en/truncate-undo-tablespa
ce.html).
* InnoDB: Work was done to introduce the notion of attachable
transactions in InnoDB (for AutoCommit / ReadOnly /
ReadCommitted / NonLocking transactions). This is used to read
from InnoDB Data Dictionary tables. Along with this,
attachable transactions were exposed to the server. Data
Dictionary access code will use them to read Data Dictionary
data.
* 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_uuid value, which is the
server_uuid value from the master. The master_uuid value is
unsupported on the older master, and in such a replication
situation could become invalid on the newer slave. A check for
empty master_uuid now ensures that the slave uses an empty
value for master_uuid. (Bug #18338203)
* Replication: Retrying of transactions is now supported when
multi-threading is enabled on a slave. In previous versions,
slave_transaction_retries was treated as equal to 0 when using
multi-threaded slaves. (Bug #16390504, Bug #68465)
* 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_executed table 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_executed table 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 the executed_gtids_compression_period
system variable. This variable's default value is 1000, which
means that compression of the table is applied following each
1000 transactions. You can set the
executed_gtids_compression_period to 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
(http://dev.mysql.com/doc/refman/5.7/en/replication-gtids-conc
epts.html#replication-gtids-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 Performance Schema threads table. (Bug
#14730192)
* Replication: The new system variable
binlogging_impossible_mode controls what happens if the server
cannot write to the binary log, for example, due to a file
error. For backward compatibility, the default for
binlogging_impossible_mode is IGNORE_ERROR, meaning the server
logs the error, halts logging, and continues updates to the
database. Setting this variable to ABORT_SERVER makes the
server halt logging and shut down if it cannot write to the
binary log. (Bug #51014, Bug #11758766)
* Replication: Multi-threaded slaves can use the new
slave_preserve_commit_order variable 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
multi-threaded slaves for replication read scale-out.
* Replication: The new options binlog_group_commit_sync_delay
and binlog_group_commit_sync_no_delay_count provide 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.
* 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.
* Replication: To make monitoring of a replication setup easier,
various replication related variables have been moved to the
performance_schema tables. This is particularly helpful for
monitoring multi-source replication.
* The rwlock used for the SAFE_HASH implementation is now
instrumented for the Performance Schema. The instrument name
is wait/synch/rwlock/mysys/SAFE_HASH::lock. (Bug #18991366)
* CMake support was updated to handle CMake version 3. (Bug
#19001781)
* 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 packaging
directory, in the deb-precise, deb-wheezy, and deb-trusty
directories. (Bug #19020385)
* 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-SElinux file was removed. (Bug #18651087)
* Unused private fields reported by Clang's
-Wunused-private-field compiler warning option were removed.
(Bug #18489724)
* thr_alarm.h and thr_alarm.c were removed because they contain
dead code almost exclusively. The remaining live code was
moved to mysqld.cc. my_alarm.h and my_alarm.c were also
removed, and the code from them that is actually used was
moved to my_lock.c. (Bug #18411456)
* The deprecated timed_mutexes system variable has been removed.
(Bug #18277305)
* The obsolete and unmaintained charset2html utility has been
removed from MySQL distributions. (Bug #71897, Bug #18352347)
* A new status variable, Max_used_connections_time, indicates
the time at which Max_used_connections reached its current
value. Thanks to Jordi Prats for the patch. (Bug #59738, Bug
#11766596)
* mysqld help text for --general_log was clarified. Thanks to
Andrew Gaul for the patch. (Bug #71463, Bug #18127243)
* The fill_help_tables.sql file 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. For more information, see Replication of
Server-Side Help Tables
(http://dev.mysql.com/doc/refman/5.7/en/replication-features-s
erver-side-help.html). (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-logs command, 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 the FLUSH LOGS SQL statement. Thanks
to Dani?l van Eeden for the patch. (Bug #60878, Bug #12368203)
* Scalability for InnoDB tables was improved by avoiding
THR_LOCK locks. As a result of this change, DML statements for
InnoDB tables that previously waited for a THR_LOCK lock 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 ... READ for that table.
This is similar to how LOCK TABLES ... WRITE works.
+ Tables that are implicitly locked by LOCK TABLES now will
be locked using metadata locks rather than THR_LOCK locks
(for InnoDB tables), and locked using metadata locks in
addition to THR_LOCK locks (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 ... READ statements on any table
in the update, even if the table is used only for
reading.
+ HANDLER ... READ for any storage engine will block and be
blocked by a concurrent LOCK TABLES ... WRITE, but now
using a metadata lock rather than a THR_LOCK lock.
The preceding changes are visible several ways. For example,
when a DML statement such as INSERT INTO t1 in one session is
blocked by LOCK TABLES t1 READ in another session:
+ In the Performance Schema, THR_LOCK acquisitions and
waits will be registered in the metadata_locks table and
for wait/lock/metadata/sql/mdl events rather than
registered in the table_handles table and for
wait/lock/table/sql/handler events.
+ In the process list (SHOW PROCESSLIST or
INFORMATION_SCHEMA.PROCESSLIST), the state value will be
Waiting for table metadata lock rather than Waiting for
table level lock.
+ The Table_locks_immediate and Table_locks_waited status
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 ...
READ and a DML statement affecting the same InnoDB table
might lead to Found lock of type 6 that is write and read
locked warnings in the error log.
(Bug #42147, Bug #11751331)
* CMake support was updated to handle the new directory layout
for Sun C++ 5.13. (Bug #73034, Bug #19010286)
* Internally, spatial data types such as Geometry are
represented as BLOB values, so when invoked with the
--hex-blob option, mysqldump now displays spatial values in
hex. (Bug #43544, Bug #11752369)
* Previously, on Unix and Unix-like systems, MySQL support for
sending the server error log to syslog was implemented by
having mysqld_safe capture server error output and pass it to
syslog. The server now includes native syslog support, which
has been extended to include Windows. mysqld_safe still has
syslog capability, but this is now deprecated and native
server support should be used instead. For more information
about sending server error output to syslog, see The Error Log
(http://dev.mysql.com/doc/refman/5.7/en/error-log.html). (Bug
#55370, Bug #11762739)
* The deprecated storage_engine system variable has been
removed. Use default_storage_engine instead.
* The mysql client now indicates whether USE statements produced
warnings. (Bug #29965, Bug #11746951)
* The deprecated mysqlbug, mysql_waitpid, and mysql_zap
utilities have been removed from MySQL distributions.
* The deprecated mysqlhotcopy utility has been removed from
MySQL distributions. Alternatives include mysqldump and MySQL
Enterprise Backup.
* The Boost 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=path_name specifies the Boost library
directory location. It is also possible to specify the
Boost location by setting the BOOST_ROOT or WITH_BOOST
environment variable.
+ -DDOWNLOAD_BOOST=bool specifies whether to download the
Boost source if it is not present in the specified
location. The default is OFF.
For example, if you normally build MySQL placing the object
output in the bld subdirectory of your MySQL source tree, you
can build with Boost like this:
mkdir bld
cd bld
cmake .. -DDOWNLOAD_BOOST=ON -DWITH_BOOST=$HOME/my_boost
This causes Boost to be downloaded into the my_boost directory
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.
* 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).
* It is now possible to specify the storage engine the server
uses for on-disk internal temporary tables (see How MySQL Uses
Internal Temporary Tables
(http://dev.mysql.com/doc/refman/5.7/en/internal-temporary-tab
les.html)), by setting the new
internal_tmp_disk_storage_engine system variable. Permitted
values are MYISAM (the default) and INNODB.
* mysqlslap now has a --sql-mode option that enables the SQL
mode to be set for the client session.
* ALTER TABLE ... EXCHANGE PARTITION syntax now includes an
optional {WITH|WITHOUT} VALIDATION clause. When WITHOUT
VALIDATION is specified, ALTER TABLE ... EXCHANGE PARTITION
does 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
VALIDATION is the default behaviour and need not be specified
explicitly. For more information, see Exchanging Partitions
and Subpartitions with Tables
(http://dev.mysql.com/doc/refman/5.7/en/partitioning-managemen
t-exchange.html).
* MySQL Server now supports an "offline mode" with these
characteristics:
+ Connected client users who do not have the SUPER
privilege 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 SUPER privilege 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 SUPER privilege can control offline
mode. To put a server in offline mode, change the value of the
new offline_mode system variable from OFF to ON. To resume
normal operations, change offline_mode from ON to OFF. In
offline mode, clients that are refused access receive an
ER_SERVER_OFFLINE_MODE error.
* The server-side help tables and time zone tables in the mysql
system database now are InnoDB (transactional) tables.
Previously, these were MyISAM (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_type
If you upgrade to this release of MySQL from an earlier
version, you must run mysql_upgrade (and restart the server)
to incorporate these changes into the mysql database.
START TRANSACTION and COMMIT statements 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.
* In the MySQL client/server protocol, EOF and OK packets serve
the same purpose, to make 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.
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql