MySQL Shell 8.0 Release Notes
MySQL Shell now synchronizes the first digit of its version number with the (highest) MySQL server version it supports. This change makes it easy and intuitive to decide which client version to use for which server version. MySQL Shell now uses the same version number as MySQL Server.
MySQL Shell 8.0.3 is the first release to use the new numbering. It is the successor to MySQL Shell 8.0.0.
X DevAPI:
The types of session available have been simplified.
XSession
and NodeSession
have been consolidated into Session
. This has
caused the following changes:
The following command options have been deprecated:
--node
, --sqln
,
--classic
The following command options have been introduced to
replace the deprecated ones: -ma
,
--mysqlx
(-mx
),
--mysql
(-mc
),
--sqlx
The \connect
MySQL Shell command no
longer supports the arguments -c
, and
-n
. Now the \connect
command supports the argument
--mysqlx
(-mx
) for
creating X Protocol connections, and
--mysql
(-mc
) for
creating classic MySQL protocol connections.
(WL #10823)
The --ssl
option has been deprecated, use the
--ssl-mode
option. Now, if you
use the --ssl
option, a deprecation warning is
generated and the --ssl-mode
option is set to either DISABLED
or
REQUIRED
based on the value used with the
--ssl
option.
(Bug #25403945)
With the addition of
WL#10611
and WL#10960
, it was not possible to add or rejoin instances that
belonged to a cluster (or a replication group) because
super_read_only=ON
was being
set by Group Replication when stopping. To ensure that AdminAPI
supports instances running MySQL 8.0.2 and later, the following
functions have been modified:
dba.configureLocalInstance()
dba.createCluster()
dba.rebootClusterFromCompleteOutage()
dba.dropMetadataSchema()
Now, if any of these functions is issued against an instance
which has super_read_only=ON
,
in interactive mode you are given the choice to set
super_read_only=OFF
. To force
the function to set
super_read_only=OFF
in a
script, pass the clearReadOnly
option set to
true
. For example
dba.configureLocalInstance({clearReadOnly:
true}).
For more information see
Instance Configuration in Super Read-only Mode.
(Bug #26422638, WL #11054)
When using the clusterAdmin
option, the
created account did not have all of the correct privileges.
(Bug #26523629)
When using the multiMaster
option with
dba.createCluster()
, the warning displayed in
interactive mode was not being logged.
(Bug #26385634)
When making cluster topology or membership changes, AdminAPI was
not taking into consideration the value of
group_replication_group_name
,
which could lead to incorrect, non-deterministic results in
scenarios such as a split brain. Now, the following commands
validate the InnoDB cluster Metadata and the corresponding
instance's
group_replication_group_name
value:
dba.getCluster()
Cluster.rejoinInstance()
Cluster.forceQuorumUsingPartitionOf()
If the values of group_replication_group_name
do not match, the commands abort with an error.
dba.rebootClusterFromCompleteOutage()
was
also updated to ensure that the
group_replication_group_name
variable has not been changed before rejoining the instance.
(Bug #26159339)
AdminAPI now always uses the active user value for the current mysqlsh session, whether the value was explicitly specified by the user or is the result of an implicit default used by mysqlsh. (Bug #26132527)
The checks performed by the AdminAPI upon issuing
dba.rebootClusterFromCompleteOutage()
were
more strict than those required by Group Replication. Now, the
AdminAPI considers tables with a Primary Key Equivalent (such as
a Non Null Unique Key) as compatible, matching the current
requirement for Group Replication.
(Bug #25974689)
The randomly generated passwords used by internal users were not compatible with instances running the Password Validation plugin. (Bug #25714751)
It is no longer possible to use the
adoptFromGr
option with the
multiMaster
option. When adopting an existing
group to an InnoDB Cluster, the group is adopted based on
whether it is running as multi-primary or single-primary.
Therefore there is no use for the multiMaster
option when adapting a group.
(Bug #25664700)
Issuing configureLocalInstance()
when using a
URI that contained a user without the correct privileges
resulted in an incorrect new user being created. Now, if the
user in configureLocalInstance()
URI does not
have enough privileges to grant all the necessary privileges for
the new user chosen during the interactive wizard configuration
the user is not created.
(Bug #25614855)
Issuing Cluster.rescan()
resulted in
non-deterministic behavior which could produce incorrect JSON
output, showing an instance that was already part of the cluster
as belonging to the
newlyDiscoveredInstances[]
list and to the
unavailableInstances
[] list. This also
resulted in MySQL Shell prompting to add or remove the instance
from the cluster.
(Bug #25534693)
AdminAPI functions now accept the standard connection parameters
as used by shell.connect
. New validations
have been added for when
require_secure_transport
is
ON
, now it is not possible to create a
cluster with memberSslMode:DISABLED
or to add
an instance with
require_secure_transport=ON
to
a cluster where memberSslMode:DISABLED
.
(Bug #25532298)
The parsing of account names, for example when passing the
clusterAdmin
option to
dba.configureLocalInstance()
has been
improved.
(Bug #25528695)
The file permissions of option files created by AdminAPI did not match those of options files created by MySQL install. (Bug #25526248)
Issuing configureLocalInstance()
twice could
fail.
(Bug #25519190)
When passing the rejoinInstances[]
option to
dba.rebootClusterFromCompleteOutage()
, if no
rejoinInstances[]
option was specified then
members were being incorrectly handled during the rebuild. Now,
instances that are eligible to be added to the
rejoinInstances[]
list but that are specified
in the removeInstances[]
list are skipped by
the interactive wizard that tries to automatically build a
rejoinInstances[]
list if one was not
provided. This fix also ensures that both interactive and
noninteractive use of MySQL Shell correctly verify the
rejoinInstances[]
list does not contain a
unreachable instance.
(Bug #25516390)
The error messages issued when the SSL mode used by the cluster
and the one specified when issuing
addInstance()
command do not match have been
improved.
(Bug #25495056)
When creating a sandbox instance using the
dba.deploySandboxInstance()
function in
MySQL Shell, pressing Ctrl+C at the prompt for
a MySQL root password for the instance did not cancel the
deployment.
(Bug #25316811)
Issuing removeInstance
() on the last member
of a cluster, and particularly the seed member, was resulting in
a cluster that could not be dissolved. Now, issuing
removeInstance()
on the last member of a
cluster results in an error, and you must use
dissolve()
on that instance to ensure the
cluster is correctly dissolved.
(Bug #25226130)
The output of cluster.status()
now includes
the ssl
parameter, which shows whether secure
connections are required by the cluster or disabled.
(Bug #25226117)
Attempting to create a multi-primary cluster in interactive mode
failed unless you passed in the {force: true}
option. Now when you confirm that you understand the impact of
using multi-primary mode the command correctly creates a
multi-primary cluster.
(Bug #25034951)
The removeInstance()
was not working on
stopped instances and it was not possible to remove an
unavailable instance from the cluster. The fix adds a new option
force
to the removeInstance() command to
enable you to remove instances from the metadata that are
permanently not available, avoiding obsolete data from being
kept in the metadata of the cluster. In addition the error
message provided when not using the force option has been
improved and the online help for the
removeInstance()
was also updated
accordingly.
(Bug #24916064)
The error messages generated by issuing
dba.deployLocalInstance()
against an
unsuitable or incompatible instance have been improved.
(Bug #24598272)
The dba.createCluster()
,
dba.getCluster()
, and
dba.rebootClusterFromCompleteOutage()
functions have been updated to validate the cluster name, using
the following rules:
Name must start with a letter or the _
character
Name can only contain alphanumeric characters and the
_
character
Cannot be longer than 40 characters
Cannot be empty
The Cluster.addInstance()
function has been
updated to validate the label used on an instance in the
cluster, using the following rules:
Label can only contain alphanumerics or the
_
character
Cannot be longer than 256 characters
Cannot be empty
(Bug #24565242)
MySQL Shell now handles user interrupts, such as SIGINT,
correctly. For example on Linux pressing Control-C when
MySQL Shell is not executing anything exits the application. In
SQL mode, interruption sends a
KILL QUERY
statement to the active MySQL Shell session from a new
temporary session, resulting in the server interrupting the
query and returning an error (or in an early return with no
error in some cases, like the sleep()
function). In JavaScript or Python scripting modes, how
interruption behaves depends on the specific function being
executed. If what is being executed is language code (such as a
while loop and other normal script code), an exception is
generated in the active language, which causes the code to stop
executing. The exception may be caught by the script, but if
not, the execution control returns to MySQL Shell.
(Bug #24757361, WL #10568)
MySQL Shell now includes a history function that stores the code which you issue. The history can be saved, searched, and filtered. A new mechanism to customize the MySQL Shell prompt has been added. Information such as the current mode (SQL, JavaScript, or Python), session information (host, URI, port and so on), the current active schema and others can be included in the prompt through variables. The customization information is self-contained in JSON theme files, which can be shared between users. MySQL Shell now supports unicode if the terminal used to run MySQL Shell supports it. Similarly if the terminal supports color, MySQL Shell can be configured to use colors in the theme. (WL #10446)
The connection options passed to MySQL Shell, such as
sslMode
and so on, have been changed to use
dashes and no longer be case sensitive. The options are now:
sslMode
is now
ssl-mode
sslCa
is now ssl-ca
sslCaPath
is now
ssl-capath
sslCert
is now
ssl-cert
sslKey
is now ssl-key
sslCrl
is now ssl-crl
sslCrlPath
is now
ssl-crlpath
sslCiphers
is now
ssl-ciphers
sslTlsVersion
is now
tls-version
authMethod
is now
auth-method
(WL #10912)
The interpretation of the document_path
field
in operations such as modify()
has been
changed. Now, when the document_path
is not
set, operations apply to the whole document. All operations
always preserve a document's _id
field.
(WL #10682)
X DevAPI: Unsigned data could be incorrectly read from the database. (Bug #24912358)
In MySQL Shell, the
Schema.getCollectionAsTable()
function and
the select()
method could not be used in the
same Python statement.
(Bug #26552804)
MySQL Shell returned some elements of DATE and DATETIME values incorrectly, including month values and fractional seconds. (Bug #26428636)
The month was incorrectly incremented on insertion of a timestamp in a table using MySQL Shell. (Bug #26423177)
For columns with the ZEROFILL
attribute,
NULL
was also returned padded with zeroes.
(Bug #26406214)
The output of the MySQL Shell \status
command was enhanced with additional information.
(Bug #26403909)
The MySQL Shell help for the \connect
command indicated that a connection name could be used instead
of a URI string, which was incorrect.
(Bug #26392676)
The MySQL Shell command \use
did not attempt
to reconnect if the connection to the global session was lost.
(Bug #25974014, Bug #86118)
The short form -? can now be used as an alias for the --help command-line option in MySQL Shell. (Bug #25813228)
The MySQL Shell command history displayed the commands that
were used to automatically import the mysql
and mysqlx
API modules when MySQL Shell
started.
(Bug #25739185)
The MySQL Shell command history displayed the contents of
scripts that were run using the \source
MySQL Shell command.
(Bug #25676495)
The mysqlx.getNodeSession()
function in
MySQL Shell now returns an error if an unrecognized connection
option is provided.
(Bug #25552033)
MySQL Shell did not exit gracefully when the user did not have a valid and accessible home directory. (Bug #25298480)
MySQL Shell created a logger but did not deallocate it on exiting the shell. (Bug #25238576)
MySQL Shell could hang when Ctrl+C was used to exit the shell. (Bug #25180850, Bug #84022)
The parsing of Unix sockets provided as part of a URI has been improved. (Bug #24905066)
MySQL Shell now accepts Unicode characters as input. (Bug #23151666, Bug #81176)