MySQL Forums
Forum List  »  Announcements

MySQL Shell 1.0.10 GA has been released
Posted by: Balasubramanian Kandasamy
Date: July 28, 2017 05:28AM

Dear MySQL Users,

A new GA (general availability) version of MySQL Shell
(a component of the MySQL Server) has been made
available: MySQL Shell 1.0.10 GA. The MySQL Shell is provided
under Oracle's dual-license.

MySQL Shell is an interactive JavaScript, Python and SQL console
interface, supporting development and administration for the MySQL
Server. It provides scriptable API that supports the creation and
management of MySQL InnoDB clusters, as well as a modern fluent CRUD
API for the MySQL Document Store.

The AdminAPI provides an integrated solution for high availability and
scalability using InnoDB based MySQL databases, without requiring
advanced MySQL expertise.

The Document Store DevAPI enables developers and DBAs to create
"schema-less" JSON document collections and perform Create, Update,
Read, Delete (CRUD) operations on those collections with little to
no knowledge of the SQL language.

Additionally, MySQL Shell provides partial compatibility with the
mysql command line client by supporting many of the same command line
options. As with the mysql command line, MySQL Shell can also be used
to connect to and send SQL commands to pre-5.7.12 versions of the
MySQL server using the standard MySQL network protocol.

For more information about how to configure and work with an InnoDB cluster

For more information about how to use MySQL Shell and the MySQL Document
Store support see

For full documentation on MySQL Server, MySQL Shell and related topics,

If you want to write applications that use the the CRUD based X DevAPI
use the latest MySQL Connectors for your language of choice. You can
also find documentation about Connectors in the MySQL documentation

For more information about how to download MySQL Shell, see

We welcome and appreciate your feedback and bug reports, see


