-
Important Change: It is now possible to configure Clusters, ClusterSets, and ReplicaSets to use SSL for:
Encrypting Group Replication and asynchronous replication channels.
Enabling replicas to verify the identity of the source.
Enabling replicas to use client SSL certificates for authentication.
The following changes were made:
-
dba.createCluster()was extended with the following options:memberAuthTypecertIssuercertSubject
-
dba.createReplicaSet()was extended with the following options:memberAuthTypecertIssuercertSubjectreplicationSslMode
-
cluster.addInstance()was extended with the following option:certSubject
-
clusterSet.createReplicaCluster()was extended with the following option:certSubject
-
The
cluster.createClusterSet()optionclusterSetReplicationSslModewas extended with the following values:VERIFY_CAVERIFY_IDENTITY
-
A new MySQL Shell option is added,
dba.connectivityChecks: true | false. This option defines if connectivity checks are performed for,cluster.addInstance(), andclusterSet.createReplicaCluster(), using the defined SSL configuration.replicaSet.addInstance()If an SSL error occurs, the command stops and an error is returned.
andcluster.options()were extended to show relevant information onreplicaSet.options()memberAuthTypeandcertIssuerin theglobalOptionssection, andcertSubjectfor each instance in thetopologysection.is also updated to listcluster.options()clusterSetReplicationSslModein theglobalOptionssection.is extended with a new field,replicaSet.statusreplicationSsl, to show the SSL information for each replication channel.
NoteIf the cluster's
memberAuthModeis set to any value other than password,will fail if used withcluster.rescan()addInstancesFor more information on these options, see the
MySQL Shell 8.0 JavaScript API ReferenceorMySQL Shell 8.0 Python API Referenceavailable from MySQL Documentation. (Bug #34256928, WL #13688) -
Important Change: Cluster and ReplicaSet operations
setupAdminAccount()andsetupRouterAccount()are extended to enable authentication with client SSL certificates. The following changes were made:-
The following options were added to
setupAdminAccount()andsetupRouterAccount():requireCertIssuer: Optional SSL certificate issuer for the account.requireCertSubject: Optional SSL certificate subject for the account.passwordExpiration: numberOfDays | Never | Default: Password expiration setting for the account.
setupAdminAccount()andsetupRouterAccount()were also added to the ClusterSet object.-
The following options were added to
dba.configureInstance()anddba.configureReplicaSetInstance():clusterAdminCertIssuer: Optional SSL certificate issuer for the account.clusterAdminCertSubject: Optional SSL certificate subject for the account.clusterAdminPasswordExpiration: NumberOfDays | NULL | DEFAULT | NEVER: Password expiration setting for the account.
For more information on these options, see the
MySQL Shell 8.0 JavaScript API ReferenceorMySQL Shell 8.0 Python API Referenceavailable from MySQL Documentation. (WL #15438) -
-
It is now possible to set
group_replication_paxos_single_leaderusing MySQL Shell.NoteThis can only be set by MySQL Shell on MySQL Server 8.0.31, or higher, because MySQL Shell requires the information provided by
WRITE_CONSENSUS_SINGLE_LEADER_CAPABLEin thereplication_group_communication_informationtable, which was introduced in MySQL 8.0.31.The following changes were made:
dba.createCluster()andnow support enabling or disablingClusterSet.createReplicaCluster()group_replication_paxos_single_leader.dba.rebootClusterFromCompleteOutage()now supports changing the value ofgroup_replication_paxos_single_leader.,Cluster.options(), andCluster.status({extended: 1})lists the value ofClusterSet.status({extended: 2})group_replication_paxos_single_leaderin use.group_replication_paxos_single_leaderis generated and set automatically when adding or rejoining members to Clusters.
(Bug #33930873)
-
The locking functionality introduced in MySQL Shell 8.0.20 to prevent conflicting ReplicaSet operations running concurrently has been extended to include Cluster and ClusterSet resources.
For information on locking types and the operations which require them, see MySQL AdminAPI.
NoteThe existing documentation on ReplicaSet locking has been moved to MySQL AdminAPI.
(Bug #25803949, Bug #33250135, WL #11969)
-
After an upgrade,
displayed the following error, underCluster.statusinstanceErrors:"WARNING: Incorrect recovery account (mysql_innodb_cluster_rServer_ID) being used. Use Cluster.rescan() to repair."This warning was displayed in error, as a result of a previous bug fix which introduced a check on recovery account formats. The recovery account format was expected to be of the form
mysql_innodb_cluster_but, for an upgrade, the recovery account format isserver_idmysql_innodb_cluster_r.server_idAs of this release, the recovery account format check has been updated to recognize older formats. (Bug #35046654)
References: See also: Bug #33235502.
-
Python commands, such as
did not check the Cluster was connected before proceeding. This could result in MySQL Shell closing unexpectedly.Cluster.add_instance()As of this release, Python commands check the cluster is connected before proceeding. (Bug #35046432)
-
andCluster.status()did not detect a mismatch of values between theCluster.rescan()group_replication_view_change_uuidstored in the metadata and the current runtime value. This could lead to errors during operations such asbecause the reconciliation of transaction sets cannot be done if the current UUID does not match the value stored in the ClusterSet metadata.ClusterSet.setPrimaryClusterAs of this release,
raises a warning if theCluster.status()group_replication_view_change_uuidvalues do not match andalso detects the mismatch and updates the metadata accordingly. (Bug #35000998)Cluster.rescan() createReplicaCluster()failed with the error,ERROR: Error creating Replica Cluster: MySQL Error 1772 (HY000): Malformed GTID set. This was caused by thesql_modeincludingNO_BACKSLASH_ESCAPES. (Bug #34837601)-
removeCluster()failed when attempting to remove an offline cluster from a ClusterSet, if group replication was attempting to bring the cluster back online, even if theforceoption was used. This issue could leave the Cluster metadata in a changed state.As of this release,
removeCluster()stops group replication and ignores errors if theforceoption is used. The rollback process was improved and no longer depends on group replication being online. Instead, snapshots are taken of server data and are reapplied when necessary. (Bug #34693099) dba.checkInstanceConfiguration()did not properly take into account value-less variables, such asdisable_log_bin, and listed them as requiring changes although they were correctly configured. (Bug #34569971)-
It is not possible to create sandboxes using older versions of MySQL 5.7, such as 5.7.21, due to incompatibilities between the supported versions of TLS. Newer versions of MySQL Shell do not support TLS v1.1 and older.
As of this release, sandbox management commands which open local connections to the sandboxes, fall back to unencrypted connections if an SSL connection fails. (Bug #34548702)
-
A replica's
globalStatusvalue, returned byClusterSet.status(), was incorrectly reported asNOT_OKif the ClusterSet's primary cluster was unreachable, but the replica was functioning normally.As of this release, the
globalStatusvalueOK_NOT_REPLICATINGis returned if the replica is functioning normally but not replicating because the primary is offline or otherwise unreachable. (Bug #34324165) -
It was not possible to upgrade the metadata schema of a cluster created by MySQL Shell 1.0.x with
adoptFromGR: true. The following error was returned:"ERROR: Truncated incorrect INTEGER value: 'true'"(Bug #31711835)
-
MySQL Shell disabled and persisted
offline_modewhen an instance was added or rejoined to a Cluster, or when rebooted. If this variable was enabled explicitly by the user, it was overwritten by MySQL Shell.As of this release,
offline_modeis disabled globally, not persisted, and a new warning is added toto inform the user of the risks of enabling this variable. (Bug #108905, Bug #34778797)Cluster.status When adding a member to a cluster, the values of
auto_increment_incrementandauto_increment_offsetwere miscalculated and were off by 1. As a result, when adding or rejoining an eighth member to a cluster, the new member was configured with the correct values, while the other seven members continued with the configuration of a seven-member cluster. (Bug #108759, Bug #34711038)
If an AWS request fails with a
HTTP 400error and the reported error isExpiredTokenorTokenRefreshRequired, the request is silently retried if the authentication can be refreshed. (Bug #35027093)It is now possible to use a non-default location for the OCI CLI config file used by the
authentication_oci_clientauthentication plugin, usingshell.options[oci.configFile]to define the alternate location. (Bug #34858763)-
MySQL Shell now bundles the following client authentication plugins:
authentication_fido_clientauthentication_kerberos_clientauthentication_ldap_sasl_client
These plugins are located in the
/lib/mysql/pluginsdirectory of your MySQL Shell installation. (Bug #34857426) -
MySQL Shell now supports AWS
credential_processexternal credential provider.For more information, see S3-compatible Storage. (Bug #34840953)
The Dump Loading utility (
loadDump()) progress file now includes information on index creation status. (Bug #34840760)
MySQL Shell could not connect if both port and socket file were defined in the configuration file. As of this release, the last value defined takes precedence. (Bug #35023480)
-
The
--user/-uand--password/-poptions were not recognized if they were specified before the URI in the connection string.They were recognized if they were specified after the URI. (Bug #35020175)
-
It was not possible to run the load or dump utilities over an SSH connection. The operation failed with an error similar to the following:
Util.dumpSchemas: The option ssh-remote-port '33060' is already defined.(ArgumentError)(Bug #35018617)
-
The import table utility ignored the
skipRowsparameter when importing a single compressed file or multiple files.In addition, the documentation of
skipRowswas updated to clarify that it skips the defined number of lines from each file imported. (Bug #35018278) If two different plugins defined an
object.functionwith the same name for both the object and function, the MySQL Shell help displayed the same help data for both, even if the functions had different signatures and description. (Bug #34979347)-
The
dumpInstance()utility incorrectly commented out database-levelGRANTstatements referring to schema names with wildcard characters.As of this release,
GRANTstatement filtering has been removed for both dump and load utilities. Dump utilities print a warning if aGRANTon an excluded object is detected.The following additional, supporting changes were made:
Dumping with
ocimds: true, all database level grants containing wildcards, are reported as errors. DB Systems usepartial_revokes=ONwhich treats wildcard characters literally. These errors must be corrected manually.A new compatibility option was added to the dump utilities,
ignore_wildcard_grants. If enabled, ignores errors from grants on schemas with wildcards, which are interpreted differently in systems where thepartial_revokessystem variable is enabled.-
A new option,
handleGrantErrors, was added toutil.loadDump(). This option defines the action taken in the event of errors related toGRANTorREVOKEerrors.abort: (default) stops the load process and displays an error.drop_account: deletes the account and continues the load process.ignore: ignores the error and continues the load process.
(Bug #34952027)
The
defaultValueoption ofshell.promptdid not return the defined value. (Bug #34889112)-
The Upgrade Checker utility did not raise a warning for indexes which were too large. Tables with the
compactorredundantrow formats are not permitted to have indexes larger than 767 bytes in MySQL 8.0. As a result, such tables were inaccessible after upgrading to MySQL 8.0.As of this release, the Upgrade Checker checks for such index sizes on specific row formats and raises a warning if the can cause tables to be inaccessible after upgrade. (Bug #34826890)
-
MySQL Shell running on Oracle Cloud Infrastructure Cloud Shell closed unexpectedly when attempting to load a dump from an Object Storage bucket while FIPS mode was enabled. The following error was displayed:
md5_dgst.c(82): OpenSSL internal error, assertion failed: Digest MD5 forbidden in FIPS mode!(Bug #34787908)
It was not possible to export a view with the Export Table utility (
exportTable(). (Bug #34663934)-
If the Dump Loading utility was run with
"deferTableIndexes": "all"and"ignoreExistingObjects": true, the load could fail as the utility tried to add indexes which already existed.As of this release, if
"ignoreExistingObjects": true, existing tables are checked for indexes and only missing indexes are added. (Bug #34566034) -
The following issues occurred in the import table utility:
The reported progress exceeded 100% when importing compressed files.
The utility reported multiple threads in use when importing a single compressed file, although only one thread was used.
The utility reported an incorrect number of chunks and imported files.
(Bug #33970577)
-
The dictionary used as the Python wrapper for a map did not pass the
isinstance()test.As of this release, the implementation of the map wrapper used by MySQL Shell in Python mode has been updated and now inherits from Python's
dict.To avoid duplication of data and ensure synchronization between Python's context and internal representation of data, data is not stored in the base class, but in the map wrapper. Due to this, and the fact that data is shared between Python and JavaScript modes, it is only safe to store basic types such as numbers, strings, arrays, and dictionaries, and native Shell objects such as Cluster and Session. As the base class is not used to store the data, all methods of the list class have been reimplemented.Be aware of the following limitations:
Order of insertion is not maintained; keys are always ordered alphabetically.
-
Only string types keys are supported; non-string keys are handled as follows:
converted to a string using
str()when inserting multiple values.treated as missing when accessing an element.
treated as an error, with an exception raised, when setting a value.
(Bug #33517575)
-
The MySQL Shell source compilation documentation,
INSTALL, did not include theantlr4runtime, which is a mandatory dependency.Thanks to Evgeniy Patlan for this contribution. (Bug #109909, Bug #35045019)
The Dump Loading utility failed to load a dump using
"deferTableIndexes": "all"if one of the tables being loaded contained multiple indexes and one, or more, index specified for anAUTO_INCREMENTcolumn. (Bug #109313, Bug #34876423)-
The
dumpInstance()utility incorrectly commented outGRANTstatements referring to existing views, routines, and non-existing schemas and objects instead of only commenting outGRANTstatements which referred to objects not included in the dump.As of this release,
GRANTstatement filtering has been removed for both dump and load utilities. Dump utilities now detect invalid grants and print a warning if they are detected.A new compatibility option is introduced,
strip_invalid_grants, which removes invalidGRANTstatements from the dump. (Bug #108974, Bug #34764157)