Posted
over 4 years
ago
by
InsideMySQL.com
Dear MySQL users,
MySQL Shell 8.0.19 is a maintenance release of MySQL Shell 8.0 Series (a
component of the MySQL Server). The MySQL Shell is provided under
Oracle’s dual-license.
... [More]
MySQL Shell 8.0 is highly recommended for use with MySQL Server 8.0 and
5.7. Please upgrade to MySQL Shell 8.0.19.
MySQL Shell is an interactive JavaScript, Python and SQL console
interface, supporting development and administration for the MySQL
Server. It provides APIs implemented in JavaScript and Python that
enable you to work with MySQL InnoDB cluster and use MySQL as a document
store.
The AdminAPI enables you to work with MySQL InnoDB cluster, providing an
integrated solution for high availability and scalability using InnoDB
based MySQL databases, without requiring advanced MySQL expertise. For
more information about how to configure and work with MySQL InnoDB
cluster see
https://dev.mysql.com/doc/refman/en/mysql-innodb-cluster-userguide.htmlThe X DevAPI enables you to create “schema-less” JSON document
collections and perform Create, Update, Read, Delete (CRUD) operations
on those collections from your favorite scripting language. For more
information about how to use MySQL Shell and the MySQL Document Store
support see
https://dev.mysql.com/doc/refman/en/document-store.htmlFor more information about the X DevAPI see
https://dev.mysql.com/doc/x-devapi-userguide/en/If you want to write applications that use the the CRUD based X DevAPI
you can also use the latest MySQL Connectors for your language of
choice. For more information about Connectors see
https://dev.mysql.com/doc/index-connectors.htmlFor more information on the APIs provided with MySQL Shell see
https://dev.mysql.com/doc/dev/mysqlsh-api-javascript/8.0/and
https://dev.mysql.com/doc/dev/mysqlsh-api-python/8.0/Using MySQL Shell’s SQL mode you can communicate with servers using the
legacy MySQL protocol. Additionally, MySQL Shell provides partial
compatibility with the mysql client by supporting many of the same
command line options.
For full documentation on MySQL Server, MySQL Shell and related topics,
see
https://dev.mysql.com/doc/mysql-shell/8.0/en/For more information about how to download MySQL Shell 8.0.19, see the
“General Availability (GA) Releases” tab at
http://dev.mysql.com/downloads/shell/We welcome and appreciate your feedback and bug reports, see
http://bugs.mysql.com/Enjoy and thanks for the support!
Changes in MySQL Shell 8.0.19 (2020-01-13, General Availability)
InnoDB Cluster Added or Changed Functionality
* Incompatible Change: The AdminAPI now includes InnoDB
ReplicaSets, that enables you to administer asynchronous
replication set ups in a similar way to InnoDB cluster.
The addition of InnoDB ReplicaSet means that the InnoDB
cluster metadata schema has been upgraded to version 2.0.
Regardless of whether you plan to use InnoDB ReplicaSet
or not, to use MySQL Shell 8.0.19 and AdminAPI you must
upgrade the metadata of your clusters. Connect MySQL
Shell’s global session to your cluster and use the new
dba.upgradeMetadata() operation to upgrade the cluster’s
metadata to use the new metadata.
Warning
Without upgrading the metadata you cannot use MySQL Shell
8.0.19 to change the configuration of a cluster created
with earlier versions. You can only read the
configuration of the cluster, for example using
Cluster.status().
The dba.upgradeMetadata() operation upgrades any
automatically created MySQL Router users to have the
correct privileges. Manually created MySQL Router users
with a name not starting with mysql_router_ are not
automatically upgraded. This is an important step in
upgrading your cluster, only then can the MySQL Router
application be upgraded.
Warning
A cluster which is using the new metadata cannot be
administered by earlier MySQL Shell versions, for example
once you upgrade to version 8.0.19 you can no longer use
version 8.0.18 or earlier to administer the cluster.
To get information on which of the MySQL Router instances
registered with a cluster require the metadata upgrade,
issue
cluster.listRouters({‘onlyUpgradeRequired’:’true’}).
* AdminAPI now supports socket connections to be used for
cluster and replica set operations. (Bug #26265826)
* You can now get information about the MySQL Router
instances registered with a InnoDB cluster, and
unregister a Router from a cluster, for example when you
stop using it. The list of Routers registered with a
cluster contains information about whether the Router
instance is compatible with the version of MySQL on the
cluster instances, which guides you when upgrading a
cluster. Use the Cluster.listRouters() operation to show
a list of all Routers registered with the cluster. The
returned JSON object provides information such as the
hostname, ports, and if an upgrade is required. To filter
the list to only show Router instances that do not
support the latest metadata version use the
onlyUpgradeRequired option, for example by issuing
Cluster.listRouters({‘onlyUpgradeRequired’:’true’}). To
remove a registered Router from a cluster, use the
Cluster.removeRouterMetadata(router) operation.
* The AdminAPI includes support for InnoDB ReplicaSet, that
enables you to administer asynchronous replication sets
in a similar way to InnoDB cluster. InnoDB ReplicaSet
enables you to deploy an asynchronous replication set
consisting of a single primary and multiple secondaries
(traditionally referred to as the MySQL replication
master and slaves). You administer a ReplicaSet using
AdminAPI operations, for example to check the status of
the InnoDB ReplicaSet, and manually failover to a new
primary in the event of a failure. Similar to InnoDB
cluster, MySQL Router supports bootstrapping against
InnoDB ReplicaSet, which means you can automatically
configure MySQL Router to use your InnoDB ReplicaSet
without having to manually configure files. This makes
InnoDB ReplicaSet a quick and easy way to get MySQL
replication and MySQL Router up and running, making it
well suited to scaling out reads, development
environments, and applications that do not require the
high availability offered by InnoDB cluster.
InnoDB Cluster Bugs Fixed
* The dba.configureLocalInstance() operation could fail
with a key not found (LogicError) error when executed on
a non-sandbox instance where it did not have access to
the my.cnf option file and the operation requested an
output configuration file to be specified. (Bug
#30657204)
* If a cluster had been deployed with MySQL Shell version
8.0.14 or earlier, the metadata contained an invalid port
number for X Protocol connections. The metadata upgrade
catches such ports and removes the invalid number. To
avoid problems with routing due to this incorrect port,
upgrade your cluster’s metadata. (Bug #30618264)
* When a replication slave was configured to read from an
InnoDB cluster primary, even with the appropriate
replication filtering to ignore the metadata replication
was failing when an instance was added to the cluster
using MySQL Clone as the recovery method. This was
because the recovery process was granting a privilege on
an account, which failed and broke replication. (Bug
#30609075)
* The Cluster.removeInstance() operation was issuing a
misleading error message when the instance was
unreachable, indicating that it did not belong to the
cluster when an alternative valid host or IP was used.
Now, the error indicates that the instance is
unreachable. (Bug #30580393)
* Although MySQL Shell version 8.0.18 added support for
IPv6 in WL#12758
(https://dev.mysql.com/worklog/task/?id=12758), using an
InnoDB cluster which consisted of MySQL Shell version
8.0.18 and MySQL Router 8.0.18 with IPv6 addresses was
not possible. With the release of version 8.0.19 of both
MySQL Shell and MySQL Router, be aware that:
+ combining MySQL Shell version 8.0.18 with MySQL
Router 8.0.18 causes Router to fail, due to no IPv6
support. (BUG#30354273)
+ combining MySQL Shell version 8.0.18 with Router
8.0.19 in a cluster which uses X Protocol
connections, results in AdminAPI storing mysqlX IPv6
values incorrectly in the metadata, causing Router
to fail. (BUG#30548843) However, combining MySQL
Shell version 8.0.18 with Router 8.0.19 in a cluster
which uses MySQL classic protocol connections, is
possible.
Therefore, to use InnoDB cluster with IPv6 addresses,
regardless of the protocol used, the recommended
deployment is MySQL Shell 8.0.19 and MySQL Router 8.0.19.
(Bug #30548843)
References: See also: Bug #30354273.
* When using automatic rejoin, if a target instance was
rejoining the cluster, operations such as
dba.rebootClusterFromCompleteOutage(), Cluster.status(),
and so on were failing. Now, clusters consider automatic
rejoin as an instance state instead of a check that
always aborts the operation. This ensures that
Cluster.status() is reported even for instances which are
rejoining the cluster, and that
dba.rebootClusterFromCompleteOutage() can detect
instances which are rejoining the cluster and override
the rejoin operation so that the cluster can be properly
rebooted. (Bug #30501590)
* SSL client certificate options for the clusterAdmin user
were not being copied when setting up connection options,
which made them fail when connecting. (Bug #30494198)
* When the automatically calculated localAddress is not
valid, for example when it exceeds the valid range, the
error message has now been improved. See Configuring
Ports
(https://dev.mysql.com/doc/refman/8.0/en/mysql-innodb-cluster-production-deployment.html#configuring-instance-ports).
(Bug #30405569)
* The AdminAPI ensures that all members of a cluster have
the same consistency level as configured at cluster
creation time. However, when high and non-default
consistency levels were chosen for the cluster, adding
instances to it resulted in an error 3796 which indicates
that group_replication_consistency cannot be used on the
target instance. This happened because the consistency
values of BEFORE, AFTER and BEFORE_AND_AFTER cannot be
used on instances that are RECOVERING and several
transactions happen while the instance is in the
RECOVERING phase. Other AdminAPI commands result in the
same error for the same scenario (high global consistency
levels) whenever at least one member of the cluster is
RECOVERING. For example, dba.getCluster(). The fix
ensures that all sessions used by the AdminAPI use the
consistency level of EVENTUAL when the cluster’s
consistency level is BEFORE, AFTER or BEFORE_AND_AFTER.
(Bug #30394258, Bug #30401048)
* Some privileges required for persisting configuration
changes on MySQL 8.0 servers were missing for the
clusterAdmin users created by AdminAPI. In particular, an
Access Denied error was being issued indicating the
SYSTEM_VARIABLES_ADMIN and PERSIST_RO_VARIABLES_ADMIN
privileges were required. Now these privileges are added
for the clusterAdmin user on MySQL 8.0 servers. (Bug
#30339460)
* When using MySQL Clone as the recovery method, trying to
add an instance that did not support RESTART to a cluster
caused MySQL Shell to stop unexpectedly. Now, in such a
situation a message explains that Cluster.rescan() must
be used to ensure the instance is added to the metadata.
(Bug #30281908)
* The autocommit and sql_mode system variables are session
settings, but they can be set globally to different
values. AdminAPI was failing if these variables had
non-default values in several different ways, for example
DML was failing, system variables could not be set and so
on. (Bug #30202883, Bug #30324461)
* Attempting to bootstrap MySQL Router against an InnoDB
cluster which had had the cluster administration user
modified or removed was failing. This was caused by the
privileges granted on the InnoDB cluster metadata table.
The recommended solution is to upgrade to metadata 2.0,
which changes the privileges on the metadata to ensure
this issue does not occur. (Bug #29868432)
* When you created a multi-primary cluster, the
group_replication_enforce_update_everywhere_checks system
variable was not being set automatically. However,
switching to multi-primary mode automatically enables
group_replication_enforce_update_everywhere_checks and
switching to single-primary disables it. Now, the
dba.createCluster() operation sets the
group_replication_enforce_update_everywhere_checks
variable as appropriate for single-primary or
multi-primary clusters. (Bug #29794779)
* In version 8.0.16, the autoRejoinTries option was added
to define the number of times an instance attempts to
rejoin the cluster after being expelled. The option is a
valid cluster setting, configurable through the AdminAPI
like many other options. However, the autoRejoinTries
option was not being listed by Cluster.options(). (Bug
#29654346)
* The InnoDB cluster metadata now supports host names up to
265 characters long, where 255 characters can be the host
part and the remaining characters can be the port number.
(Bug #29507913)
* dba.createCluster() could fail if the instance had been
started with innodb_default_row_format=COMPACT or
innodb_default_row_format=REDUNDANT. This was because no
ROW_FORMAT was specified on the InnoDB cluster metadata
tables, which caused them to use the one defined in
innodb_default_row_format. The metadata schema has been
updated to use ROW_FORMAT = DYNAMIC. (Bug #28531271)
* When an instance restarted, for example after a complete
outage, it could have super_read_only disabled. This
meant that instances which were not the primary could be
written to, resulting in the instances no longer being in
synchrony. This could result in
dba.rebootClusterFromCompleteOutage() failing with a
Conflicting transaction sets error. The fix ensures that
all instances have super_read_only=1 persisted while they
belong to the cluster, either through SET PERSIST_ONLY,
or through dba.configureLocalInstance() for instances
which do not support persisting. (Bug #97279, Bug
#30545872)
* The Cluster.status() operation could report an error
get_uint(24): field value out of the allowed range
because it was always expecting a positive value for some
fields that could in fact have negative values. For
example, this could happen when the clocks of different
instances were offset. (Bug #95191, Bug #29705983)
* If you changed the name of the clusterAdmin user once a
cluster had been created, you could encounter an error
such as The user specified as a definer does not exist.
This was because the clusterAdmin user was used as the
DEFINER of the views required by InnoDB cluster, and if
this user is renamed then the definer is in effect
missing. In version 8.0.19 the InnoDB cluster metadata
has been changed to avoid this problem, use
dba.upgradeMetadata() to upgrade the cluster. Clusters
deployed with 8.0.19 and later do not suffer from this
issue. (Bug #92128, Bug #28541069)
* It was not possible to create a multi-primary cluster due
to to cascading constraints on the InnoDB cluster
metadata tables. This has been fixed in version 8.0.19
and so to solve this issue upgrade your cluster using
dba.upgradeMetadata(). (Bug #91972, Bug #29137199)
Functionality Added or Changed
* The JavaScript function require() has been improved in
MySQL Shell to support loading of local modules, in
addition to built-in modules and modules that are on
module search paths already known to MySQL Shell. If you
specify the module name or path prefixed with ./ or ../,
MySQL Shell now searches for the specified module in the
folder that contains the JavaScript file or module
currently being executed, or in interactive mode,
searches in the current working directory. If the module
is not found in that folder, MySQL Shell proceeds to
check the well-known module search paths specified by the
sys.path variable.
* MySQL Shell’s upgrade checker utility (the
util.checkForServerUpgrade() operation) includes the
following new and extended checks:
+ The utility now flags all date, datetime, and
timestamp columns that have a default value of zero,
and states if the SQL mode (either global or for the
current session) allows the insertion of zero values
for these column types. By default, these are no
longer permitted in MySQL, and it is strongly
advised to replace zero values with valid ones, as
they might not work correctly in the future.
+ The check for usage of removed functions now
includes the PASSWORD() function.
+ The utility now checks for any orphaned tables which
are recognized by InnoDB, but the SQL layer thinks
they are handled by a different storage engine. This
situation can happen if manual updates are made in
the data directory. Orphaned tables can stall the
upgrade process if they are present.
* In MySQL Shell’s interactive mode, for JavaScript,
Python, or SQL, the \source command or its alias \. can
be used to execute code from a script file at a given
path. For compatibility with the mysql client, in SQL
mode only, you can now execute code from a script file
using the source command with no backslash and an
optional SQL delimiter. source can be used both in MySQL
Shell’s interactive mode for SQL, to execute a script
directly, and in a file of SQL code processed in batch
mode, to execute a further script from within the file.
In SQL mode only, you can also now use the \source
command’s alias \. (which does not use a SQL delimiter)
in a file of SQL code processed in batch mode. So with
MySQL Shell in SQL mode, you could now execute the script
in the /tmp/mydata.sql file from either interactive mode
or batch mode using any of these three commands:
source /tmp/mydata.sql;
source /tmp/mydata.sql
\. /tmp/mydata.sql
The command \source /tmp/mydata.sql is also valid, but in
interactive mode only.
Bugs Fixed
* When searching for startup scripts in the platform’s
standard global configuration path (in the folder
%PROGRAMDATA%\MySQL\mysqlsh on Windows, or
/etc/mysql/mysqlsh/ on Unix), MySQL Shell checked for the
incorrect script name shellrc, rather than the correct
name mysqlshrc. (Bug #30656548)
* On Windows, MySQL Shell passed UTF-8 encoded strings to
the NTFS file system, which stores file names in UTF-16
encoding. The mismatch caused files and folders to be
incorrectly named or located when non-ASCII characters
were used. MySQL Shell now converts all strings used in
operations on NTFS from UTF-8 to UTF-16, and converts
back to UTF-8 all strings received from Unicode function
versions of Windows API calls. (Bug #30538516)
* Some host names were not parsed correctly in the
connection data provided when running MySQL Shell’s
upgrade checker utility checkForServerUpgrade(). (Bug
#30536355)
* If the MySQL Server environment variable MYSQL_UNIX_PORT
(which specifies the default Unix socket file) was
updated by the same process that was then used to create
a MySQL Shell connection to a MySQL server using a socket
file, MySQL Shell cached and connected using the socket
file path that had previously been set, but reported that
a connection had been made using the updated socket file
path. The correct socket file used for the connection is
now displayed. (Bug #30533318)
* If a prompt theme file used to customize the MySQL Shell
prompt contained an ill-formed UTF-8 sequence, on startup
an error message was displayed in place of the prompt
text. MySQL Shell now validates the prompt theme file
before loading it, and if there is a problem, uses a
default prompt instead and issues an error message. (Bug
#30406283)
* If MySQL Shell was installed on Microsoft Windows at a
non-default location, and subsequently uninstalled, files
created after installation by the Python library used by
MySQL Shell were not removed. These files are now removed
when MySQL Shell is uninstalled from any location. (Bug
#30333801)
* Previously, most MySQL Shell options that expected an
integer value could be set with an empty value, in which
case the value 1 was applied. The exception was the
logLevel option, which required a value. The behavior has
now been standardized so all MySQL Shell options that
expect a non-string value must be specified with a value,
with the exception of options set on the command line.
The affected options are dba.gtidWaitTimeout, dba.logSql,
history.maxSize, and verbose. (Bug #30320839)
* When using MySQL Shell in interactive mode, using a
template literal in a multiple-line JavaScript statement
resulted in an error. The issue has now been fixed. (Bug
#30248651)
* In Python mode, when multiple statements were input to
MySQL Shell at the same time for execution in interactive
mode, only the first statement was executed correctly.
(Bug #30029568)
* The Debian control file for MySQL Shell has been
corrected to remove packaging errors that occurred when
certain variables were not defined. Thanks to Evgeniy
Patlan for the fix. (Bug #29802600, Bug #95158)
* In MySQL Shell’s parser for URI-like connection strings,
handling of path separators was previously platform
dependent. Unified parsing has now been introduced so
that Windows named pipes can be parsed correctly on Unix
platforms, and Unix socket files can be parsed correctly
on Windows platforms. (Bug #29456981)
* MySQL Shell now looks up host names by obtaining the
fully qualified domain name of the provided address and
using the absolute form of this name (with a trailing
dot). This method avoids potential issues caused by some
network configurations that resolve host names as
loopback addresses when they are actually addressable
externally. (Bug #27704559)
On Behalf of Oracle/MySQL Release Engineering Team,
Hery Ramilison
[Less]
|
Posted
over 4 years
ago
by
Jocelyn Ramilison
Dear MySQL users,
MySQL Shell 8.0.19 is a maintenance release of MySQL Shell 8.0 Series (a
component of the MySQL Server). The MySQL Shell is provided under
Oracle's dual-license.
MySQL Shell 8.0 is highly recommended for use with MySQL Server
... [More]
8.0 and
5.7. Please upgrade to MySQL Shell 8.0.19.
MySQL Shell is an interactive JavaScript, Python and SQL console
interface, supporting development and administration for the MySQL
Server. It provides APIs implemented in JavaScript and Python that
enable you to work with MySQL InnoDB cluster and use MySQL as a document
store.
The AdminAPI enables you to work with MySQL InnoDB cluster, providing an
integrated solution for high availability and scalability using InnoDB
based MySQL databases, without requiring advanced MySQL expertise. For
more information about how to configure and work with MySQL InnoDB
cluster see
https://dev.mysql.com/doc/refman/en/mysql-innodb-cluster-userguide.html
The X DevAPI enables you to create "schema-less" JSON document
collections and perform Create, Update, Read, Delete (CRUD) operations
on those collections from your favorite scripting language. For more
information about how to use MySQL Shell and the MySQL Document Store
support see
https://dev.mysql.com/doc/refman/en/document-store.html
For more information about the X DevAPI see
https://dev.mysql.com/doc/x-devapi-userguide/en/
If you want to write applications that use the the CRUD based X DevAPI
you can also use the latest MySQL Connectors for your language of
choice. For more information about Connectors see
https://dev.mysql.com/doc/index-connectors.html
For more information on the APIs provided with MySQL Shell see
https://dev.mysql.com/doc/dev/mysqlsh-api-javascript/8.0/
and
https://dev.mysql.com/doc/dev/mysqlsh-api-python/8.0/
Using MySQL Shell's SQL mode you can communicate with servers using the
legacy MySQL protocol. Additionally, MySQL Shell provides partial
compatibility with the mysql client by supporting many of the same
command line options.
For full documentation on MySQL Server, MySQL Shell and related topics,
see
https://dev.mysql.com/doc/mysql-shell/8.0/en/
For more information about how to download MySQL Shell 8.0.19, see the
"General Availability (GA) Releases" tab at
http://dev.mysql.com/downloads/shell/
We welcome and appreciate your feedback and bug reports, see
http://bugs.mysql.com/
Enjoy and thanks for the support!
Changes in MySQL Shell 8.0.19 (2020-01-13, General Availability)
InnoDB Cluster Added or Changed Functionality
* Incompatible Change: The AdminAPI now includes InnoDB
ReplicaSets, that enables you to administer asynchronous
replication set ups in a similar way to InnoDB cluster.
The addition of InnoDB ReplicaSet means that the InnoDB
cluster metadata schema has been upgraded to version 2.0.
Regardless of whether you plan to use InnoDB ReplicaSet
or not, to use MySQL Shell 8.0.19 and AdminAPI you must
upgrade the metadata of your clusters. Connect MySQL
Shell's global session to your cluster and use the new
dba.upgradeMetadata() operation to upgrade the cluster's
metadata to use the new metadata.
Warning
Without upgrading the metadata you cannot use MySQL Shell
8.0.19 to change the configuration of a cluster created
with earlier versions. You can only read the
configuration of the cluster, for example using
Cluster.status().
The dba.upgradeMetadata() operation upgrades any
automatically created MySQL Router users to have the
correct privileges. Manually created MySQL Router users
with a name not starting with mysql_router_ are not
automatically upgraded. This is an important step in
upgrading your cluster, only then can the MySQL Router
application be upgraded.
Warning
A cluster which is using the new metadata cannot be
administered by earlier MySQL Shell versions, for example
once you upgrade to version 8.0.19 you can no longer use
version 8.0.18 or earlier to administer the cluster.
To get information on which of the MySQL Router instances
registered with a cluster require the metadata upgrade,
issue
cluster.listRouters({'onlyUpgradeRequired':'true'}).
* AdminAPI now supports socket connections to be used for
cluster and replica set operations. (Bug #26265826)
* You can now get information about the MySQL Router
instances registered with a InnoDB cluster, and
unregister a Router from a cluster, for example when you
stop using it. The list of Routers registered with a
cluster contains information about whether the Router
instance is compatible with the version of MySQL on the
cluster instances, which guides you when upgrading a
cluster. Use the Cluster.listRouters() operation to show
a list of all Routers registered with the cluster. The
returned JSON object provides information such as the
hostname, ports, and if an upgrade is required. To filter
the list to only show Router instances that do not
support the latest metadata version use the
onlyUpgradeRequired option, for example by issuing
Cluster.listRouters({'onlyUpgradeRequired':'true'}). To
remove a registered Router from a cluster, use the
Cluster.removeRouterMetadata(router) operation.
* The AdminAPI includes support for InnoDB ReplicaSet, that
enables you to administer asynchronous replication sets
in a similar way to InnoDB cluster. InnoDB ReplicaSet
enables you to deploy an asynchronous replication set
consisting of a single primary and multiple secondaries
(traditionally referred to as the MySQL replication
master and slaves). You administer a ReplicaSet using
AdminAPI operations, for example to check the status of
the InnoDB ReplicaSet, and manually failover to a new
primary in the event of a failure. Similar to InnoDB
cluster, MySQL Router supports bootstrapping against
InnoDB ReplicaSet, which means you can automatically
configure MySQL Router to use your InnoDB ReplicaSet
without having to manually configure files. This makes
InnoDB ReplicaSet a quick and easy way to get MySQL
replication and MySQL Router up and running, making it
well suited to scaling out reads, development
environments, and applications that do not require the
high availability offered by InnoDB cluster.
InnoDB Cluster Bugs Fixed
* The dba.configureLocalInstance() operation could fail
with a key not found (LogicError) error when executed on
a non-sandbox instance where it did not have access to
the my.cnf option file and the operation requested an
output configuration file to be specified. (Bug
#30657204)
* If a cluster had been deployed with MySQL Shell version
8.0.14 or earlier, the metadata contained an invalid port
number for X Protocol connections. The metadata upgrade
catches such ports and removes the invalid number. To
avoid problems with routing due to this incorrect port,
upgrade your cluster's metadata. (Bug #30618264)
* When a replication slave was configured to read from an
InnoDB cluster primary, even with the appropriate
replication filtering to ignore the metadata replication
was failing when an instance was added to the cluster
using MySQL Clone as the recovery method. This was
because the recovery process was granting a privilege on
an account, which failed and broke replication. (Bug
#30609075)
* The Cluster.removeInstance() operation was issuing a
misleading error message when the instance was
unreachable, indicating that it did not belong to the
cluster when an alternative valid host or IP was used.
Now, the error indicates that the instance is
unreachable. (Bug #30580393)
* Although MySQL Shell version 8.0.18 added support for
IPv6 in WL#12758
(https://dev.mysql.com/worklog/task/?id=12758), using an
InnoDB cluster which consisted of MySQL Shell version
8.0.18 and MySQL Router 8.0.18 with IPv6 addresses was
not possible. With the release of version 8.0.19 of both
MySQL Shell and MySQL Router, be aware that:
+ combining MySQL Shell version 8.0.18 with MySQL
Router 8.0.18 causes Router to fail, due to no IPv6
support. (BUG#30354273)
+ combining MySQL Shell version 8.0.18 with Router
8.0.19 in a cluster which uses X Protocol
connections, results in AdminAPI storing mysqlX IPv6
values incorrectly in the metadata, causing Router
to fail. (BUG#30548843) However, combining MySQL
Shell version 8.0.18 with Router 8.0.19 in a cluster
which uses MySQL classic protocol connections, is
possible.
Therefore, to use InnoDB cluster with IPv6 addresses,
regardless of the protocol used, the recommended
deployment is MySQL Shell 8.0.19 and MySQL Router 8.0.19.
(Bug #30548843)
References: See also: Bug #30354273.
* When using automatic rejoin, if a target instance was
rejoining the cluster, operations such as
dba.rebootClusterFromCompleteOutage(), Cluster.status(),
and so on were failing. Now, clusters consider automatic
rejoin as an instance state instead of a check that
always aborts the operation. This ensures that
Cluster.status() is reported even for instances which are
rejoining the cluster, and that
dba.rebootClusterFromCompleteOutage() can detect
instances which are rejoining the cluster and override
the rejoin operation so that the cluster can be properly
rebooted. (Bug #30501590)
* SSL client certificate options for the clusterAdmin user
were not being copied when setting up connection options,
which made them fail when connecting. (Bug #30494198)
* When the automatically calculated localAddress is not
valid, for example when it exceeds the valid range, the
error message has now been improved. See Configuring
Ports
(https://dev.mysql.com/doc/refman/8.0/en/mysql-innodb-cluster-production-deployment.html#configuring-instance-ports).
(Bug #30405569)
* The AdminAPI ensures that all members of a cluster have
the same consistency level as configured at cluster
creation time. However, when high and non-default
consistency levels were chosen for the cluster, adding
instances to it resulted in an error 3796 which indicates
that group_replication_consistency cannot be used on the
target instance. This happened because the consistency
values of BEFORE, AFTER and BEFORE_AND_AFTER cannot be
used on instances that are RECOVERING and several
transactions happen while the instance is in the
RECOVERING phase. Other AdminAPI commands result in the
same error for the same scenario (high global consistency
levels) whenever at least one member of the cluster is
RECOVERING. For example, dba.getCluster(). The fix
ensures that all sessions used by the AdminAPI use the
consistency level of EVENTUAL when the cluster's
consistency level is BEFORE, AFTER or BEFORE_AND_AFTER.
(Bug #30394258, Bug #30401048)
* Some privileges required for persisting configuration
changes on MySQL 8.0 servers were missing for the
clusterAdmin users created by AdminAPI. In particular, an
Access Denied error was being issued indicating the
SYSTEM_VARIABLES_ADMIN and PERSIST_RO_VARIABLES_ADMIN
privileges were required. Now these privileges are added
for the clusterAdmin user on MySQL 8.0 servers. (Bug
#30339460)
* When using MySQL Clone as the recovery method, trying to
add an instance that did not support RESTART to a cluster
caused MySQL Shell to stop unexpectedly. Now, in such a
situation a message explains that Cluster.rescan() must
be used to ensure the instance is added to the metadata.
(Bug #30281908)
* The autocommit and sql_mode system variables are session
settings, but they can be set globally to different
values. AdminAPI was failing if these variables had
non-default values in several different ways, for example
DML was failing, system variables could not be set and so
on. (Bug #30202883, Bug #30324461)
* Attempting to bootstrap MySQL Router against an InnoDB
cluster which had had the cluster administration user
modified or removed was failing. This was caused by the
privileges granted on the InnoDB cluster metadata table.
The recommended solution is to upgrade to metadata 2.0,
which changes the privileges on the metadata to ensure
this issue does not occur. (Bug #29868432)
* When you created a multi-primary cluster, the
group_replication_enforce_update_everywhere_checks system
variable was not being set automatically. However,
switching to multi-primary mode automatically enables
group_replication_enforce_update_everywhere_checks and
switching to single-primary disables it. Now, the
dba.createCluster() operation sets the
group_replication_enforce_update_everywhere_checks
variable as appropriate for single-primary or
multi-primary clusters. (Bug #29794779)
* In version 8.0.16, the autoRejoinTries option was added
to define the number of times an instance attempts to
rejoin the cluster after being expelled. The option is a
valid cluster setting, configurable through the AdminAPI
like many other options. However, the autoRejoinTries
option was not being listed by Cluster.options(). (Bug
#29654346)
* The InnoDB cluster metadata now supports host names up to
265 characters long, where 255 characters can be the host
part and the remaining characters can be the port number.
(Bug #29507913)
* dba.createCluster() could fail if the instance had been
started with innodb_default_row_format=COMPACT or
innodb_default_row_format=REDUNDANT. This was because no
ROW_FORMAT was specified on the InnoDB cluster metadata
tables, which caused them to use the one defined in
innodb_default_row_format. The metadata schema has been
updated to use ROW_FORMAT = DYNAMIC. (Bug #28531271)
* When an instance restarted, for example after a complete
outage, it could have super_read_only disabled. This
meant that instances which were not the primary could be
written to, resulting in the instances no longer being in
synchrony. This could result in
dba.rebootClusterFromCompleteOutage() failing with a
Conflicting transaction sets error. The fix ensures that
all instances have super_read_only=1 persisted while they
belong to the cluster, either through SET PERSIST_ONLY,
or through dba.configureLocalInstance() for instances
which do not support persisting. (Bug #97279, Bug
#30545872)
* The Cluster.status() operation could report an error
get_uint(24): field value out of the allowed range
because it was always expecting a positive value for some
fields that could in fact have negative values. For
example, this could happen when the clocks of different
instances were offset. (Bug #95191, Bug #29705983)
* If you changed the name of the clusterAdmin user once a
cluster had been created, you could encounter an error
such as The user specified as a definer does not exist.
This was because the clusterAdmin user was used as the
DEFINER of the views required by InnoDB cluster, and if
this user is renamed then the definer is in effect
missing. In version 8.0.19 the InnoDB cluster metadata
has been changed to avoid this problem, use
dba.upgradeMetadata() to upgrade the cluster. Clusters
deployed with 8.0.19 and later do not suffer from this
issue. (Bug #92128, Bug #28541069)
* It was not possible to create a multi-primary cluster due
to to cascading constraints on the InnoDB cluster
metadata tables. This has been fixed in version 8.0.19
and so to solve this issue upgrade your cluster using
dba.upgradeMetadata(). (Bug #91972, Bug #29137199)
Functionality Added or Changed
* The JavaScript function require() has been improved in
MySQL Shell to support loading of local modules, in
addition to built-in modules and modules that are on
module search paths already known to MySQL Shell. If you
specify the module name or path prefixed with ./ or ../,
MySQL Shell now searches for the specified module in the
folder that contains the JavaScript file or module
currently being executed, or in interactive mode,
searches in the current working directory. If the module
is not found in that folder, MySQL Shell proceeds to
check the well-known module search paths specified by the
sys.path variable.
* MySQL Shell's upgrade checker utility (the
util.checkForServerUpgrade() operation) includes the
following new and extended checks:
+ The utility now flags all date, datetime, and
timestamp columns that have a default value of zero,
and states if the SQL mode (either global or for the
current session) allows the insertion of zero values
for these column types. By default, these are no
longer permitted in MySQL, and it is strongly
advised to replace zero values with valid ones, as
they might not work correctly in the future.
+ The check for usage of removed functions now
includes the PASSWORD() function.
+ The utility now checks for any orphaned tables which
are recognized by InnoDB, but the SQL layer thinks
they are handled by a different storage engine. This
situation can happen if manual updates are made in
the data directory. Orphaned tables can stall the
upgrade process if they are present.
* In MySQL Shell's interactive mode, for JavaScript,
Python, or SQL, the \source command or its alias \. can
be used to execute code from a script file at a given
path. For compatibility with the mysql client, in SQL
mode only, you can now execute code from a script file
using the source command with no backslash and an
optional SQL delimiter. source can be used both in MySQL
Shell's interactive mode for SQL, to execute a script
directly, and in a file of SQL code processed in batch
mode, to execute a further script from within the file.
In SQL mode only, you can also now use the \source
command's alias \. (which does not use a SQL delimiter)
in a file of SQL code processed in batch mode. So with
MySQL Shell in SQL mode, you could now execute the script
in the /tmp/mydata.sql file from either interactive mode
or batch mode using any of these three commands:
source /tmp/mydata.sql;
source /tmp/mydata.sql
\. /tmp/mydata.sql
The command \source /tmp/mydata.sql is also valid, but in
interactive mode only.
Bugs Fixed
* When searching for startup scripts in the platform's
standard global configuration path (in the folder
%PROGRAMDATA%\MySQL\mysqlsh on Windows, or
/etc/mysql/mysqlsh/ on Unix), MySQL Shell checked for the
incorrect script name shellrc, rather than the correct
name mysqlshrc. (Bug #30656548)
* On Windows, MySQL Shell passed UTF-8 encoded strings to
the NTFS file system, which stores file names in UTF-16
encoding. The mismatch caused files and folders to be
incorrectly named or located when non-ASCII characters
were used. MySQL Shell now converts all strings used in
operations on NTFS from UTF-8 to UTF-16, and converts
back to UTF-8 all strings received from Unicode function
versions of Windows API calls. (Bug #30538516)
* Some host names were not parsed correctly in the
connection data provided when running MySQL Shell's
upgrade checker utility checkForServerUpgrade(). (Bug
#30536355)
* If the MySQL Server environment variable MYSQL_UNIX_PORT
(which specifies the default Unix socket file) was
updated by the same process that was then used to create
a MySQL Shell connection to a MySQL server using a socket
file, MySQL Shell cached and connected using the socket
file path that had previously been set, but reported that
a connection had been made using the updated socket file
path. The correct socket file used for the connection is
now displayed. (Bug #30533318)
* If a prompt theme file used to customize the MySQL Shell
prompt contained an ill-formed UTF-8 sequence, on startup
an error message was displayed in place of the prompt
text. MySQL Shell now validates the prompt theme file
before loading it, and if there is a problem, uses a
default prompt instead and issues an error message. (Bug
#30406283)
* If MySQL Shell was installed on Microsoft Windows at a
non-default location, and subsequently uninstalled, files
created after installation by the Python library used by
MySQL Shell were not removed. These files are now removed
when MySQL Shell is uninstalled from any location. (Bug
#30333801)
* Previously, most MySQL Shell options that expected an
integer value could be set with an empty value, in which
case the value 1 was applied. The exception was the
logLevel option, which required a value. The behavior has
now been standardized so all MySQL Shell options that
expect a non-string value must be specified with a value,
with the exception of options set on the command line.
The affected options are dba.gtidWaitTimeout, dba.logSql,
history.maxSize, and verbose. (Bug #30320839)
* When using MySQL Shell in interactive mode, using a
template literal in a multiple-line JavaScript statement
resulted in an error. The issue has now been fixed. (Bug
#30248651)
* In Python mode, when multiple statements were input to
MySQL Shell at the same time for execution in interactive
mode, only the first statement was executed correctly.
(Bug #30029568)
* The Debian control file for MySQL Shell has been
corrected to remove packaging errors that occurred when
certain variables were not defined. Thanks to Evgeniy
Patlan for the fix. (Bug #29802600, Bug #95158)
* In MySQL Shell's parser for URI-like connection strings,
handling of path separators was previously platform
dependent. Unified parsing has now been introduced so
that Windows named pipes can be parsed correctly on Unix
platforms, and Unix socket files can be parsed correctly
on Windows platforms. (Bug #29456981)
* MySQL Shell now looks up host names by obtaining the
fully qualified domain name of the provided address and
using the absolute form of this name (with a trailing
dot). This method avoids potential issues caused by some
network configurations that resolve host names as
loopback addresses when they are actually addressable
externally. (Bug #27704559)
On Behalf of Oracle/MySQL Release Engineering Team,
Hery Ramilison
[Less]
|
Posted
over 4 years
ago
by
Jocelyn Ramilison
Dear MySQL Users,
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 &
... [More]
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)
MySQL Cluster 8.0.19 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.
MySQL Cluster 8.0 is also available from our repository for Linux
platforms, go here for details:
https://dev.mysql.com/downloads/
The release notes are available from
http://dev.mysql.com/doc/relnotes/mysql-cluster/8.0/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 NDB Cluster 8.0.19 (2020-01-13, General Availability)
MySQL NDB Cluster 8.0.19 is a new release of NDB
8.0, based on MySQL Server 8.0 and including features in
version 8.0 of the NDB storage engine, as well as fixing
recently discovered bugs in previous NDB Cluster releases.
Obtaining NDB Cluster 8.0. NDB Cluster 8.0 source code and
binaries can be obtained from
https://dev.mysql.com/downloads/cluster/.
For an overview of changes made in NDB Cluster 8.0, see What
is New in NDB Cluster
(https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-what-is-new.html).
This release also incorporates all bug fixes and changes made
in previous NDB Cluster releases, as well as all bug fixes
and feature changes which were added in mainline MySQL 8.0
through MySQL 8.0.19 (see Changes in MySQL 8.0.19
(2020-01-13, General Availability)
(https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html)).
Functionality Added or Changed
* Important Change: The default value for the
ndb_autoincrement_prefetch_sz server system variable has
been increased to 512. (Bug #30316314)
* Important Change: NDB now supports more than 2 replicas
(up to a maximum of 4). Setting NoOfReplicas=3 or
NoOfReplicas=4 is now fully covered in our internal
testing and thus supported for use in production. (Bug
#97479, Bug #97579, Bug #25261716, Bug #30501414, Bug
#30528105)
* Important Change: Added the TransactionMemory data node
configuration parameter which simplifies configuration of
data node memory allocation for transaction operations.
This part of ongoing work on pooling of transactional and
Local Data Manager (LDM) memory.
This new parameter is intended to supersede several older
transactional memory parameters which have been
deprecated (and which are thus subject to removal in a
future release of NDB Cluster). In particular, the
following parameters are incompatible with
TransactionMemory and cannot be set in the config.ini
configuration file if this parameter has been set:
+ MaxNoOfConcurrentIndexOperations
+ MaxNoOfFiredTriggers
+ MaxNoOfLocalOperations
+ MaxNoOfLocalScans
If you attempt to set any of these incompatible
parameters concurrently with TransactionMemory, the
cluster management server cannot start.
For more information, see the description of the
TransactionMemory parameter and Parameters incompatible
with TransactionMemory
(https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-ndbd-definition.html#mysql-cluster-transactionmemory-incompatible).
See also Data Node Memory Management
(https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-data-node-memory-management.html),
for information about how memory resources are allocated
by NDB Cluster data nodes. (Bug #96995, Bug #30344471)
* Important Change: The maximum or default values for
several NDB Cluster data node configuration parameters
have been changed in this release. These changes are
listed here:
+ The maximum value for DataMemory is increased from 1
terabyte to 16 TB.
+ The maximum value for DiskPageBufferMemory is also
increased from 1 TB to 16 TB.
+ The default value for StringMemory is decreased to 5
percent. Previously, this was 25 percent.
+ The default value for LcpScanProgressTimeout is
increased from 60 seconds to 180 seconds.
* Performance: Read from any replica, which greatly
improves the performance of table reads at a very low
cost to table write performance, is now enabled by
default for all NDB tables. This means both that the
default value for the ndb_read_backup system variable is
now ON, and that the value of the NDB_TABLE comment
option READ_BACKUP is 1 when creating a new NDB table.
(Previously, the default values were OFF and 0,
respectively.)
For more information, see Setting NDB_TABLE Options
(https://dev.mysql.com/doc/refman/8.0/en/create-table-ndb-table-comment-options.html),
as well as the description
of the ndb_read_backup system variable.
* NDB Disk Data: The latency of checkpoints for Disk Data
files has been reduced when using non-volatile memory
devices such as solid-state drives (especially those
using NVMe for data transfer), separate physical drives
for Disk Data files, or both. As part of this work, two
new data node configuration parameters, listed here, have
been introduced:
+ MaxDiskDataLatency sets a maximum on allowed latency
for disk access, aborting transactions exceeding
this amount of time to complete
+ DiskDataUsingSameDisk makes it possible to take
advantage of keeping Disk Data files on separate
disks by increasing the rate at which Disk Data
checkpoints can be made
This release also adds three new tables to the ndbinfo
database. These tables, listed here, can assist with
performance monitoring of Disk Data checkpointing:
+ diskstat provides information about Disk Data
tablespace reads, writes, and page requests during
the previous 1 second
+ diskstats_1sec provides information similar to that
given by the diskstat table, but does so for each of
the last 20 seconds
+ pgman_time_track_stats table reports on the latency
of disk operations affecting Disk Data tablespaces
For additional information, see Disk Data latency
parameters
(https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-ndbd-definition.html#mysql-cluster-ndbd-definition-disk-data-latency-parameters).
* Added the ndb_metadata_sync server system variable, which
simplifies knowing when metadata synchronization has
completed successfully. Setting this variable to true
triggers immediate synchronization of all changes between
the NDB dictionary and the MySQL data dictionary without
regard to any values set for ndb_metadata_check or
ndb_metadata_check_interval. When synchronization has
completed, its value is automatically reset to false.
(Bug #30406657)
* A stack trace is now written to the data node log on
abnormal termination of a data node.
* Automatic synchronization of metadata from the MySQL data
dictionary to NDB now includes databases containing NDB
tables. With this enhancement, if a table exists in NDB,
and the table and the database it belongs to do not exist
on a given SQL node, it is no longer necessary to create
the database manually. Instead, the database, along with
all NDB tables belonging to this database, should be
created on the SQL node automatically.
Bugs Fixed
* Incompatible Change: ndb_restore no longer restores
shared users and grants to the mysql.ndb_sql_metadata
table by default. A new command-line option
--include-stored-grants is added to override this
behavior and enable restoring of shared user and grant
data and metadata.
As part of this fix, ndb_restore can now also correctly
handle an ordered index on a system table. (Bug
#30237657)
References: See also: Bug #29534239, Bug #30459246.
* Incompatible Change: The minimum value for the
RedoOverCommitCounter data node configuration parameter
has been increased from 0 to 1. The minimum value for the
RedoOverCommitLimit data node configuration parameter has
also been increased from 0 to 1.
You should check the cluster global configuration file
and make any necessary adjustments to values set for
these parameters before upgrading. (Bug #29752703)
* macOS: On MacOS, SQL nodes sometimes shut down
unexpectedly during the binary log setup phase when
starting the cluster. This occurred when there existed
schemas whose names used uppercase letters and
lower_case_table_names was set to 2. This caused
acquisition of metadata locks to be attempted using keys
having the incorrect lettercase, and, subsequently, these
locks to fail. (Bug #30192373)
* Microsoft Windows; NDB Disk Data: On Windows, restarting
a data node other than the master when using Disk Data
tables led to a failure in TSMAN. (Bug #97436, Bug
#30484272)
* Solaris: When debugging, ndbmtd consumed all available
swap space on Solaris 11.4 SRU 12 and later. (Bug
#30446577)
* Solaris: The byte order used for numeric values stored in
the mysql.ndb_sql_metadata table was incorrect on
Solaris/Sparc. This could be seen when using
ndb_select_all or ndb_restore --print. (Bug #30265016)
* NDB Disk Data: After dropping a disk data table on one
SQL node, trying to execute a query against
INFORMATION_SCHEMA.FILES on a different SQL node stalled
at Waiting for tablespace metadata lock. (Bug #30152258)
References: See also: Bug #29871406.
* NDB Disk Data: ALTER TABLESPACE ... ADD DATAFILE could
sometimes hang while trying to acquire a metadata lock.
(Bug #29871406)
* The fix made in NDB 8.0.18 for an issue in which a
transaction was committed prematurely aborted the
transaction if the table definition had changed midway,
but failed in testing to free memory allocated by
getExtraMetadata(). Now this memory is properly freed
before aborting the transaction. (Bug #30576983)
References: This issue is a regression of: Bug #29911440.
* Excessive allocation of attribute buffer when
initializing data in DBTC led to preallocation of api
connection records failing due to unexpectedly running
out of memory. (Bug #30570264)
* Improved error handling in the case where NDB attempted
to update a local user having the NDB_STORED_USER
privilege but which could not be found in the
ndb_sql_metadata table. (Bug #30556487)
* Failure of a transaction during execution of an ALTER
TABLE ... ALGORITHM=COPY statement following the rename
of the new table to the name of the original table but
before dropping the original table caused mysqld to exit
prematurely. (Bug #30548209)
* Non-MSI builds on Windows using -DWITH_NDBCLUSTER did not
succeed unless the WiX toolkit was installed. (Bug
#30536837)
* The allowed_values output from ndb_config --xml
--configinfo for the Arbitration data node configuration
parameter in NDB 8.0.18 was not consistent with that
obtained in previous releases. (Bug #30529220)
References: See also: Bug #30505003.
* A faulty ndbrequire() introduced when implementing
partial local checkpoints assumed that m_participatingLQH
must be clear when receiving START_LCP_REQ, which is not
necessarily true when a failure happens for the master
after sending START_LCP_REQ and before handling any
START_LCP_CONF signals. (Bug #30523457)
* A local checkpoint sometimes hung when the master node
failed while sending an LCP_COMPLETE_REP signal and it
was sent to some nodes, but not all of them. (Bug
#30520818)
* Added the DUMP 9988 and DUMP 9989 commands. (Bug
#30520103)
* The management server did not handle all cases of
NODE_FAILREP correctly. (Bug #30520066)
* With SharedGlobalMemory set to 0, some resources did not
meet required minimums. (Bug #30411835)
* Execution of ndb_restore --rebuild-indexes together with
the --rewrite-database and --exclude-missing-tables
options did not create indexes for any tables in the
target database. (Bug #30411122)
* When writing the schema operation into the ndb_schema
table failed, the states in the NDB_SCHEMA object were
not cleared, which led to the SQL node shutting down when
it tried to free the object. (Bug #30402362)
References: See also: Bug #30371590.
* If a transaction was aborted while getting a page from
the disk page buffer and the disk system was overloaded,
the transaction hung indefinitely. This could also cause
restarts to hang and node failure handling to fail. (Bug
#30397083, Bug #30360681)
References: See also: Bug #30152258.
* When synchronizing extent pages it was possible for the
current local checkpoint (LCP) to stall indefinitely if a
CONTINUEB signal for handling the LCP was still
outstanding when receiving the FSWRITECONF signal for the
last page written in the extent synchronization page. The
LCP could also be restarted if another page was written
from the data pages. It was also possible that this issue
caused PREP_LCP pages to be written at times when they
should not have been. (Bug #30397083)
* Data node failures with the error Another node failed
during system restart... occurred during a partial
restart. (Bug #30368622)
* Automatic synchronization could potentially trigger an
increase in the number of locks being taken on a
particular metadata object at a given time, such as when
a synchronization attempt coincided with a DDL or DML
statement involving the same metadata object; competing
locks could lead to the NDB deadlock detection logic
penalizing the user action rather than the background
synchronization. We fix this by changing all exclusive
metadata lock acquisition attempts during
auto-synchronization so that they use a timeout of 0
(rather than the 10 seconds previously allowed), which
avoids deadlock detection and gives priority to the user
action. (Bug #30358470)
* If a SYNC_EXTENT_PAGES_REQ signal was received by PGMAN
while dropping a log file group as part of a partial
local checkpoint, and thus dropping the page locked by
this block for processing next, the LCP terminated due to
trying to access the page after it had already been
dropped. (Bug #30305315)
* The wrong number of bytes was reported in the cluster log
for a completed local checkpoint. (Bug #30274618)
References: See also: Bug #29942998.
* Added the new ndb_mgm client debugging commands DUMP 2356
and DUMP 2357. (Bug #30265415)
* Executing ndb_drop_table using the --help option caused
this program to terminate prematurely, and without
producing any help output. (Bug #30259264)
* A mysqld trying to connect to the cluster, and thus
trying to acquire the global schema lock (GSL) during
setup, ignored the setting for ndb_wait_setup and hung
indefinitely when the GSL had already been acquired by
another mysqld, such as when it was executing an ALTER
TABLE statement. (Bug #30242141)
* When a table containing self-referential foreign key (in
other words, a foreign key referencing another column of
the same table) was altered using the COPY algorithm, the
foreign key definition was removed. (Bug #30233405)
* In MySQL 8.0, names of foreign keys explicitly provided
by user are generated automatically in the SQL layer and
stored in the data dictionary. Such names are of the form
[table_name]_ibfk_[#] which align with the names
generated by the InnoDB storage engine in MySQL 5.7. NDB
8.0.18 introduced a change in behavior by NDB such that
it also uses the generated names, but in some cases, such
as when tables were renamed, NDB still generated and used
its own format for such names internally rather than
those generated by the SQL layer and stored in the data
dictionary, which led to the following issues:
+ Discrepancies in SHOW CREATE TABLE output and the
contents of I_S.REFENTIAL_CONSTRAINTS
+ Improper metadata locking for foreign keys
+ Confusing names for foreign keys in error messages
Now NDB also renames the foreign keys in such cases,
using the names provided by the MySQL server, to align
fully with those used by InnoDB. (Bug #30210839)
References: See also: Bug #96508, Bug #30171959.
* When a table referenced by a foreign key was renamed,
participating SQL nodes did not properly update the
foreign key definitions for the referencing table in
their data dictionaries during schema distribution. (Bug
#30191068)
* Data node handling of failures of other data nodes could
sometimes not be synchronized properly, such that two or
more data nodes could see different nodes as the master
node. (Bug #30188414)
* Some scan operations failed due to the presence of an old
assert in DbtupBuffer.cpp that checked whether API nodes
were using a version of the software previous to NDB 6.4.
This was no longer necessary or correct, and has been
removed. (Bug #30188411)
* When executing a global schema lock (GSL), NDB used a
single Ndb_table_guard object for successive retires when
attempting to obtain a table object reference; it was not
possible for this to succeed after failing on the first
attempt, since Ndb_table_guard assumes that the
underlying object pointer is determined once only---at
initialisation---with the previously retrieved pointer
being returned from a cached reference thereafter.
This resulted in infinite waits to obtain the GSL,
causing the binlog injector thread to hang so that mysqld
considered all NDB tables to be read-only. To avoid this
problem, NDB now uses a fresh instance of Ndb_table_guard
for each such retry. (Bug #30120858)
References: This issue is a regression of: Bug #30086352.
* When upgrading an SQL node to NDB 8.0 from a previous
release series, the .frm file whose contents are read and
then installed in the data dictionary does not contain
any information about foreign keys. This meant that
foreign key information was not installed in the SQL
node's data dictionary. This is fixed by using the
foreign key information available in the NDB data
dictionary to update the local MySQL data dictionary
during table metadata upgrade. (Bug #30071043)
* Restoring tables with the --disable-indexes option
resulted in the wrong table definition being installed in
the MySQL data dictionary. This is because the serialized
dictionary information (SDI) packed into the NDB
dictionary's table definition is used to create the table
object; the SDI definition is updated only when the DDL
change is done through the MySQL server. Installation of
the wrong table definition meant that the table could not
be opened until the indexes were re-created in the NDB
dictionary again using --rebuild-indexes.
This is fixed by extending auto-synchronization such that
it compares the SDI to the NDB dictionary table
information and fails in cases in which the column
definitions do not match. Mismatches involving indexes
only are treated as temporary errors, with the table in
question being detected again during the next round of
change detection. (Bug #30000202, Bug #30414514)
* Restoring tables for which MAX_ROWS was used to alter
partitioning from a backup made from NDB 7.4 to a cluster
running NDB 7.6 did not work correctly. This is fixed by
ensuring that the upgrade code handling PartitionBalance
supplies a valid table specification to the NDB
dictionary. (Bug #29955656)
* The number of data bytes for the summary event written in
the cluster log when a backup completed was truncated to
32 bits, so that there was a significant mismatch between
the number of log records and the number of data records
printed in the log for this event. (Bug #29942998)
* mysqld sometimes aborted during a long ALTER TABLE
operation that timed out. (Bug #29894768)
References: See also: Bug #29192097.
* When an SQL node connected to NDB, it did not know
whether it had previously connected to that cluster, and
thus could not determine whether its data dictionary
information was merely out of date, or completely
invalid. This issue is solved by implementing a unique
schema version identifier (schema UUID) to the ndb_schema
table in NDB as well as to the ndb_schema table object in
the data dictionary. Now, whenever a mysqld connects to a
cluster as an SQL node, it can compare the schema UUID
stored in its data dictionary against that which is
stored in the ndb_schema table, and so know whether it is
connecting for the first time. If so, the SQL node
removes any entries that may be in its data dictionary.
(Bug #29894166)
References: See also: Bug #27543602.
* Improved log messages generated by table discovery and
table metadata upgrades. (Bug #29894127)
* Using 2 LDM threads on a 2-node cluster with 10 threads
per node could result in a partition imbalance, such that
one of the LDM threads on each node was the primary for
zero fragments. Trying to restore a multi-threaded backup
from this cluster failed because the datafile for one LDM
contained only the 12-byte data file header, which
ndb_restore was unable to read. The same problem could
occur in other cases, such as when taking a backup
immediately after adding an empty node online.
It was found that this occurred when ODirect was enabled
for an EOF backup data file write whose size was less
than 512 bytes and the backup was in the STOPPING state.
This normally occurs only for an aborted backup, but
could also happen for a successful backup for which an
LDM had no fragments. We fix the issue by introducing an
additional check to ensure that writes are skipped only
if the backup actually contains an error which should
cause it to abort. (Bug #29892660)
References: See also: Bug #30371389.
* For NDB tables, ALTER TABLE ... ALTER INDEX did not work
with ALGORITHM=INPLACE. (Bug #29700197)
* ndb_restore failed in testing on 32-bit platforms. This
issue is fixed by increasing the size of the thread stack
used by this tool from 64 KB to 128 KB. (Bug #29699887)
References: See also: Bug #30406046.
* An unplanned shutdown of the cluster occurred due to an
error in DBTUP while deleting rows from a table following
an online upgrade. (Bug #29616383)
* In some cases the SignalSender class, used as part of the
implementation of ndb_mgmd and ndbinfo, buffered
excessive numbers of unneeded SUB_GCP_COMPLETE_REP and
API_REGCONF signals, leading to unnecessary consumption
of memory. (Bug #29520353)
References: See also: Bug #20075747, Bug #29474136.
* The setting for the BackupLogBufferSize configuration
parameter was not honored. (Bug #29415012)
* When mysqld was run with the --upgrade=FORCE option, it
reported the following issues:
[Warning] Table 'mysql.ndb_apply_status' requires repair.
[ERROR] Table 'mysql.ndb_apply_status' repair failed.
This was because --upgrade=FORCE causes a bootstrap
system thread to run CHECK TABLE FOR UPGRADE, but
ha_ndbcluster::open() refused to open the table before
schema synchronization had completed, which eventually
led to the reported conditions. (Bug #29305977)
References: See also: Bug #29205142.
* When using explicit SHM connections, with ShmSize set to
a value larger than the system's available shared memory,
mysqld hung indefinitely on startup and produced no
useful error messages. (Bug #28875553)
* The maximum global checkpoint (GCP) commit lag and GCP
save timeout are recalculated whenever a node shuts down,
to take into account the change in number of data nodes.
This could lead to the unintentional shutdown of a viable
node when the threshold decreased below the previous
value. (Bug #27664092)
References: See also: Bug #26364729.
* A transaction which inserts a child row may run
concurrently with a transaction which deletes the parent
row for that child. One of the transactions should be
aborted in this case, lest an orphaned child row result.
Before committing an insert on a child row, a read of the
parent row is triggered to confirm that the parent
exists. Similarly, before committing a delete on a parent
row, a read or scan is performed to confirm that no child
rows exist. When insert and delete transactions were run
concurrently, their prepare and commit operations could
interact in such a way that both transactions committed.
This occurred because the triggered reads were performed
using LM_CommittedRead locks (see
NdbOperation::LockMode), which are not strong enough to
prevent such error scenarios.
This problem is fixed by using the stronger LM_SimpleRead
lock mode for both triggered reads. The use of
LM_SimpleRead rather than LM_CommittedRead locks ensures
that at least one transaction aborts in every possible
scenario involving transactions which concurrently insert
into child rows and delete from parent rows. (Bug
#22180583)
* Concurrent SELECT and ALTER TABLE statements on the same
SQL node could sometimes block one another while waiting
for locks to be released. (Bug #17812505, Bug #30383887)
* Failure handling in schema synchronization involves
pushing warnings and errors to the binary logging thread.
Schema synchronization is also retried in case of certain
failures which could lead to an accumulation of warnings
in the thread. Now such warnings and errors are cleared
following each attempt at schema synchronization. (Bug
#2991036)
* An INCL_NODECONF signal from any local blocks should be
ignored when a node has failed, except in order to reset
c_nodeStartSlave.nodeId. (Bug #96550, Bug #30187779)
* When returning Error 1022, NDB did not print the name of
the affected table. (Bug #74218, Bug #19763093)
References: See also: Bug #29700174.
On Behalf of Oracle/MySQL Release Engineering Team,
Hery Ramilison
[Less]
|
Posted
over 4 years
ago
by
MySQL Server Dev Team
The MySQL Development team is proud to announce version 8.0.19 of the MySQL Shell, with the following features:
Admin API
MySQL InnoDB ReplicaSet
MySQL Router Management Functions
Metadata Upgrade
Router Management Functions
Shell JavaScript
... [More]
Plugins: require() function enhancements.
Upgrade Checker Updates
MySQL InnoDB ReplicaSet
Similar to MySQL InnoDB Cluster (based on Group Replication), this release of the Shell introduces the MySQL InnoDB Replicaset which provides an easy to use management solution for MySQL Replication.…
Facebook
Twitter
LinkedIn
[Less]
|
Posted
over 4 years
ago
by
Surabhi Bhat
Dear MySQL users,
MySQL Connector/C++ 8.0.19 is a new release version of the MySQL
Connector/C++ 8.0 series.
Connector/C++ 8.0 can be used to access MySQL implementing Document
Store or in a traditional way, using SQL queries. It allows writing
... [More]
both C++ and plain C applications using X DevAPI and X DevAPI for C.
It also supports the legacy API of Connector/C++ 1.1 based on JDBC4.
To learn more about how to write applications using X DevAPI, see
"X DevAPI User Guide" at
https://dev.mysql.com/doc/x-devapi-userguide/en/
See also "X DevAPI Reference" at
https://dev.mysql.com/doc/dev/connector-cpp/devapi_ref.html
and "X DevAPI for C Reference" at
https://dev.mysql.com/doc/dev/connector-cpp/xapi_ref.html
For generic information on using Connector/C++ 8.0, see
https://dev.mysql.com/doc/dev/connector-cpp/
For general documentation about how to get started using MySQL
as a document store, see
http://dev.mysql.com/doc/refman/8.0/en/document-store.html
To download MySQL Connector/C++ 8.0.19, see the "General Availability (GA)
Releases" tab at
https://dev.mysql.com/downloads/connector/cpp/
==================================================
Changes in MySQL Connector/C++ 8.0.19 (2020-01-13, General Availability)
* Error Handling
* Legacy (JDBC API) Notes
* Packaging Notes
* X DevAPI Notes
* Functionality Added or Changed
* Bugs Fixed
Error Handling
* If an application tries to obtain a result set from a
statement that does not produce one, an exception occurs.
For applications that do not catch such exceptions,
Connector/C++ now produces a more informative error
message to indicate why the exception occurred. (Bug
#28591814, Bug #92263)
Legacy (JDBC API) Notes
* For applications that use the legacy JDBC API (that is,
not made using X DevAPI or X DevAPI for C), it is now
possible when creating a new session to specify multiple
hosts to be tried until a successful connection is
established. A list of hosts can be given in the session
creation options.
The new OPT_MULTI_HOST option is disabled by default for
backward compatibility, but if enabled in the
ConnectionOptionsMap parameter passed to connect() calls,
it permits other map parameters to specify multiple
hosts. Examples:
sql::ConnectOptionsMap opts;
opts["hostName"]="host1,host2:13001,localhost:13000";
opts["schema"]="test";
opts["OPT_MULTI_HOST"] = true;
opts["userName"]="user";
opts["password"]="password";
driver->connect(opts);
sql::ConnectOptionsMap opts;
opts["hostName"]="tcp://host1,host2:13001,localhost:13000/test";
opts["OPT_MULTI_HOST"] = true;
opts["userName"]="user";
opts["password"]="password";
driver->connect(opts);
sql::ConnectOptionsMap opts;
opts["hostName"]="mysql://host1,host2:13001,localhost:13000/test";
opts["OPT_MULTI_HOST"] = true;
opts["userName"]="user";
opts["password"]="password";
driver->connect(opts);
Port values are host specific. If a host is specified
without a port number, the default port is used.
These rules apply:
+ If OPT_MULTI_HOST is disabled and multiple hosts are
specified, an error occurs.
+ If OPT_MULTI_HOST is disabled and a single host that
resolves to multiple hosts is specified, the first
host is used for backward compatibility.
+ If OPT_MULTI_HOST is enabled and multiple hosts are
specified, one of them is randomly chosen as the
connection target. If the target fails, another host
is randomly chosen from those that remain. If all
targets fail, an error occurs.
+ The hostName parameter can accept a URI that
contains a list of comma-separated hosts. The URI
scheme can be mysql://, which works like tcp://. The
URI scheme can also be omitted, so the parameter can
be a list of comma-separated hosts.
+ The connect() syntax that takes URI, user, and
password parameters does not permit multiple hosts
because in that case OPT_MULTI_HOST is disabled.
Packaging Notes
* Connector/C++ now is compatible with MSVC 2019, while
retaining compatibility with MSVC 2017:
+ Previously, Connector/C++ binary distributions were
compatible with projects built using MSVC 2017 or
2015. Binary distributions now are compatible with
projects built using MSVC 2019 (using either dynamic
or static connector libraries) or MSVC 2017 (using
dynamic connector libraries). Building using MSVC
2015 might work, but is not supported.
+ Previously, Connector/C++ source distributions could
be built using MSVC 2017 or 2015. Source
distributions now can be built using MSVC 2019 or
2017. Building using MSVC 2015 might work, but is
not supported.
+ Previously, the MSI installer accepted the Visual
C++ Redistributable for Visual Studio 2017 or 2015.
The MSI installer now accepts the Visual C++
Redistributable for Visual Studio 2019 or 2017.
X DevAPI Notes
* For applications that use X DevAPI or X DevAPI for C,
Connector/C++ now provides options that enable specifying
the permitted TLS protocols and ciphersuites for TLS
connection negotiation:
+ TLS protocols must be chosen from this list: TLSv1,
TLSv1.1, TLSv1.2, TLSv1.3. (TLSv1.3 requires that
both the server and Connector/C++ be compiled with
OpenSSL 1.1.1 or higher.)
+ Ciphersuite values must be IANA ciphersuite names.
TLS protocols and ciphersuites now may be specified in
these contexts:
+ Connection strings permit tls-versions and
tls-ciphersuites options. The tls-versions value is
a list of one or more comma-separated TLS protocol
versions. The tls-ciphersuites value is a list of
one or more comma-separated ciphersuite names.
Examples:
...?tls-versions=[TLSv1.3]&...
...?tls-versions=[TLSv1.2,TLSv1.3]&...
...?tls-ciphersuites=[
TLS_DHE_PSK_WITH_AES_128_GCM_SHA256,
TLS_CHACHA20_POLY1305_SHA256
]&...
+ SessionSettings objects permit TLS_VERSIONS and
TLS_CIPHERSUITES options. Each value is either a
string containing one or more comma-separated items
or a container with strings (that is, any type that
can be iterated with a loop that yields string
values).
Example of single string values:
Session s(...,
TLS_VERSIONS, "TLSv1.2,TLSv1.3",
TLS_CIPHERSUITES,
"TLS_DHE_PSK_WITH_AES_128_GCM_SHA256,TLS_CHACHA20_POLY1305_SHA256"
,
...);
Example of string container values:
std::list tls_versions = {
"TLSv1.2",
"TLSv1.3"
};
std::list ciphers = {
"TLS_DHE_PSK_WITH_AES_128_GCM_SHA256",
"TLS_CHACHA20_POLY1305_SHA256"
};
Session s(...,
TLS_VERSIONS, tls_versions
TLS_CIPHERSUITES, ciphers,
...);
Session s(...,
TLS_VERSIONS, std::vector{"TLSv1.2","TLSv1.3"},
TLS_CIPHERSUITES, std::vector{"TLS_DHE_PSK_WITH_AES_128_GCM_SHA256",
"TLS_CHACHA20_POLY1305_SHA256"},
...);
+ mysqlx_session_option_set() and friends permit
MYSQLX_OPT_TLS_VERSIONS and
MYSQLX_OPT_TLS_CIPHERSUITES session option
constants, together with the corresponding
OPT_TLS_VERSIONS() and OPT_TLS_CIPHERSUITES()
macros. MYSQLX_OPT_TLS_VERSIONS and
MYSQLX_OPT_TLS_CIPHERSUITES accept a string
containing one or more comma-separated items.
Examples:
mysqlx_session_option_set(opts, ...,
OPT_TLS_VERSIONS("TLSv1.2,TLSv1.3"),
OPT_TLS_CIPHERSUITES(
"TLS_DHE_PSK_WITH_AES_128_GCM_SHA256,TLS_CHACHA20_POLY1305_SHA256"
),
...)
For more information about TLS protocols and ciphersuites
in MySQL, see Encrypted Connection TLS Protocols and
Ciphers
( https://dev.mysql.com/doc/refman/8.0/en/encrypted-connection-protocols-ciphers.html ).
(Bug #28964583, Bug #93299)
* For X DevAPI or X DevAPI for C, when creating a new
connection (given by a connection string or other means),
if the connection data contains several target hosts that
have no explicit priority assigned, the behavior of the
failover logic now is the same as if all those target
hosts have the same priority. That is, the next candidate
for making a connection is chosen randomly from the
remaining available hosts.
This is a change from previous behavior, where hosts with
no explicit priority were assigned implicit decreasing
priorities and tried in the same order as listed in the
connection data.
Functionality Added or Changed
* Connector/C++ now supports the use of DNS SRV records to
specify multiple hosts:
+ Session and session-pool creation accepts a URI
scheme of mysqlx+srv:// that enables the DNS SRV
feature in connect strings. Example:
mysqlx+srv://example.com/db?options
+ For X DevAPI, mysqlx::Session objects permit a
SessionOption::DNS_SRV entry to enable use of a DNS
SRV record to specify available services. Example:
mysqlx::Session sess(
SessionOption::HOST, "example.com",
SessionOption::DNS_SRV, true,
SessionOption::USER, "user",
SessionOption::PWD, "password");
Similarly, for X DevAPI for C, the
mysqlx_session_option_set() function permits an
OPT_DNS_SRV() option in the argument list. Example:
mysqlx_session_option_set(opt,
OPT_HOST("example.com"),
OPT_DNS_SRV(true)
OPT_USER("user"),
OPT_PWD("password"),
PARAM_END));
+ For applications that use the legacy JDBC API (that
is, not made using X DevAPI or X DevAPI for C),
connection maps permit an OPT_DNS_SRV element. A map
should specify the host for SRV lookup as a full
lookup name and without a port. Example:
sql::ConnectOptionsMap opts;
opts["hostName"] = "_mysql._tcp.host1.example.com";
opts["OPT_DNS_SRV"] = true;
opts["userName"] = "user";
opts["password"] = "password";
driver->connect(opts);
In legacy applications, DNS SRV resolution cannot be
enabled in URI connect strings because parameters
are not supported in such strings.
Bugs Fixed
* Connector/C++ failed to compile using Clang on Linux.
(Bug #30450484)
* Connector/C++ set the transaction isolation level to
REPEATABLE READ at connect time, regardless of the
current server setting. (Bug #22038313, Bug #78852, Bug
#30294415)
On Behalf of MySQL Release Engineering Team,
Surabhi Bhat
[Less]
|
Posted
over 4 years
ago
by
Surabhi Bhat
Dear MySQL users,
MySQL Server 5.7.29, a new version of the popular Open Source Database
Management System, has been released. MySQL 5.7.29 is recommended for
use on production systems.
For an overview of what's new in MySQL 5.7, please see
... [More]
http://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html
For information on installing MySQL 5.7.29 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.29 is available in source and binary form for a number
of platforms from our download pages at
http://dev.mysql.com/downloads/mysql/
MySQL Server 5.7.29 is also available from our repository for Linux
platforms, go here for details:
http://dev.mysql.com/downloads/
Windows packages are available via the Installer for Windows or .ZIP
(no-install) packages for more advanced needs. The point and click
configuration wizards and all MySQL products are available in the
unified Installer for Windows:
http://dev.mysql.com/downloads/installer/
5.7.29 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 link lists the changes in the MySQL 5.7 since the release
of MySQL 5.7.28. It may also be viewed online at
http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-29.html
Enjoy!
==============================================================================
Changes in MySQL 5.7.29 (2020-01-13, General Availability)
* Audit Log Notes
* Bugs Fixed
Audit Log Notes
* ANALYZE TABLE statements now produce read audit events.
(Bug #29625461)
Bugs Fixed
* InnoDB: os_file_get_parent_dir warnings were encountered
when compiling MySQL with GCC 9.2.0. (Bug #30499288, Bug #97466)
* InnoDB: An internal function
(btr_push_update_extern_fields()) used to fetch newly added
externally stored fields and update them during a pessimistic
update or when going back to a previous version of a record was
no longer required. Newly added externally stored fields are
updated by a different function. Also, the method used to
determine the number of externally stored fields was corrected.
(Bug #30342846)
* InnoDB: A comparison function found two records to be
equal when attempting to merge non-leaf pages of a spatial index.
The function was unable to handle this unexpected condition,
which resulted in a long semaphore wait and an eventual assertion
failure. (Bug #30287668)
* InnoDB: Importing a tablespace from a location outside of
the data directory raised an assertion failure. (Bug #30190227)
* InnoDB: Importing a tablespace with a data directory
definition that did not match the destination data directory
returned an insufficiently descriptive schema mismatch error.
(Bug #30190199)
* InnoDB: Criteria used by the btr_cur_will_modify_tree()
function, which detects whether a modifying record needs a
modifying tree structure, was insufficient. (Bug #30113362)
* InnoDB: An ALTER TABLE ... DISCARD TABLESPACE operation
caused a hang condition. (Bug #29942556, Bug #30324703)
* InnoDB: A code regression was addressed by prohibiting
unnecessary implicit to explicit secondary index lock conversions
for session temporary tables. (Bug #29718243)
* InnoDB: A tablespace import operation raised an assertion
when the cursor was positioned on a corrupted page while purging
delete-marked records. Instead of asserting when encountering a
corrupted page, the import operation is now terminated and an
error is reported. (Bug #29454828, Bug #94541)
* Replication: When a member is joining or rejoining a
replication group, if Group Replication detects an error in the
distributed recovery process (during which the joining member
receives state transfer from an existing online member), it
automatically switches over to a new donor, and retries the state
transfer. The number of times the joining member retries before
giving up is set by the group_replication_recovery_retry_count
system variable. The Performance Schema table
replication_applier_status_by_worker displays the error that
caused the last retry. Previously, this error was only shown if
the group member was configured with parallel replication applier
threads (as set by the slave_parallel_workers system variable).
If the group member was configured with a single applier thread,
the error was cleared after each retry by an internal RESET SLAVE
operation, so it could not be viewed. This was also the case for
the output of the SHOW SLAVE STATUS command whether there were
single or multiple applier threads. The RESET SLAVE operation is
now no longer carried out after retrying distributed recovery, so
the error that caused the last retry can always be viewed. (Bug
#30517160, Bug #30517172)
* Replication: A memory leak could occur when a failed
replication group member tried to rejoin a minority group and was
disallowed from doing so. (Bug #30162547, Bug #96471)
* Replication: If a replication slave was set up using a
CHANGE MASTER TO statement that did not specify the master log
file name and master log position, then shut down before START
SLAVE was issued, then restarted with the option
--relay-log-recovery set, replication did not start. This
happened because the receiver thread had not been started before
relay log recovery was attempted, so no log rotation event was
available in the relay log to provide the master log file name
and master log position. In this situation, the slave now skips
relay log recovery and logs a warning, then proceeds to start
replication. (Bug #28996606, Bug #93397)
* Replication: When GTIDs are enabled on a replication
master and slave, and the slave connects to the master with the
MASTER_AUTO_POSITION=1 option set, the master must send the slave
all the transactions that the slave has not already received,
committed, or both. If any of the transactions that should be
sent by the master have been already purged from the master's
binary log, the master sends the error
ER_MASTER_HAS_PURGED_REQUIRED_GTIDS (1789) to the slave, and
replication does not start. The message provided for the error
ER_MASTER_HAS_PURGED_REQUIRED_GTIDS has been changed to provide
advice on the correct action in this situation, which is for the
slave to replicate the missing transactions from another source,
or for the slave to be replaced by a new slave created from a
more recent backup. The message advises that the master's binary
log expiration period can be revised to avoid the situation in
future. In addition, the master now identifies the GTIDs of the
purged transactions and supplies them in its error log in the
warning message ER_FOUND_MISSING_GTIDS (11809), so that you do
not need to calculate the missing GTIDs manually. (Bug #26004541,
Bug #29769293)
* macOS: On macOS, configuring MySQL with -DWITH_SSL=system
caused mysql_config output to incorrectly include internal CMake
names for the static SSL libraries. (Bug #30541879, Bug #97632)
* Docker packages were missing the LDAP authentication
plugins. (Bug #30465247)
* The original table name for a field in a derived table
was not always displayed correctly. (Bug #30362898) References:
See also: Bug #24611344. This issue is a regression of: Bug
#22364401.
* MySQL Installer was unable to uninstall MySQL 5.7 on
Windows Server 2012. (Bug #30323924, Bug #96940)
* With multiple sessions executing concurrent INSERT ... ON
DUPLICATE KEY UPDATE statements into a table with an
AUTO_INCREMENT column but not specifying the AUTO_INCREMENT
value, inserts could fail with a unique index violation. (Bug
#30194841, Bug #96578)
* With lower_case_table_names=2, SHOW TABLES could fail to
display tables with uppercase names. (Bug #29957361)
* With keyring_encrypted_file_password set on the command
line at server startup, the password value could be visible to
system utilities. (Bug #29848634)
* With a LOCK TABLES statement in effect, a metadata change
for the locked table could cause Performance Schema or SHOW
queries for session variables to hang in the opening_tables
state. (Bug #29836204, Bug #92387)
* A SELECT using a WHERE condition of the form A AND (B OR
C [OR ...]) resulting in an impossible range led to an unplanned
exit of the server. (Bug #29770705)
* For JSON-format audit logging, the id field now may
contain values larger than 65535. Previously, with heaving
logging activity, more than 65536 queries per second could be
executed, exceeding the 16 bits permitted for id values. (Bug
#29661920)
* An incomplete connection packet could cause clients not
to properly initialize the authentication plugin name. (Bug
#29630767)
* Client programs that used the libmysqlclient C client
library could exit upon receipt of an OK packet containing
malformed session-tracking information. (Bug #29297620, Bug
#29630735)
* Under certain conditions, enabling the read_only or
super_read_only system variable did not block concurrent DDL
statements executed by users without the SUPER privilege. (Bug
#28438114, Bug #91852)
* mysqlpump exits rather than dumping databases that
contain an invalid view, by design, but it also failed if an
invalid view existed but was not in any of the databases to be
dumped. (Bug #27096081)
On Behalf of MySQL Release Engineering Team,
Surabhi Bhat
[Less]
|
Posted
over 4 years
ago
by
Nawaz Nazeer ahamed
Dear MySQL users,
The MySQL developer tools team announces 8.0.19 as our General Availability
(GA) for MySQL Workbench 8.0.
For the full list of changes in this revision, visit
https://dev.mysql.com/doc/relnotes/workbench/en/news-8-0.html
For
... [More]
discussion, join the MySQL Workbench Forums:
http://forums.mysql.com/index.php?152
The release is now available in source and binary form for a number of
platforms from our download pages at:
http://dev.mysql.com/downloads/tools/workbench/
Enjoy!
Changes in MySQL Workbench 8.0.19 (2020-01-13, General Availability)
Functionality Added or Changed
* Important Note:
MySQL Workbench 8.0.19 is unable to open a new connection to
MySQL Server from the home screen if the server is not started
and you cannot start a server by using the Workbench
Administration feature. Administrative and SQL editing tasks
require an online server for the duration of this issue. Feature
tasks that you performed with an offline server in previous
releases now return an error message indicating that the server
is unreachable. This issue is limited to MySQL Workbench 8.0.19.
Thank you for your patience.
Workaround: Start MySQL Server independently before opening the
Administration and SQL Query tabs in MySQL Workbench. On Linux,
you can replace the MySQL Connector/C++ 8.0.19 library with the
8.0.18 library.
* A new context menu item now copies the headers and rows
of queried data with tabs as separators, making it convenient to
copy and paste query results into Excel. Thanks to Raj Rao for
the patch. (Bug #30568824, Bug #97712)
* The following MySQL server language features are now
supported: value references in INSERT statements, new options
(TLS version, cipher suite, compression, and privilege check) in
CHANGE MASTER TO replication statements, random passwords in
CREATE USER and ALTER USER statements, EXPLAIN ANALYZE, and
binary collation names.
* Context help for the keywords and functions in SQL
queries now includes updated syntax and usage information.
Bugs Fixed
* When attempting to export MySQL 5.7 data using MySQL
Workbench 8.0, the server returned an error indicating that
INFORMATION_SCHEMA.COLUMN_STATISTICS was an unknown table.
Consistent parameter use with mysqldump now skips the table as
expected. (Bug #30515899, Bug #97520)
* The SQL editor applied syntax-error highlighting to the
EXPLAIN keyword in a valid statement prefixed with EXPLAIN
ANALYZE, but the statement executed as expected. (Bug #30478023,
Bug #97416)
* A syntax error was generated for valid ANALYZE TABLE
statements with either the UPDATE HISTOGRAM or DROP HISTOGRAM
clause. (Bug #30449796, Bug #97281)
* Storage engines not supported by MySQL were listed as
possible engines that could be selected for tables. Unsupported
storage engines now are removed from the suggestion list.
(Bug #30338754, Bug #96968)
* An existing stored connection could not be replaced with
a new connection having the same name when the attempt was made
from the Source Selection step of the MySQL Workbench Migration
Wizard. (Bug #30269513)
* On macOS, the Cancel and Export buttons in the Export
Recordset context window (for SQL INSERT statements) were mostly
hidden. (Bug #30244028, Bug #96689)
* If the ls command produced an error message together with
a list of files, no audit log for the error appeared in the
Enterprise MySQL Audit Log Inspector. (Bug #30135391)
* An original SQL Server record (for example, 1020.6) was
copied inaccurately to the corresponding MySQL column (1020.0)
when migrated using the DECIMAL data type. Similarly, data
migrated using the NUMERIC type generated a type-conversion
error. Now, both decimal and numeric values are stored as DECIMAL
types to fix the resolution of the decimal value or to fix the
type conversion. (Bug #30062094, Bug #96230, Bug #30263415,
Bug #96744)
* The uniqueidentifier data type in a SQL Server source
table was interpreted during migration as type VARCHAR(64) UNIQUE
in the MySQL target column, instead of a VARCHAR column to
represent a GUID (UUID) that is not unique. (Bug #29355468,
Bug #94066)
* The relationship arrows within an EER diagram were not
visible when the Dark Mode theme was enabled on a macOS host and
the diagram was exported as a single page PDF file. This fix
disables the theme in models to prevent conflicts with the colors
assigned by the model editor. (Bug #29307893, Bug #94174)
* An empty file list was shown when the audit_log_file
value was set to any location other than the MySQL server data
directory. (Bug #22673089)
On Behalf of Oracle/MySQL Release Engineering Team,
Nawaz Nazeer Ahamed
[Less]
|
Posted
over 4 years
ago
by
The Workbench Team
Dear MySQL users,
The MySQL developer tools team announces 8.0.19 as our
General Availability
(GA) for MySQL Workbench 8.0.
For the full list of changes in this revision
... [More]
, visithttps://dev.mysql.com/doc/relnotes/workbench/en/news-8-0.html
For discussion, join the MySQL Workbench Forums:http://forums.mysql.com/index.php?152
The release is now available in source and binary form
for a number of
platforms from our download pages at:http://dev.mysql.com/downloads/tools/workbench/
Enjoy! [Less]
|
Posted
over 4 years
ago
by
Tvarita Jain
Dear MySQL users,
MySQL Connector/NET 8.0.19 is the latest General Availability release of
the MySQL Connector/NET 8.0 series. This version supports .NET Core 3.0
and the X DevAPI, which enables application developers to write code
that
... [More]
combines the strengths of the relational and document models using
a modern, NoSQL-like syntax that does not assume previous experience
writing traditional SQL.
To learn more about how to write applications using the X DevAPI, see
http://dev.mysql.com/doc/x-devapi-userguide/en/index.html. For more
information about how the X DevAPI is implemented in Connector/NET, see
http://dev.mysql.com/doc/dev/connector-net.
NuGet packages provide functionality at a project level. To get the
full set of features available in Connector/NET such as availability
in the GAC, integration with Visual Studio's Entity Framework Designer
and integration with MySQL for Visual Studio, installation through
the MySQL Installer or the stand-alone MSI is required.
Please note that the X DevAPI requires at least MySQL Server version
8.0 or higher with the X Plugin enabled. For general documentation
about how to get started using MySQL as a document store, see
http://dev.mysql.com/doc/refman/8.0/en/document-store.html.
To download MySQL Connector/NET 8.0.19, see
http://dev.mysql.com/downloads/connector/net/
Installation instructions can be found at
https://dev.mysql.com/doc/connector-net/en/connector-net-installation.html
Changes in MySQL Connector/NET 8.0.19 (2020-01-13, General
Availability)
* Functionality Added or Changed
* Bugs Fixed
Functionality Added or Changed
* Connector/NET supports TLS protocol versions TLSv1,
TLSv1.1, TLSv1.2, and TLSv1.3. A new connection-string
option, tlsversion, permits the restriction of a
connection to a single version or to a list with any
combination of the four supported TLS versions (see
Options for Both Classic MySQL Protocol and X Protocol
https://dev.mysql.com/doc/connector-net/en/connector-net-8-0-connection-options.html#connector-net-8-0-connection-options-classic-xprotocol.)
Known issue: both .NET Core 3.0 (crossplatform) and .NET
Framework 4.8 (windows only) added support for TLSv1.3.
Be sure to confirm that the platform operating system
running your application also supports TLSv1.3 before
using it exclusively for connections. (Bug #30225427)
* Support for DNS Service (SRV) records now provides an
alternative to specifying individual hosts in the
connection string. Instead, a single DNS domain can map
to multiple targets (servers) using SRV address records.
Each SRV record includes the host name, port, priority,
and weight. For .NET applications using X Protocol, a new
URI scheme of mysqlx+srv:// enables connections to share
the query load when a single DNS domain is mapped to
multiple servers.
Similarly, the new dns-srv connection-string option also
enables DNS SRV lookups for connections using either the
classic MySQL protocol or X Protocol. The DNS SRV feature
is disable by default. For usage information, see Options
for Both Classic MySQL Protocol and X Protocol
https://dev.mysql.com/doc/connector-net/en/connector-net-8-0-connection-options.html#connector-net-8-0-connection-options-classic-xprotocol.
* When creating a new connection using classic MySQL
protocol, multiple hosts can be tried until a successful
connection is established. A list of hosts can be given
in a connection string, with or without priorities.
// Example with priority
server=(address=192.10.1.52:3305,priority=60),(address=localhost:3306,
priority=100);
// Example without priority and with multiple ports
host=10.10.10.10:3306,192.101.10.2:3305,localhost:3306;uid=test;passwo
rd=xxxx;
If the priority is not included, or if multiple hosts
have the same priority, Connector/NET selects a host at
random. The same random selection behavior also applies
to connections made using X Protocol, which previously
selected hosts sequentially when no priority was
specified.
Bugs Fixed
* Clone connections did not process all connection settings
as expected. (Bug #30502718)
* Connector/NET files displayed an unlikely date after the
NuGet package containing them was installed in a project.
(Bug #30471336, Bug #97390)
* The inclusion of the System.Resources.Extensions
dependency was transient and now is removed from the
MySql.Data NuGet package. (Bug #30421657, Bug #97218)
On behalf of Oracle/MySQL Release Engineering Team,
Tvarita Jain [Less]
|
Posted
over 4 years
ago
by
MySQL Performance Blog
A few days ago I wrote about how grossly outdated statistics returned through MySQL’s Information_Schema can be. In that post, Øystein Grøvlen suggested taking a look at mysql.innodb_table_stats and mysql.innodb_index_stats as a better source of
... [More]
information. Let’s do just that!
Let’s start with the good news. Unlike MySQL Data Dictionary Tables (mysql.table_stats, etc), mysql.innodb_table_stats and mysql.innodb_index_stats can be queried by the user. They also contain a lot of interesting statistics. Before we get to that though, let’s examine where those tables come from in more detail.
As the manual tells us, these tables are storing InnoDB Persistent Statistics, but only if those statistics are enabled. While in MySQL 8 the default is to use Persistent Statistics and update them automatically, the user has an option to disable persistent statistics by setting innodb_stats_persistent=0 variable or disable automatic updates by setting innodb_stats_auto_recalc=0, which means the data in these tables may be missing or maybe very stale.
Furthermore, in their quest for ultimate flexibility, the MySQL Team allows you to enable/disable these options on a table by table basis using STATS_PERSISTENT, STATS_AUTO_RECALC, and STATS_SAMPLE_PAGES CREATE TABLE clauses. This means information may be present for some tables but not others.
So while this data is very valuable when it presents, you should not count on its being present or on its accuracy.
OK, enough of that. Let’s take a look at what we have in those tables:
mysql> select * from mysql.innodb_table_stats where database_name='tpcc' and table_name='orders1' \G
*************************** 1. row ***************************
database_name: tpcc
table_name: orders1
last_update: 2020-01-04 23:59:27
n_rows: 380197
clustered_index_size: 1185
sum_of_other_index_sizes: 672
1 row in set (0.00 sec)
The table information contains an estimated number of rows as well as clustered index size and size of all other indexes combined in pages. Multiply it by innodb_page_size variable and you will get the size in bytes.
Also, note the last_update column which specifies when stats were last updated. Very old last_update may mean two things – either the table is not getting many writes for stats update to be triggered, or automatic stats update for this table is disabled.
Now let’s take a look at innodb_index_stats table:
mysql> select * from mysql.innodb_index_stats where database_name='tpcc' and table_name='orders1';
+---------------+------------+-------------+---------------------+--------------+------------+-------------+-----------------------------------+
| database_name | table_name | index_name | last_update | stat_name | stat_value | sample_size | stat_description |
+---------------+------------+-------------+---------------------+--------------+------------+-------------+-----------------------------------+
| tpcc | orders1 | PRIMARY | 2020-01-04 23:59:27 | n_diff_pfx01 | 9 | 11 | o_w_id |
| tpcc | orders1 | PRIMARY | 2020-01-04 23:59:27 | n_diff_pfx02 | 101 | 20 | o_w_id,o_d_id |
| tpcc | orders1 | PRIMARY | 2020-01-04 23:59:27 | n_diff_pfx03 | 380197 | 20 | o_w_id,o_d_id,o_id |
| tpcc | orders1 | PRIMARY | 2020-01-04 23:59:27 | n_leaf_pages | 991 | NULL | Number of leaf pages in the index |
| tpcc | orders1 | PRIMARY | 2020-01-04 23:59:27 | size | 1185 | NULL | Number of pages in the index |
| tpcc | orders1 | idx_orders1 | 2020-01-04 23:59:27 | n_diff_pfx01 | 9 | 11 | o_w_id |
| tpcc | orders1 | idx_orders1 | 2020-01-04 23:59:27 | n_diff_pfx02 | 101 | 20 | o_w_id,o_d_id |
| tpcc | orders1 | idx_orders1 | 2020-01-04 23:59:27 | n_diff_pfx03 | 306329 | 20 | o_w_id,o_d_id,o_c_id |
| tpcc | orders1 | idx_orders1 | 2020-01-04 23:59:27 | n_diff_pfx04 | 378338 | 20 | o_w_id,o_d_id,o_c_id,o_id |
| tpcc | orders1 | idx_orders1 | 2020-01-04 23:59:27 | n_leaf_pages | 577 | NULL | Number of leaf pages in the index |
| tpcc | orders1 | idx_orders1 | 2020-01-04 23:59:27 | size | 672 | NULL | Number of pages in the index |
+---------------+------------+-------------+---------------------+--------------+------------+-------------+-----------------------------------+
11 rows in set (0.00 sec)
This table is designed to be extensible and able to hold many different statistics for the same index.
We see several statistics here. First, there are n_diff_pfxXX statistics which show cardinality for different index prefixes – the specific columns which are part of that prefix are specified in stat_description value. These are the same cardinality values you would see if you execute the SHOW INDEX FROM tpcc.orders1 command.
The other stats are n_leaf_pages and size which for each index specifies the full size (in pages) as well as the number of leaf pages. The difference between these two is the number of non-leaf pages the table has.
In this example, the orders1 table has 95 non-leaf pages and 577 leaf pages, or 672 pages in total.
This information can help you to identify how much space is needed in the InnoDB buffer pool if you want a particular index fully cached, or at least have non-leaf pages cached (which ensures index lookup will not take more than one IO operation).
Summary
mysql.innodb_table_stats and mysql.innodb_index_stats can be great sources of detailed information about your InnoDB tables and Indexes, and they are enabled and available by default in modern MySQL versions. Keep in mind, though, under certain configurations the information in these tables is unavailable or severely outdated. Also because the statistics are computed through sampling, they are not exact – and can be grossly inaccurate in some conditions.
[Less]
|