Changes in MySQL Shell 1.0.10 (2017-07-28, General Availability)

   Security Notes

     * Security Fix: The linked OpenSSL library for MySQL Shell
       Commercial has been updated to version 1.0.2l. Issues
       fixed in the new OpenSSL version are described at
       This change does not affect Oracle-produced MySQL
       Community builds of MySQL Shell, which use the yaSSL
       library instead. (Bug #26284262)

     * Security Fix: Running queries on servers using MySQL 8
       against a table with a text column caused an unexpected

   Functionality Added or Changed

     * The clusterAdminType option of the dba.createCluster()
       was unused and has been removed. (Bug #25585027)

     * The --help message now displays all short-form options.
       The --help message now displays complete information for
       the --json option.'options') now returns usable information
       about mysqlsh options.'checkInstanceState') now reports correct
       information.'addInstance') and'rejoinInstance') now report complete
       help() now reports complete information for all AdminAPI
       and Shell commands. (Bug #24841493, Bug #24910540, Bug
       #24841749, Bug #25701345, Bug #24977542, Bug #25268410,
       Bug #25266846)

     * Calling the modify() or remove() function without a
       parameter caused the function to be executed against the
       whole collection, which could cause unexpected results
       such as deleting all rows in a table. To avoid this and
       make the behavior consistent with update() and delete(),
       a client-side exception is now thrown if the modify() or
       remove() function is called without a parameter. Now, to
       execute the modify() or remove() function against a
       collection call them with an expression that evaluates to
       true, for example remove('true') or modify('true').

   Bugs Fixed

     * 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
       split-brains. 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

     * 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 addInstance() function was failing when run against a
       server using MySQL 8. (Bug #26085799)

     * Executing AdminAPI commands on a server with a version of
       Python lower than 2.7 was failing without the correct
       error message. (Bug #25975317)

     * 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

     * Executing dba.createCluster() on an instance with
       sql_mode=ANSI_QUOTES failed with an error. (Bug
       References: See also: Bug #25990172.

     * The server version is now displayed as part of the
       "Connected to" message. (Bug #25824753)

     * When using MySQL Shell on Windows any files created or
       opened, for example those used during
       dba.createSandboxInstance(), could not be deleted. (Bug

     * Queries that used an expression of the form
       collection.find(identifier IN identifier) caused an
       abnormal mysqlsh exit. (Bug #25754078)

     * If AdminAPI functions were interrupted, for example with
       control-C on Unix, the exit code returned by the process
       was 1 instead of the expected one for terminated
       processes, for example SIGINT. (Bug #25728759)

     * The previous limitation of auto_increment_increment being
       set according to the random 32-bit unsigned integers used
       for the server-id system variable has been resolved. Now,
       when operating in single-primary mode
       auto_increment_increment is set to 1 and
       auto_increment_offset is set to 2. In multi-primary mode
       auto_increment_increment is set to 7 and
       auto_increment_offset is set to 1 plus the server_id
       modulo 7. (Bug #25724564)

     * The randomly generated passwords used by internal users
       were not compatible with instances running the Password
       Validation plugin. (Bug #25714751)

     * The help for dba.configureLocalInstance(instance[,
       options]) has been improved to describe the returned JSON
       object. (Bug #25703028)

     * The options in the MySQL Shell options dictionary are now
       fully documented. (Bug #25701345)

     * 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-determinstic
       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 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)

     * Issuing configureLocalInstance() twice could fail. (Bug

     * 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 non interactive
       use of MySQL Shell correctly verify the rejoinInstances[]
       list does not contain a non reachable instance. (Bug

     * When using dba.deploySandboxInstance() and passing in
       sandboxDir, the specified path must not exceed 89
       characters. (Bug #25485035)

     * shell.connect() did not report an error if an invalid
       argument was used. An ArgumentError is now issued for any
       invalid argument.
       The following mutually exclusive pairs of options are now
       checked, and an error is issued if both are specified:

          + --password and --dbPassword

          + --user and --dbUser

          + --port and --socket
       (Bug #25268670)
       References: See also: Bug #24911173.

     * 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

     * removeInstance() resulted in unexpected behavior in some
       cases, for example when an empty password was passed as
       part of the URI to the instance. (Bug #25111911)

     * The default for prompts has been made more consistent.
       (Bug #25039886)

     * A number of issues with the output of"prompt") have been corrected. (Bug #25026855,
       Bug #25242638, Bug #25676343, Bug #25176769)

     * The usage of the terms global session and active session
       have been made more consistent in the user interface.
       (Bug #24954546)

     * 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)

     * Unsigned data could be incorrectly read from the
       database. (Bug #24912358)

     * MySQL Shell now displays an invalid year as 0000,
       matching the behavior of the MySQL prompt, rather than as
       0. (Bug #24912061)

     * MySQL Shell did not display fractional seconds for values
       in DATETIME columns. (Bug #24911885)

     * The parsing of Unix sockets provided as part of a URI has
       been improved. (Bug #24905066)

     * Creating Classic sessions that connect using Unix sockets
       now uses the correct defaults such as hostname. This
       resolves the previous limitation of using Unix sockets to
       connect to InnoDB cluster instances. See MySQL Shell Connections
       for information on how the defaults are
       applied to socket connections. (Bug #24848763, Bug
       References: See also: Bug #24911068.

     * Some issues with the MySQL Shell command line help output
       were fixed. (Bug #24841749, Bug #24841493, Bug #24910540)

     * If an error occurs now both the error number and error
       text are correctly displayed. (Bug #24816578)

     * URIs were incorrectly parsed in MySQL Shell when
       passwords were hidden. (Bug #24793956)

     * 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

          + 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 _

          + Cannot be longer than 256 characters

          + Cannot be empty
       (Bug #24565242)

     * Using the --dba enableXProtocol option to install X
       Plugin was failing. (Bug #23508428)

     * mysqlsh stopped responding if the \source command was
       given a directory (rather than file) argument. (Bug
       #23097932, Bug #81060)

     * When using cluster.rejoinInstance() any user specified in
       the connection string passed in was being ignored and the
       connection was using the root user. (Bug #85567, Bug

     * On an instance configured as a multi-threaded slave, in
       other words slave_parallel_workers set to greater than 0,
       and with slave_parallel_type=DATABASE,
       dba.checkInstanceConfiguration() was not detecting that
       the instance was not correctly configured for InnoDB
       cluster usage.

     * If removeInstance() failed due to a connection error, an
       error was reported but the instance was incorrectly
       removed from the InnoDB cluster metadata, and remained
       part of the replication group. The fix ensures the
       metadata is correctly updated according to the result of

     * In a situation where a new primary instance was elected,
       adding a new instance to the cluster resulted in an error
       due to a failed connection to the previous primary

     * The functions that modify server variables, such as
       dba.createCluster() and dba.validateInstance() now
       provide more information in interactive mode output and
       log output about server variables which are changed when

     * Deploying instances to paths with directories that
       contained spaces was failing without error. Use double
       backslash to specify such paths, for example
       D:\\Cluster\\foo bar.

     * The Cluster object obtained from functions such as
       dba.createCluster() or dba.getCluster() became unusable
       once the Shell session in which the object was created is
       was connected to a different server. The fix modifies the
       Cluster object so that:

          + The Cluster object holds an internal reference to
            the Session from which it was created or retrieved.

          + AdminAPI functions that modify the Cluster are made
            using the session referenced by the object.

On Behalf of the MySQL/ORACLE RE Team 
Balasubramanian Kandasamy

Options: ReplyQuote

Written By
MySQL Shell 1.0.10 GA has been released
July 28, 2017 05:28AM

Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.