MySQL Cluster 7.5.4 has been released (part 1/2)
Balasubramanian Kandasamy <[email protected]> Tue, 18 Oct 2016 22:01:08 +0530
| Newsgroups | gmane.comp.db.mysql.announce,gmane.comp.db.mysql.general,gmane.comp.db.mysql.packagers |
|---|---|
| Message-ID | <[email protected]> |
Dear MySQL Users,
MySQL Cluster 7.5.4 (GA) is the first GA release for MySQL Cluster 7.5.
MySQL Cluster is the distributed, shared-nothing variant of MySQL.
This storage engine provides:
- In-Memory storage - Real-time performance (with optional
checkpointing to disk)
- Transparent Auto-Sharding - Read & write scalability
- Active-Active/Multi-Master geographic replication
- 99.999% High Availability with no single point of failure
and on-line maintenance
- NoSQL and SQL APIs (including C++, Java, http, Memcached
and JavaScript/Node.js)
[Due to size limitations on forum/email, this announcement had to be
split into two parts. This is part 1.]
MySQL Cluster 7.5.4, has been released and can be downloaded from
http://www.mysql.com/downloads/cluster/
where you will also find Quick Start guides to help you get your
first MySQL Cluster database up and running.
The release notes are available from
http://dev.mysql.com/doc/relnotes/mysql-cluster/7.5/en/index.html
MySQL Cluster enables users to meet the database challenges of next
generation web, cloud, and communications services with uncompromising
scalability, uptime and agility.
More details can be found at
http://www.mysql.com/products/cluster/
Enjoy !
Changes in MySQL Cluster NDB 7.5.4 (5.7.16-ndb-7.5.4) (2016-10-18, General Availability)
MySQL Cluster NDB 7.5.4 is a new release of MySQL Cluster 7.5, based
on MySQL Server 5.7 and including features in version 7.5 of the NDB
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html) storage
engine, as well as fixing recently discovered bugs in previous MySQL
Cluster releases.
Obtaining MySQL Cluster NDB 7.5. MySQL Cluster NDB 7.5 source code
and binaries can be obtained from
http://dev.mysql.com/downloads/cluster/.
For an overview of changes made in MySQL Cluster NDB 7.5, see What is
New in MySQL Cluster NDB 7.5
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-what-is-new.html).
This release also incorporates all bugfixes and changes made in
previous MySQL Cluster releases, as well as all bugfixes and feature
changes which were added in mainline MySQL 5.7 through MySQL 5.7.16
(see Changes in MySQL 5.7.16 (2016-10-12, General Availability)
(http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-16.html)).
* Functionality Added or Changed
* Bugs Fixed
Functionality Added or Changed
* Important Change; Packaging: Naming and organization of
the RPMs provided for MySQL Cluster have been changed to align
with those released for the MySQL server. All MySQL Cluster RPM
package names are now prefixed with mysql-cluster. Data nodes are
now installed using the data-node package; management nodes are
now installed from the management-server package; and SQL nodes
require the server and common packages. Important: SQL nodes must
use the mysql-cluster version of these RPMs; the versions
released for the standard MySQL server do not provide support for
the NDB storage engine. All client programs, including both the
mysql client and the ndb_mgm management client, are now included
in the client RPM. For more information, see Installing MySQL
Cluster from RPM
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-install-linux-rpm.html).
* Added the --print-sql-log
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-programs-ndb-restore.html#option_ndb_restore_print-sql-log)
option for the ndb_restore program included with the MySQL Cluster
distribution. This option causes the program to log SQL
statements to stdout. Note that each table being restored in
this fashion must have an explicitly defined primary key; the
hidden primary key implemented by the NDB
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html)
storage engine is not sufficient for this purpose. (Bug
#13511949)
* For fully replicated tables, ndb_desc shows only nodes
holding main fragment replicas for partitions; nodes with copy
fragment replicas only are ignored. To make this information
available in the mysql client, several new tables have been
introduced in the ndbinfo
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbinfo.html)
information database. These tables are listed here,
with brief descriptions:
+ dict_obj_info
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbinfo-dict-obj-info.html)
provides the names and types of database (DICT) objects in NDB,
such as tables and indexes, as well as information about parent
objects where applicable
+ table_distribution_status
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbinfo-table-distribution-status.html)
provides NDB table distribution status information
+ table_fragments
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbinfo-table-fragments.html)
provides information about the distribution of NDB table fragments
+ table_info
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbinfo-table-info.html)
provides information about logging,
checkpointing, storage, and other options in force for each
NDB table
+ table_replicas
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbinfo-table-replicas.html)
provides information about fragment replicas For more information,
see The ndbinfo MySQL Cluster Information Database
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbinfo.html).
(Bug #81762, Bug #23547643)
* ClusterJ: To help applications handle database errors
better, a number of new features have been added to the
ClusterJDatastoreException class:
+ A new method, getCode(), returns code from the NdbError
object.
+ A new method, getMysqlCode(), returns mysql_code from the
NdbError object.
+ A new subclass, ClusterJDatastoreException.Classification,
gives users the ability to decode the result from
getClassification(). The method Classification.toString()
gives the name of the error classification as listed in NDB
Error Classifications
(http://dev.mysql.com/doc/ndbapi/en/ndb-error-classifications.html).
(Bug #22353594)
Bugs Fixed
* Important Change: The default value of the
--ndb-default-column-format
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-options-variables.html#option_mysqld_ndb-default-column-format)
server option has been changed from DYNAMIC to FIXED. This has
been done for backwards compatibility. Only the default has been
changed; setting this option to DYNAMIC continues to cause
DYNAMIC to be used for ROW_FORMAT and COLUMN_FORMAT unless
overridden. (Bug #24487363)
* Important Change: Event buffer status reporting has been
improved by altering the semantics for calculating lag or
slippage. Rather than defining this lag as the number of epochs
behind, lag is now taken as the number of epochs completely
buffered in the event buffer, but not yet consumed by the binlog
injector thread. As part of this work, the default value for the
ndb_report_thresh_binlog_epoch_slip
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-options-variables.html#sysvar_ndb_report_thresh_binlog_epoch_slip)
system variable has been increased from 3 to 10. For more
information, see the description of this variable in the
documentation, as well as Event Buffer Reporting in the Cluster
Log (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-logs-event-buffer.html).
(Bug #22916457) References: See also: Bug #22901309.
* Cluster API: The term "fragment count type" has been
superceded by "partition balance". This change affects NDB_TABLE
options for NDB tables as well as in the NDB API. In NDB_TABLE
table option syntax, the FRAGMENT_COUNT_TYPE keyword is replaced
with PARTITION_BALANCE. In the NDB API, the Table
(http://dev.mysql.com/doc/ndbapi/en/ndb-table.html) methods
getFragmentCountType() and setFragmentCountType() have been
renamed to getPartitionBalance()
(http://dev.mysql.com/doc/ndbapi/en/ndb-table-getpartitionbalance.html)
and setPartitionBalance()
(http://dev.mysql.com/doc/ndbapi/en/ndb-table-setpartitionbalance.html),
respectively; getFragmentCountTypeString() is
renamed to getPartitionBalanceString()
(http://dev.mysql.com/doc/ndbapi/en/ndb-table-getpartitionbalancestring.html).
In addition, Object::FragmentCountType has
been renamed to PartitionBalance
(http://dev.mysql.com/doc/ndbapi/en/ndb-object-partitionbalance.html),
and the names of its enumerated values have been
updated to be consistent with the new nomenclature. For more
information on how these changes affect NDB API applications, see
the indicated Table
(http://dev.mysql.com/doc/ndbapi/en/ndb-table.html) and Object
(http://dev.mysql.com/doc/ndbapi/en/ndb-object.html) member
descriptions. For more information on the SQL-level changes made
as part of this fix, Setting NDB_TABLE options in table comments
(http://dev.mysql.com/doc/refman/5.7/en/create-table-ndb-table-comment-options.html).
(Bug #81761, Bug #23547525)
References: See also: Bug #83147, Bug #24733331.
* If more than 4096 seconds elapsed while calculating an
internal NdbDuration::microSec() value, this could cause an
assert warning that the calculation would overflow. We fix this
to avoid any overflow or precision loss when converting from the
internal "tick" format to microseconds and nanoseconds, by
performing the calculation in two parts corresponding to seconds
and fractions of a second. (Bug #24695026)
* The serial commit protocol---which commits each operation
at each replica individually and serially, and is used by the
DBTC kernel block (see The DBTC Block
(http://dev.mysql.com/doc/ndbapi/en/ndb-internals-kernel-blocks-dbtc.html))
for takeover and when a transaction is judged
to have timed out during the COMMIT or COMPLETE phase---had no
support for LATE_COMMIT, which is required for the READ_BACKUP
and FULLY_REPLICATED protocols. (Bug #24681305)
* In some cases, ALTER TABLE ... REORGANIZE PARTITION
(http://dev.mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html)
could lead to an unplanned shutdown of the
cluster. This was due to the fact that, for fully replicated
tables. the log part ID was assumed to be the same as the
partition ID. This worked when FOR_RA_BY_LDM was used, but not
necessarily for the other partition balancing types. (Bug
#24610551)
* Using ALGORITHM=INPLACE when changing any of a table's
NDB_TABLE properties (see Setting NDB_TABLE options in table
comments
(http://dev.mysql.com/doc/refman/5.7/en/create-table-ndb-table-comment-options.html))
caused the server to fail. (Bug #24584741)
* Following successive ALTER TABLE
(http://dev.mysql.com/doc/refman/5.7/en/alter-table.html)
statements updating NDB_TABLE properties (see Setting NDB_TABLE
options in table comments
(http://dev.mysql.com/doc/refman/5.7/en/create-table-ndb-table-comment-options.html)),
the current values were not always
shown by SHOW CREATE TABLE
(http://dev.mysql.com/doc/refman/5.7/en/show-create-table.html)
or ndb_desc. (Bug #24584690)
* Case-insensitivity of keywords such as FULLY_REPLICATED
in NDB_TABLE comments was not honored. (Bug #24577931)
* An ALTER TABLE
(http://dev.mysql.com/doc/refman/5.7/en/alter-table.html)
statement attempting to set both FULLY_REPLICATED and
PARTITION_BALANCE (see Setting NDB_TABLE options in table
comments
(http://dev.mysql.com/doc/refman/5.7/en/create-table-ndb-table-comment-options.html))
failed with a garbled error message. (Bug #24577894)
* A number of dependencies between the binlog injector
thread and the NDB utility thread---a recurring source of
synchronization and other problems---were removed. The principal
changes are listed here:
+ Moved the setup of binlog injector structures from the
utility thread to the injector thread itself.
+ Removed sharing of some utility and injector thread
structures between these threads.
+ Moved stopping of the utility thread from the injector
thread into a common block in which other such threads are
stopped.
+ Removed a number of hacks required by the previous design.
+ Removed some injector mutex locking and injector condition
signaling which were made obsolete by the changes already
listed. (Bug #24496910) References: See also: Bug #22204186.
* A late commit ACK signal used for FULLY_REPLICATED or
READ_BACKUP tables caused the associated ApiConnectionRecord to
have an invalid state. (Bug #24459817) References: See also: Bug
#24444861.
* Added missing error information for a failure occurring
when tables on disk became full. (Bug #24425373)
* When ndbmtd crashed, the resulting error log incorrectly
specified the name of the trace for thread 0, appending the
nonexistent suffix _t0 to the file name. (Bug #24353408)
* Passing a nonexistent node ID to CREATE NODEGROUP
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-mgm-client-commands.html#ndbclient-create-nodegroup)
led to random data node failures. (Bug #23748958)
* DROP TABLE
(http://dev.mysql.com/doc/refman/5.7/en/drop-table.html) followed
by a node shutdown and subesequent master takeover---and with the
containing local checkpoint not yet complete prior to the
takeover---caused the LCP to be ignored, and in some cases, the
data node to fail. (Bug #23735996) References: See also: Bug
#23288252.
* Removed an invalid assertion to the effect that all
cascading child scans are closed at the time API connection
records are released following an abort of the main transaction.
The assertion was invalid because closing of scans in such cases
is by design asynchronous with respect to the main transaction,
which means that subscans may well take some time to close after
the main transaction is closed. (Bug #23709284)
* Although arguments to the DUMP
(http://dev.mysql.com/doc/ndbapi/en/ndb-internals-dump-commands.html)
command are 32-bit integers, ndb_mgmd used a buffer
of only 10 bytes when processing them. (Bug #23708039)
* The READ_BACKUP setting was not honored when performing
scans on BLOB tables. (Bug #23703536)
* Setting FULLY_REPLICATED=1 (see Setting NDB_TABLE options
in table comments
(http://dev.mysql.com/doc/refman/5.7/en/create-table-ndb-table-comment-options.html))
did not propagate to the internal
BLOB part tables used for BLOB
(http://dev.mysql.com/doc/refman/5.7/en/blob.html) and TEXT
(http://dev.mysql.com/doc/refman/5.7/en/blob.html) columns. (Bug
#23703343)
* The READ_BACKUP setting was not applied to unique
indexes. (Bug #23702848)
* In ReadCommitted mode, DBSPJ read primary fragment
replicas for tables with READ_BACKUP (see Setting NDB_TABLE
options in table comments
(http://dev.mysql.com/doc/refman/5.7/en/create-table-ndb-table-comment-options.html)),
even when a local fragment was available. (Bug #23633848)
* ALL REPORT MemoryUsage produced incorrect output when
fully replicated tables were in use. (Bug #23539805)
* Ordered indexes did not inherit READ_BACKUP (see Setting
NDB_TABLE options in table comments
(http://dev.mysql.com/doc/refman/5.7/en/create-table-ndb-table-comment-options.html))
from an indexed table, which meant
that ordered index scans continued to be routed to only to
primary fragment replicas and never to backup fragment replicas.
Now DBDICT sets this property on ordered indexes from the table
property when it distributes this information to instances of
DBTC and DBSPJ. (Bug #23522027)
* Updates to a table containing a virtual column could
cause the binary logging thread to fail. (Bug #23514050)
* A number of potential buffer overflow issues were found
and fixed in the NDB codebase. (Bug #23152979)
* During an online upgrade from a MySQL Cluster NDB 7.3
release to an NDB 7.4 (or later) release, the failures of several
data nodes running the lower version during local checkpoints
(LCPs), and just prior to upgrading these nodes, led to
additional node failures following the upgrade. This was due to
lingering elements of the EMPTY_LCP protocol initiated by the
older nodes as part of an LCP-plus-restart sequence, and which is
no longer used in NDB 7.4 and later due to LCP optimizations
implemented in those versions. (Bug #23129433)
* A SIGNAL_DROPPED_REP handler invoked in response to long
message buffer exhaustion was defined in the SPJ kernel block,
but not actually used. This meant that the default handler from
SimulatedBlock was used instead in such cases, which shut down
the data node. (Bug #23048816) References: See also: Bug
#23251145, Bug #23251423.
* When a data node has insufficient redo buffer during a
system restart, it does not participate in the restart until
after the other nodes have started. After this, it performs a
takeover of its fragments from the nodes in its node group that
have already started; during this time, the cluster is already
running and user activity is possible, including DML and DDL
operations. During a system restart, table creation is handled
differently in the DIH kernel block than normally, as this
creation actually consists of reloading table definition data
from disk on the master node. Thus, DIH assumed that any table
creation that occurred before all nodes had restarted must be
related to the restart and thus always on the master node.
However, during the takeover, table creation can occur on
non-master nodes due to user activity; when this happened, the
cluster underwent a forced shutdown. Now an extra check is made
during system restarts to detect in such cases whether the
executing node is the master node, and use that information to
determine whether the table creation is part of the restart
proper, or is taking place during a subsequent takeover. (Bug
#23028418)
* ndb_restore set the MAX_ROWS attribute for a table for
which it had not been set prior to taking the backup. (Bug
#22904640)
* Whenever data nodes are added to or dropped from the
cluster, the NDB
(http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html)
kernel's Event API is notified of this using a
SUB_GCP_COMPLETE_REP signal with either the ADD (add) flag or SUB
(drop) flag set, as well as the number of nodes to add or drop;
this allows NDB to maintain a correct count of
SUB_GCP_COMPLETE_REP signals pending for every incomplete bucket.
In addition to handling the bucket for the epoch associated with
the addition or removal, it must also compensate for any later
incomplete buckets associated with later epochs. Although it was
possible to complete such buckets out of order, there was no
handling of these, leading a stall in to event reception. This
fix adds detection and handling of such out of order bucket
completion. (Bug #20402364) References: See also: Bug #82424, Bug
#24399450.
* To be continued in part 2....