mysql_upgrade - check and upgrade MySQL tables
examines all tables in all databases for incompatibilities
with the current version of MySQL Server. mysql_upgrade
the system tables so that you can take advantage of new privileges or
capabilities that might have been added.
finds that a table has a possible incompatibility, it
performs a table check and, if problems are found, attempts a table repair. If
the table cannot be repaired, see Section 2.11.3, “Rebuilding or
Repairing Tables or Indexes” for manual table repair strategies.
You should execute mysql_upgrade
each time you upgrade MySQL.
As of MySQL 5.7.5, mysql_upgrade
communicates directly with the MySQL
server, sending it the SQL statements required to perform an upgrade. Before
invokes the mysql
client programs to perform the required operations. For the older
implementation, if you install MySQL from RPM packages on Linux, you must
install the server and client RPMs. mysql_upgrade
is included in the
server RPM but requires the client RPM because the latter includes
. (See Section 2.5.5, “Installing MySQL on
Linux Using RPM Packages from Oracle”.)
As of MySQL 5.7.12, the default --early-plugin-load
value is empty. To
load the keyring_file plugin, you must use an explicit
option with a nonempty value.
In MySQL 5.7.11, the default --early-plugin-load
value was the name of
the keyring_file plugin library file, so that plugin was loaded by default.
InnoDB tablespace encryption requires the keyring_file plugin to be loaded
prior to InnoDB initialization, so this change of default value introduces an
incompatibility for upgrades from 5.7.11 to 5.7.12 or higher. Administrators
who have encrypted InnoDB tablespaces must take explicit action to ensure
continued loading of the keyring_file plugin: Start the server with an
option that names the plugin library file. For
additional information, see Section 6.5.4, “The MySQL
If you upgrade to MySQL 5.7.2 or later from a version older than 5.7.2, a change
to the mysql.user table requires a special sequence of steps to perform an
upgrade using mysql_upgrade
. For details, see Section 18.104.22.168,
“Changes in MySQL 5.7”.
On Windows, you must run mysql_upgrade
with administrator privileges. You
can do this by running a Command Prompt as Administrator and running the
command. Failure to do so may result in the upgrade failing to execute
You should always back up your current MySQL installation before
performing an upgrade. See Section 7.2, “Database Backup
Some upgrade incompatibilities may require special handling before you upgrade
your MySQL installation and run mysql_upgrade
Section 2.11.1, “Upgrading MySQL”, for instructions on
determining whether any such incompatibilities apply to your installation and
how to handle them.
To use mysql_upgrade
, make sure that the server is running. Then invoke
it like this to check and repair tables and to upgrade the system tables:
shell> mysql_upgrade [options]
After running mysql_upgrade
, stop the server and restart it so that any
changes made to the system tables take effect.
If you have multiple MySQL server instances running, invoke mysql_upgrade
with connection parameters appropriate for connecting to the desired server.
For example, with servers running on the local host on parts 3306 through
3308, upgrade each of them by connecting to the appropriate port:
shell> mysql_upgrade --protocol=tcp -P 3306 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3307 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3308 [other_options]
For local host connections on Unix, the --protocol=tcp
option forces a
connection using TCP/IP rather than the Unix socket file.
If you run the server with the disabled_storage_engines system variable set to
disable certain storage engines (for example, MyISAM), mysql_upgrade
might fail with an error like this:
mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled
(Table creation is disallowed).
To handle this, restart the server with disabled_storage_engines disabled. Then
you should be able to run mysql_upgrade
successfully. After that,
restart the server with disabled_storage_engines set to its original value.
processes all tables in all databases, which might take a
long time to complete. Each table is locked and therefore unavailable to other
sessions while it is being processed. Check and repair operations can be
time-consuming, particularly for large tables.
For details about what table-checking operations entail, see the description of
the FOR UPGRADE option of the CHECK TABLE statement (see
Section 22.214.171.124, “CHECK TABLE Syntax”).
All checked and repaired tables are marked with the current MySQL version
number. This ensures that next time you run mysql_upgrade
with the same
version of the server, it can tell whether there is any need to check or
repair the table again.
also saves the MySQL version number in a file named
mysql_upgrade_info in the data directory. This is used to quickly check
whether all tables have been checked for this release so that table-checking
can be skipped. To ignore this file and perform the check regardless, use the
As of MySQL 5.7.2, mysql_upgrade
checks user table rows and, for any row
with an empty plugin column, sets that column to 'mysql_native_password' or
'mysql_old_password' depending on the hash format of the Password column
value. As of MySQL 5.7.5, support for pre-4.1 password hashing and
mysql_old_password was removed, so mysql_upgrade
sets empty plugin
values to 'mysql_native_password' if the credentials use a hash format
compatible with that plugin. Rows with a pre-4.1 password hash must be
upgraded manually. For account upgrade instructions, see
Section 126.96.36.199, “Migrating Away from Pre-4.1 Password Hashing
and the mysql_old_password Plugin”.
does not upgrade the contents of the help tables. For
upgrade instructions, see Section 5.1.14, “Server-Side
As of MySQL 5.7.7, unless invoked with the --skip-sys-schema
installs the sys schema if it is not installed, and
upgrades it to the current version otherwise. mysql_upgrade
error if a sys schema exists but has no version view, on the assumption that
its absence indicates a user-created schema:
Error occurred: A sys schema exists with no sys.version view. If
you have a user created sys schema, this must be renamed for the
upgrade to succeed.
To upgrade in this case, remove or rename the existing sys schema first.
In MySQL 5.7.9 and later, mysql_upgrade
checks for partitioned InnoDB
tables that were created using the generic partitioning handler and attempts
to upgrade them to InnoDB native partitioning (used in MySQL 5.7.6 and later).
(Bug #76734, Bug #20727344) Also beginning with MySQL 5.7.9, you can upgrade
such tables individually in the mysql
client using the ALTER TABLE ...
UPGRADE PARTITIONING SQL statement.
By default, mysql_upgrade
runs as the MySQL root user. If the root
password is expired when you run mysql_upgrade
, you will see a message
that your password is expired and that mysql_upgrade
failed as a
result. To correct this, reset the root password to unexpire it and run
again. First, connect to the server as root:
shell> mysql -u root -p
Enter password: **** <- enter root password here
Reset the password using the appropriate SQL statement. As of MySQL 5.7.6, use
mysql> ALTER USER USER() IDENTIFIED BY 'root-password';
Before 5.7.6, use SET PASSWORD:
mysql> SET PASSWORD = PASSWORD('root-password');
Then exit mysql
and run mysql_upgrade
shell> mysql_upgrade [options]
supports the following options, which can be specified on
the command line or in the [mysql_upgrade] and [client] groups of an option
file. For information about option files used by MySQL programs, see
Section 4.2.6, “Using Option Files”.
Display a short help message and exit.
The path to the MySQL installation directory. This option was removed in MySQL
On a computer having multiple network interfaces, use this option to select
which interface to use for connecting to the MySQL server. This option was
added in MySQL 5.7.5.
The directory where character sets are installed. See Section 10.14,
“Character Set Configuration”.
Compress all information sent between the client and the server if both support
compression. The -C
form of this option was added in MySQL 5.7.5.
The path to the data directory. This option was removed in MySQL 5.7.2.
Write a debugging log. A typical debug_options
string is d:t:o,
. The default is d:t:O,/tmp/mysql_upgrade.trace.
Print some debugging information when the program exits.
Print debugging information and memory and CPU usage statistics when the program
A hint about the client-side authentication plugin to use. See
Section 6.3.9, “Pluggable Authentication”.
as the default character set. See Section 10.14,
“Character Set Configuration”.
Read this option file after the global option file but (on Unix) before the user
option file. If the file does not exist or is otherwise inaccessible, an error
is interpreted relative to the current directory if
given as a relative path name rather than a full path name.
Use only the given option file. If the file does not exist or is otherwise
inaccessible, an error occurs. file_name
is interpreted relative to the
current directory if given as a relative path name rather than a full path
Read not only the usual option groups, but also groups with the usual names and
a suffix of str
. For example, mysql_upgrade
normally reads the
[client] and [mysql_upgrade] groups. If the
option is given, mysql_upgrade
also reads the [client_other] and [mysql_upgrade_other] groups.
Ignore the mysql_upgrade_info file and force execution even if
has already been executed for the current version of
Connect to the MySQL server on the given host.
Read options from the named login path in the .mylogin.cnf login path file. A
“login path” is an option group containing options that specify
which MySQL server to connect to and which account to authenticate as. To
create or modify a login path file, use the mysql_config_editor
utility. See mysql_config_editor
The maximum size of the buffer for client/server communication. The default
value is 24MB. The minimum and maximum values are 4KB and 2GB. This option was
added in MySQL 5.7.5.
The initial size of the buffer for client/server communication. The default
value is 1MB − 1KB. The minimum and maximum values are 4KB and 16MB.
This option was added in MySQL 5.7.5.
Do not read any option files. If program startup fails due to reading unknown
options from an option file, --no-defaults
can be used to prevent them
from being read.
The exception is that the .mylogin.cnf file, if it exists, is read in all cases.
This permits passwords to be specified in a safer way than on the command line
even when --no-defaults
is used. (.mylogin.cnf is created by the
utility. See mysql_config_editor
The password to use when connecting to the server. If you use the short option
form ( -p
), you cannot
have a space between the option and the
password. If you omit the password
value following the
option on the command line,
prompts for one.
Specifying a password on the command line should be considered insecure. See
Section 188.8.131.52, “End-User Guidelines for Password
Security”. You can use an option file to avoid giving the password on
the command line.
On Windows, connect to the server using a named pipe. This option applies only
if the server supports named-pipe connections.
The directory in which to look for plugins. Specify this option if the
option is used to specify an authentication plugin but
does not find it. See Section 6.3.9,
The TCP/IP port number to use for the connection.
Print the program name and all options that it gets from option files.
The connection protocol to use for connecting to the server. It is useful when
the other connection parameters normally would cause a protocol to be used
other than the one you want. For details on the permissible values, see
Section 4.2.2, “Connecting to the MySQL Server”.
On Windows, the shared-memory name to use, for connections made using shared
memory to a local server. The default value is MYSQL. The shared-memory name
The server must be started with the --shared-memory
option to enable
As of MySQL 5.7.7, mysql_upgrade
installs the sys schema if it is not
installed, and upgrades it to the current version otherwise. The
option suppresses this behavior. This option was
added in MySQL 5.7.7.
For connections to localhost, the Unix socket file to use, or, on Windows, the
name of the named pipe to use.
Options that begin with --ssl
specify whether to connect to the server
using SSL and indicate where to find SSL keys and certificates. See
Section 6.4.2, “Command Options for Encrypted
The protocols permitted by the client for encrypted connections. The value is a
comma-separated list containing one or more protocol names. The protocols that
can be named for this option depend on the SSL library used to compile MySQL.
For details, see Section 6.4.6, “Encrypted Connection Protocols
This option was added in MySQL 5.7.10.
The path name of the directory to use for creating temporary files. This option
was removed in MySQL 5.7.5 due to a reimplementation that no longer uses
Upgrade only the system tables, do not upgrade data.
The MySQL user name to use when connecting to the server. The default user name
Verbose mode. Print more information about what the program does.
Check the version of the server to which mysql_upgrade
is connecting to
verify that it is the same as the version for which mysql_upgrade
built. If not, mysql_upgrade
exits. This option is enabled by default;
to disable the check, use --skip-version-check
. This option was added
in MySQL 5.7.2.
By default, binary logging by mysql_upgrade
is disabled. Invoke the
program with --write-binlog
if you want its actions to be written to
the binary log.
When the server is running with global transaction identifiers (GTIDs) enabled
(gtid_mode=ON), do not enable binary logging by mysql_upgrade
Copyright © 1997, 2018, Oracle and/or its affiliates. All rights
This documentation is free software; you can redistribute it and/or modify it
only under the terms of the GNU General Public License as published by the
Free Software Foundation; version 2 of the License.
This documentation is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
You should have received a copy of the GNU General Public License along with the
program; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02110-1301 USA or see
For more information, please refer to the MySQL Reference Manual, which may
already be installed locally and which is also available online at
Oracle Corporation (http://dev.mysql.com/).