This version includes a change which enables MySQL Shell to
read MySQL Server option files and login paths by default. As
a result, if you connect to a MySQL Server which uses an
option file, it will be used, by default. If you do not want
to use the options file, you must add
--no-defaults
to your command
line.
For more information, see WL#11206 in Functionality Added or Changed.
-
A new attribute named
hiddenFromRouter
is added to the output of the following commands:Cluster
.status()Cluster
.describe()ReplicaSet
.status()
This attribute is
true
for any member hidden from MySQL Router traffic using the_hidden
metadata tag. (Bug #34680289) -
A new option,
use_replica_primary_as_rw
is added to<
.ClusterSet
>.setRoutingOption()This option is read by MySQL Router and enables it to open or close a read-write (R/W) port on a router targeting a specific Cluster (where
target_cluster
is not set toprimary
), enabling you to use a R/W port on a ReplicaCluster. The ReplicaCluster continues to only accept R/O traffic. In the event of a switchover or failover, the R/W port remains unchanged.See MySQL Router Status for InnoDB ClusterSet. (Bug #34544084)
-
It is now possible to set
ipAllowList
on a running cluster with
andCluster
.setOption
.Cluster
.setInstanceOptionNoteThis option can only be set if the
communicationStack
is set toXCOM
.See Setting Options for InnoDB Cluster.
This also corrects an issue in
, where instances were not checked to confirm they were online, and if the specified options were supported on each instance. (Bug #34424385)Cluster
.setOption -
As of this release, ReplicaSet replication channels are created with SSL enabled by default.
NoteThis change does not apply to replication groups adopted using this version; their replication channels remain unencrypted.
(Bug #30472808, Bug #30473564)
It was not possible to use
dba.dropMetadataSchema()
or
on a cluster which belonged to a ClusterSet. As of this release, these functions can be used on ClusterSet clusters if they are the only Cluster in the ClusterSet or they are invalidated. (Bug #34787737)cluster
.dissolve()It was not possible to create a working Cluster using MySQL Server 8.0.22 and a more recent version of MySQL Shell. (Bug #34787542)
-
rebootClusterFromCompleteOutage()
was unable to complete the reboot process if the rebooted cluster was a member of a ClusterSet and was missing purged transactions. There was no check for such purged transactions.As of this release,
rebootClusterFromCompleteOutage()
checks for purged transactions before attempting rejoinCluster.Additionally, replica clusters are now synchronized in two steps: the primary of the cluster is synchronized with the ClusterSet primary, then the rest of the cluster waits for those transactions to be applied.
If there are both errant and unrecoverable transactions, an errant transaction error is thrown. (Bug #34692990)
Metadata changes in
createCluster()
were prematurely committed through implicit commit statements. As of this release, these statements are executed in a separate session. (Bug #34670761)super_read_only
was set on every rejoined cluster member, regardless of what mode the cluster was running, single- or multi-primary. (Bug #34647972)If the primary was unreachable,
failed with an error instead of automatically connecting to a secondary member. (Bug #34615265)Cluster
.status()If the primary was unreachable,
dba.getCluster()
failed instead of retrieving the cluster object from a secondary. (Bug #34579287)-
During reboot or failover in a ClusterSet or ReplicaSet, MySQL Shell checks if the candidate primary has the most recent
GTID_EXECUTED
. However, if load is high, it is possible that the applier is still working andGTID_EXECUTED
still incrementing, and the check returns a premature result.As of this release, a
timeout
option is added to
which specifies a number of seconds to wait for the applier to finish and ensureClusterSet
.forcePrimaryCluster()GTID_EXECUTED
has the most up to date GTID set. The default value oftimeout
uses the value ofdba.gtidWaitTimeout
.The existing
timeout
option of
is extended to enable the applier to finish. (Bug #34465675)ClusterSet
.setPrimaryCluster() -
A fix in a previous version which prevented invalid endpoints being stored in the metadata did not take existing invalid values into account. As a result, attempting to add a member back to a cluster failed if the member's metadata contained an invalid endpoint. The following error was displayed:
Debug: Cluster.addInstance: Invalid address format: ''(ArgumentError)
As of this release,
scans for such invalid endpoints and generates a warning, andCluster
.status()
corrects the invalid data. (Bug #34395705)Cluster
.rescan() -
Under certain circumstances, Cluster recovery accounts are leftover and not used. This can occur if a recovery process is canceled, for example.
As of this release
reports the existence of such accounts in thecluster
.status()instanceErrors
field and
removes any such leftover accounts. (Bug #33235502)cluster
.rescan() An instance being provisioned for a cluster by clone was reported as
"mode": "R/W"
while it was being provisioned. As of this release, any member withstatus
other thanONLINE
will be reported as"mode": "n/a"
. (Bug #30902267)-
The
dba.upgradeMetadata()
error message contained a typo.Thanks to Nico Pay for the contribution. (Bug #108861, Bug #34733164)
-
Attempting to add an instance to a newly-created Replica Cluster, if the Primary Cluster was under high load, failed with several errors related to
super_read_only
.This issue was caused by an out-of-date topology view, leading to the newly created ReplicaCluster being considered a standalone cluster.
As of this release,
createReplicaCluster()
synchronizes the metadata update transactions. thereby ensuring it has the correct topology view. (Bug #108426, Bug #34584939) -
The error
ReplicaSet.status: Failed to execute query on Metadata Illegal mix of collations
was returned if the server was configured withcharacter-set-client-handshake=OFF
or--skip-character-set-client-handshake
, and the client attempted to use a different collation. The server collation was used for the client sessions, instead of negotiating the collation used.As of this release, the collation is explicitly set by AdminAPI sessions. (Bug #108209, Bug #34530914)
-
Important Change: The following options were added to the
exportTable()
,dumpInstance()
,dumpSchemas()
, anddumpTables()
utilities:where
: enables you to export the data which satisfies a SQL condition.partitions
: enables you to export named partitions.
As part of this development, the following options were added to the
dumpInstance()
,dumpSchemas()
, anddumpTables()
utilities:fieldsTerminatedBy
fieldsEnclosedBy
fieldsEscapedBy
fieldsOptionallyEnclosed
linesTerminatedBy
dialect
(json dialect is not supported) enabling you to dump your data as CSV or TSV file formats.
For information on
exportTable()
, see OptionsFor information on
dumpInstance()
,dumpSchemas()
, anddumpTables()
, see Options for Dump Output. (Bug #32669773, Bug #108504, Bug #34606598, WL #15311) -
Important Change: As of this release, MySQL Shell supports MySQL login paths and option files by default.
NoteIf you do not want MySQL Shell to read the option file, you must add
--no-defaults
to your command line.The following MySQL command line options are now supported at the start of the command line:
MySQL Shell also reads a new section in the MySQL configuration file,
[mysqlsh]
, in which you can define the MySQL Shell options.MySQL Shell also reads the
[client]
section of the MySQL Preconfiguration file.For more information, see Connecting using login-path and Options Files.
NoteSome
[client]
options are not supported by MySQL Shell, such aslocal-infile
, and some options have the same name in both, but take different values, such as the[client]
option--compress
and the[mysqlsh]
optioncompress=
.value
MySQL Shell returns a specific error for such options, specifying the name of the option and the error.
This is something to be aware of during an upgrade to MySQL Shell 8.0.32. Your options files may require editing, or you may need to define an alternate options file for your MySQL Shell installation.
(WL #11206)
As of MySQL 8.0.32, unquoted identifiers starting with a dollar sign ($) are deprecated. As of MySQL Shell 8.0.32, the Upgrade Checker utility checks for the existence of such identifiers and presents a list to the user. Stored routines are also checked. (Bug #34684193)
-
The following changes were made to the
logSql
option:--log-sql=on
no longer filtersSELECT
statements by default.A new filtering option,
logSql.ignorePatternUnsafe
, is added. This option defines a colon-separated list of statement patterns to filter out. Default value is*IDENTIFIED*:*PASSWORD*
.The default value of the filtering option,
logSql.ignorePattern
, is changed from*SELECT*:*SHOW*:*IDENTIFIED*:*PASSWORD*
to*SELECT*:*SHOW*
.-
logSql option parameters were updated:
on
: logs all SQL statements except those defined in thelogSql.ignorePatternUnsafe
andlogSql.ignorePattern
options.all
: new parameter which logs all SQL statements except those defined in thelogSql.ignorePatternUnsafe
.
See SQL Logging Options. (Bug #34249346)
In previous versions, chunking required a defined primary key or unique index on the table. As of this version, tables without primary key or unique index can be chunked based on the number of rows in the table, the average row length, and the
bytesPerChunk
value. (Bug #34195250)-
It is now possible to configure MySQL Shell's AWS S3 support with AWS environment variables. For more information, see S3-compatible Storage.
The command line option
s3Region
was added to the dump and load utilities. This option enables you to define the AWS region from the command line. For more information, see MySQL Shell Utilities. (Bug #108495, Bug #34604763) -
MySQL Shell supports the Microsoft Azure Blob storage service for import, export, dump, and load operations.
See Azure Blob Storage and MySQL Shell Utilities. (WL #15337)
Under certain circumstances, HTTPS read operations could fail with a libcurl-related CURLE_PARTIAL_FILE error. As of this release, the read operation is retried. (Bug #34765385)
It was possible to install MySQL Shell (rpm) on Enterprise Linux 7 running OpenSSL 1.0.1, although OpenSSL 1.0.2 was required. (Bug #34747533)
-
The following errors occurred if MySQL Shell was used to call a stored procedure that produces more than one result:
Using
--column-type-info
only displayed the column metadata for the first result.Using JSON output, such as
--json=raw
, only displayed the first result.
(Bug #34716739)
-
Under certain circumstances, calling
util.importTable()
with a wildcard, on a bucket in Oracle Cloud Infrastructure's Object Storage, failed with an error similar to the following:Util.importTable: Failed to list multipart uploads: ... (404) (MYSQLSH 54404)
(Bug #34679579)
-
The
authentication_oci_client
plugin is now bundled with the MySQL Shell installation, in thelib/mysql/plugins
directory of your MySQL Shell installation on Linux platforms, andlib\mysql\plugins
on Windows platforms.As of this release, the default value of
mysqlPluginDir
is set to the MySQL plugins directory of your MySQL Shell installation. For example, on Linux platforms, this islib/mysql/plugins
. (Bug #34676464) -
Under certain circumstances,
util.debug.collectDiagnostics
failed with the following error:TypeError: object of type 'NoneType' has no len()
(Bug #34674675)
When started from the command line using options with incorrect values, MySQL Shell did not return useful information on which option was in error. As of this release, the error message contains helpful information on which option contains the error. (Bug #34624922)
Loading a dump using a Pre-Authenticated Request (PAR) failed if the filename contained URL-encoded characters. (Bug #34599319)
-
The extra consistency check for the dump utilities with
consistent: true
was too sensitive and reported errors even when no DDL changes were made.As of this release, the consistency check analyzes statements executed during the dump and fails only if DDL-related statements are detected.
A new option is added to the dump utilities,
skipConsistencyChecks: [true | false]
, which, if set to true, skips the additional consistency check and assumes the dump is consistent. (Bug #34556560) -
If
sql_mode
was set toANSI_QUOTES
, the following occurred:-
\status
failed with the following error:Unknown column ' ' in 'field list'
-
USE
schema failed with the following error if the schema's name contained consecutive quotation marks (sample""name
, for example):ERROR: Too many consecutive quote characters: 2
(Bug #34538796, Bug #34709673)
-
Under certain circumstances, in SQL mode, splitting statements with commands such as
\q
could cause MySQL Shell to close unexpectedly. (Bug #34517691)When parsing SQL script, MySQL Shell did not account for the
sql_mode
current session valueNO_BACKSLASH_ESCAPES
and escaped all backslashes. (Bug #34488296)It was not possible to
USE
a schema with a single quote (') in its name. (Bug #34334556)-
MySQL Shell now bundles Python 3.10.8 for platforms where Python 3 is not included or is not at the minimum supported version.
NoteThis is true for all builds except Oracle Linux 7, which bundles Python 3.9.15
(Bug #109240, Bug #34844958)
-
util.loadDump
failed if a table in the dump had more than one FULLTEXT index. The following error was returned:InnoDB presently supports one FULLTEXT index creation at a time
As of this release, if a table contains more than one FULLTEXT index, each additional index is created using separate
ALTER TABLE
statements. (Bug #108991, Bug #34787778) -
loadDump
failed when loading a view which referenced another view whose DEFINER did not yet exist.As of this release, users are loaded after objects and view placeholders are created, but before the placeholders are replaced by the views. (Bug #108975, Bug #34768224)
The
util
global object was not available from the command line if the persisted default mode was set to SQL. (Bug #108839, Bug #34734133)When using
util.exportTable()
to export to an S3 bucket, the AWS-specific information, such as the S3 bucket name, was not written to the suggestedutil.importTable()
call. (Bug #108497, Bug #34657730)-
Attempting to add an instance to a newly-created Replica Cluster, when the Primary Cluster is under very high load, failed with errors related to
super_read_only
.(Bug #108426, Bug #34584939)
-
MySQL Shell Upgrade Checker did not check for orphaned stored routines. That is, stored routines which reference non-existent schemas. As a result, the upgrade procedure could fail.
As of this release, the Upgrade Checker utility checks for such orphaned routines and returns an error if they are found. (Bug #108005, Bug #34433132)
-
Extra underscores were added to property names when querying MySQL 8.0 servers with the MySQL Shell Python API. In MySQL 8.0, the column names are uppercase, but Python naming conventions added an underscore before each uppercase letter, resulting in column names like
row.c_o_l_u_m_n_n_a_m_e
.As of this release, such fields are exposed as properties in both Python and JavaScript, and the column name takes precedence over the naming convention. (Bug #107853, Bug #34379393)
A package year verification check prevented compilation of MySQL Shell, with default options, when close to the end of year. As of this release, MySQL Shell compilation defaults to the current year as package year. (Bug #101905, Bug #32246288)