MySQL Shell 8.0 Release Notes
The
command has been improved, with the following changes:
Cluster
.removeInstance()
A new interactive option has been added to enable or disable interactive mode for the command. The output displayed in interactive mode has been improved, displaying more useful information. In interactive mode, you are prompted to continue with the removal of the instance (or not) in case it is not reachable.
The operation now ensures that the instance is removed from
the metadata of all the cluster members and itself. This
only applies to ONLINE
members.
A new global option dba.gtidWaitTimeout
is available to define the timeout to wait for transactions
(GTIDs) to be applied when required by AdminAPI commands. If
the timeout value defined by
dba.gtidWaitTimeout
is reached when
waiting for the cluster transactions to be applied for
and cluster
.removeInstance()force: false
(or not defined) then an
error is issued and the operation is canceled. When
force: true
then the operation continues
and does not generate an error.
(WL #11862)
References: See also: Bug #27817894.
When using the ipWhitelist
to define which
servers could access the cluster, the internal user accounts
were not matching the whitelist. Now AdminAPI applies the same
filtering logic from ipWhitelist
for the
internal administrative accounts.
(WL #10587)
References: See also: Bug #26140094, Bug #28165891.
The cluster.forceQuorumUsingPartitionOf()
operation sets the
group_replication_force_members
variable on the target instance to force a new group membership
and restore the quorum, but it did not reset the value of the
variable at the end of the process. Consequently, if Group
Replication later needed to be restarted on the target instance
it failed because the
group_replication_force_members
variable was still set. Now, the
group_replication_force_members
variable is reset to an empty string at the end of the
cluster.forceQuorumUsingPartitionOf()
operation.
(Bug #28064621)
Some messages displayed by MySQL Shell were showing a MySQL server version that does not exist. (Bug #27924694)
It was possible to use AdminAPI operations on server instances running an incompatible version of MySQL. (Bug #27765769)
The setting of the bind_address
variable is no longer a requirement.
(Bug #27765484)
When creating a cluster or adding an instance, if the
localAddress
option is not specified, the
port used for
group_replication_local_address
is automatically assigned with the value:
port
* 10 + 1. However, if the
resulting port determined by the previous rule was already in
use then a random port was generated and used. Now MySQL Shell
checks that the
group_replication_local_address
port is available, and fails if it is not.
(Bug #27758041)
The dbPassword
option is no longer valid in
the options dictionary of all AdminAPI commands.
(Bug #27745106)
It was possible to use the
dba.forceQuorumUsingPartition()
operation on
a cluster which had not lost quorum.
(Bug #27508698)
The help message for
dba.rebootClusterFromCompleteOutage()
operation was incorrectly suggesting to use
dba.forceQuorumUsingPartition()
.
(Bug #27508627)
The dba.rebootClusterFromCompleteOutage()
operation was creating a new user on the target instances, which
could lead to the existence of an increasing number of users.
The fix ensures that these users are not created by the
dba.rebootClusterFromCompleteOutage()
operation.
(Bug #27344040)
Now when you issue dba.getCluster()
and
retrieve a cluster without quorum a warning is issued in
addition to the log message.
(Bug #27148943)
The memberSslMode
option could be used with
and
cluster
.addInstance()
operations but if you specified a different value than the one
used at cluster creation an error was thrown. Now set the SSL
mode at the cluster level only, in other words when issuing
cluster
.rejoinInstance()dba.createCluster()
. The
memberSslMode
option has been removed from
and
cluster
.addInstance()
(Bug #27062122)cluster
.rejoinInstance().
When you issued dba.configureLocalInsance()
on an instance, it configured the
disabled_storage_engines
variable with the MyISAM
,
BLACKHOLE
,
FEDERATED
,
CSV
, and
ARCHIVE
storage engines to ensure
that the storage engine was set to
InnoDB
, as required by Group
Replication. The change to this option was not being reported
correctly by AdminAPI, and hence the required restart after
changing the
disabled_storage_engines
variable was not clear. This change was deemed a recommendation,
rather than a requirement, hence
dba.configureLocalInsance()
no longer
configures
disabled_storage_engines
.
(Bug #26754410)
Creating a cluster using an account which was missing the global
grant option failed with an ambiguous error message, even though
dba.checkInstanceConfiguration()
did not
return any errors. Now when you create a cluster, the account
being used to administer the cluster is checked to ensure that
it has the global grant option.
(Bug #25966235)
MySQL Shell is able to automatically reconnect global session when running in the interactive mode, but AdminAPI methods lacked this feature. This resulted in you having to reconnect manually. Now, the AdminAPI methods which utilize the global session object have been improved in order to detect an interrupted session and trigger the reconnection mechanism. The Cluster object uses its own internal session instance, which does not support automatic reconnection. If connection to the cluster is lost, you need to manually recreate the Cluster object. (Bug #24702489)
In the event of a whole cluster stopping unexpectedly, upon
reboot the memberSslMode
was not preserved.
In a cluster where SSL had been disabled, upon issuing
dba.rebootClusterFromCompleteOutage()
this
could prevent instances from rejoining the cluster.
(Bug #90793, Bug #27986413)
Important Change: An RPM package for installing ARM 64-bit (aarch64) binaries of MySQL Shell on Oracle Linux 7 is now available in the MySQL Yum Repository and for direct download.
Known Limitation for this ARM release: You must enable the Oracle Linux 7 Software Collections Repository (ol7_software_collections) to install this package, and must also adjust the libstdc++7 path. See Yum's Platform Specific Notes for additional details.
X DevAPI: In order to be compliant with the X DevAPI specification, the following changes have been made:
Collection.modify(condition).arrayDelete()
and Collection.modify(condition).merge()
have been deprecated.
Collection.find().limit(x).skip(y)
has
been renamed to
Collection.find().limit(x).offset(y)
.
Collection.find().limit(x).skip(y)
has
been deprecated.
Collection.find().limit(x).offset(y)
has
been implemented.
BaseResult.getAffectedItemsCount()
has
been implemented.
BaseResult.getWarningCount()
has been
deprecated.
BaseResult.getWarningsCount()
has been
implemented.
Result.getAffectedItemCount()
has been
deprecated.
SqlResult.getAffectedRowCount()
has been
deprecated.
SqlResult.nextDataSet()
has been renamed
to SqlResult.nextResult()
.
SqlResult.nextDataSet()
has been
deprecated.
SqlResult.nextResult()
has been
implemented.
(WL #11920)
MySQL Shell now enables you to store user credentials in an operating system specific secret store. You can then enter a MySQL user's password during connection and store it for future connections. Currently the following secret stores are supported:
MySQL login-path
MacOS keychain
Windows API
(Bug #23304789, Bug #81484, WL #11745)
The way you access the online Shell help has been standardized.
Use the \help
command to search
the help. The scope of the command has been increased to support
retrieving help for the following categories:
pattern
Class and function help for the Admin API, X DevAPI and
Shell API. Previously, to retrieve help for API objects, you
had to create an instance of the object and use the
method.
object
.help()
SQL syntax help, provided that a global session object exists.
Wildcards can now be used to search for help. A number of additional bugs relating to incomplete help information have also been fixed. (Bug #23255291, Bug #81277, Bug #24963435, Bug #25732663, Bug #85481, Bug #25739522, Bug #85511, Bug #25739664, Bug #85514, Bug #26393155, Bug #86950, Bug #24943074, Bug #26429399, Bug #87037, Bug #27870491, Bug #90455, Bug #27870503, Bug #90456, Bug #27875150, Bug #90474, Bug #24948933, Bug #83527, WL #11219)
The util.checkForServerUpgrade()
operation
has an additional outputFormat
parameter that
you can specify when running the utility. The utility can now
generate output in two formats:
TEXT format, which is the default. This option provides output suitable for humans, as previously returned by the utility.
JSON format. This option provides output suitable for machines, which can be parsed and processed for various further use cases.
(WL #11892)
The sample prompt theme files for MySQL Shell were deployed to
an incorrect location on the Windows platform, in the root
install folder. The files are now correctly deployed in the
\share\mysqlsh\prompt
sub-folder.
(Bug #28188761)
The upgrade checker utility provided by MySQL Shell (the
util.checkForServerUpgrade()
operation) has
been enhanced with a summary count of the errors, warnings, and
information level issues found by the tool, and with links to
documentation with further information where this is available.
(Bug #28171814)
When upgrading from version 1.0.11 to version 8.0.11 of MySQL Shell on Linux, the upgrade failed if the original package was the community edition and the new package was the commercial edition, or vice versa. Upgrading from one edition to the other edition is now enabled. (Bug #28037407)
The util.checkForServerUpgrade()
operation
can now use either an X Protocol connection or a
classic MySQL protocol connection.
(Bug #28027707)
The checkForServerUpgrade()
operation to
verify upgrade prerequisites included an unnecessary check
relating to ZEROFILL
and display length
attributes in columns. The check has now been removed.
(Bug #27927641, Bug #90634)
For sessions using the classic MySQL protocol, if the
session_track_gtids
system
variable is set on the server to capture and return GTIDs to the
client, MySQL Shell now displays the GTIDs for successfully
committed transactions. The returned GTID values are also now
recorded in tracing information.
(Bug #27871148)
When the defaultMode
MySQL Shell
configuration option had been set with the
--persist
option, batch code execution from a
file was always attempted using the specified default language,
even if the file extension indicated a different supported
language. Now when a file is loaded for batch processing using
the --file
or -f
option, files
with the extensions .js
,
.py
, and .sql
are
processed in the appropriate language mode, regardless of the
set default language.
(Bug #27861407)
The methods provided in the shell.options
configuration interface to set and save persistent option values
used underscores in JavaScript as well as in Python mode. The
methods have now been changed to
shell.options.setPersist()
and
shell.options.unsetPersist()
in JavaScript to
follow the appropriate naming convention.
(Bug #27861141)
When executing a SQL script using MySQL Shell, delimiters ( such as the default semi-colon character) present in multi-line comments caused execution to fail. Delimiters are now ignored inside multi-line comments. (Bug #27841719)
MySQL Shell returned an error when querying timestamp values that were zero, because a zero value for the month or day in a date was not accepted. Zero timestamp values can now be used without producing an error. (Bug #27833822, Bug #90355)
The shell.getSession()
function returns a
reference to the session
global object
representing the already established connection between
MySQL Shell and a MySQL server, known as a global session.
MySQL Shell now gracefully handles the situation where the
function is called when no global session has yet been
established.
(Bug #27809310)
The MySQL Shell application icon on Microsoft Windows was not being displayed for the MySQL Shell 8.0 GA release, due to an incorrect association introduced for the icon during code refactoring. The icon is now displayed correctly. (Bug #27746532)
The \status
(\s
) command
in MySQL Shell now displays full information about the version
and build of the connected MySQL server.
(Bug #27740420)
The check for reserved keywords carried out by the
util.checkForServerUpgrade()
operation was
updated to match the list of reserved keywords for the MySQL 8.0
GA release.
(Bug #27724201)
When handling escape sequences, MySQL Shell now identifies and skips over SQL comments and string literals within quotation marks. (Bug #27665229)
Python's mapping type has been added to MySQL Shell, so that dictionary syntax can be used to interact with data in Python mode. (Bug #27614110)
When a file was redirected to standard input for execution in MySQL Shell, on Unix, the first part of the file was taken as being the password. The password prompt now looks for user input first before resorting to standard input. (Bug #27572380)
If Ctrl+C was entered or an unexpected error occurred at a password prompt in MySQL Shell, the terminal state was not restored correctly afterwards. (Bug #27379834)