Documentation Home
MySQL 8.0 参考手册  / 第 4 章 MySQL 程序  / 4.4 安装相关程序  /  4.4.7 mysql_upgrade — 检查和升级 MySQL 表

4.4.7 mysql_upgrade — 检查和升级 MySQL 表

每次升级 MySQL 时,都应该执行 mysql_upgrade,它会查找与升级后的 MySQL 服务器的不兼容性:

  • 它升级 mysql模式中的系统表,以便您可以利用可能已添加的新特权或功能。

  • 它升级了性能架构和 sys架构。

  • 它检查用户模式。

如果mysql_upgrade发现一个表可能不兼容,它会执行表检查,如果发现问题,则尝试修复表。如果表无法修复,请参阅第 2.11.12 节“重建或修复表或索引”以了解手动表修复策略。

mysql_upgrade直接与 MySQL 服务器通信,向其发送执行升级所需的 SQL 语句。

重要的

在 MySQL 5.7.11 中,默认 --early-plugin-load值为keyring_file插件库文件的名称,导致默认加载该插件。在 MySQL 5.7.12 及更高版本中,默认 --early-plugin-load值为空;要加载keyring_file插件,您必须明确指定带有命名 keyring_file插件库文件的值的选项。

InnoDBInnoDB表空间加密要求在初始化之前加载要使用的密钥环插件 ,因此默认--early-plugin-load 值的这种更改引入了从 5.7.11 升级到 5.7.12 或更高版本的不兼容性。拥有加密 InnoDB表空间的管理员必须采取明确的措施以确保继续加载密钥环插件:使用 --early-plugin-load命名插件库文件的选项启动服务器。有关其他信息,请参阅 第 6.4.4.1 节,“Keyring 插件安装”

重要的

如果从早于 5.7.2 的版本升级到 MySQL 5.7.2 或更高版本,对mysql.user 表的更改需要一系列特殊的步骤才能使用mysql_upgrade执行升级。有关详细信息,请参阅第 2.11.3 节,“MySQL 5.7 中的更改”

笔记

在 Windows 上,您必须以管理员权限运行mysql_upgrade 。您可以通过以管理员身份运行命令提示符并运行命令来执行此操作。否则可能会导致升级无法正确执行。

警告

在执行升级之前 ,您应该始终备份当前的 MySQL 安装 。请参阅 第 7.2 节,“数据库备份方法”

在升级 MySQL 安装和运行mysql_upgrade之前, 一些升级不兼容性可能需要特殊处理 。请参阅 第 2.11 节,“升级 MySQL”,以获取有关确定任何此类不兼容性是否适用于您的安装以及如何处理它们的说明。

像这样使用mysql_upgrade

  1. 确保服务器正在运行。

  2. 调用mysql_upgrade升级schema中的系统表,mysql检查修复其他schema中的表:

    mysql_upgrade [options]
  3. 停止服务器并重新启动它以使任何系统表更改生效。

如果您有多个 MySQL 服务器实例要升级, 请使用适合连接到每个所需服务器的连接参数调用mysql_upgrade 。例如,对于在 3306 到 3308 部分的本地主机上运行的服务器,通过连接到适当的端口来升级它们中的每一个:

mysql_upgrade --protocol=tcp -P 3306 [other_options]
mysql_upgrade --protocol=tcp -P 3307 [other_options]
mysql_upgrade --protocol=tcp -P 3308 [other_options]

对于 Unix 上的本地主机连接,该 --protocol=tcp选项强制使用 TCP/IP 而不是 Unix 套接字文件进行连接。

默认情况下,mysql_upgrade作为 MySQL root用户运行。如果在root 运行 mysql_upgrade时密码已过期,它会显示一条消息,告诉您密码已过期,因此 mysql_upgrade失败。要更正此问题,请重置root密码以解除它的过期并再次运行mysql_upgrade。首先,连接到服务器root

$> mysql -u root -p
Enter password: ****  <- enter root password here

使用以下方法重置密码ALTER USER

mysql> ALTER USER USER() IDENTIFIED BY 'root-password';

然后退出mysql,再次运行 mysql_upgrade

$> mysql_upgrade [options]
笔记

如果您在 disabled_storage_engines 系统变量设置为禁用某些存储引擎(例如,MyISAM)的情况下运行服务器, mysql_upgrade可能会失败并出现如下错误:

mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled
(Table creation is disallowed).

要处理此问题,请重新启动已 disabled_storage_engines 禁用的服务器。然后你应该能够成功运行 mysql_upgrade。之后,重新启动服务器 disabled_storage_engines并将其设置为原始值。

除非使用该 --upgrade-system-tables 选项调用,否则mysql_upgrade 会根据需要处理所有用户模式中的所有表。表检查可能需要很长时间才能完成。每个表都被锁定,因此在处理时对其他会话不可用。检查和修复操作可能很耗时,尤其是对于大型表。表检查使用语句的FOR UPGRADE选项。CHECK TABLE有关此选项的详细信息,请参阅 第 13.7.2.2 节,“CHECK TABLE 语句”

mysql_upgrade用当前 MySQL 版本号标记所有检查和修复的表。这确保下次您使用相同版本的服务器运行mysql_upgrade时,可以确定是否需要再次检查或修复给定的表。

mysql_upgrade将 MySQL 版本号保存在mysql_upgrade_info数据目录中命名的文件中。这用于快速检查是否已检查此版本的所有表,以便可以跳过表检查。要忽略此文件并执行检查,请使用该--force选项。

mysql_upgrade检查 mysql.user系统表行,对于任何具有空plugin列的行,将该列设置为'mysql_native_password''mysql_old_password'取决于Password列值的散列格式。

支持 pre-4.1 密码散列并 mysql_old_password已被删除,因此 如果凭证使用与该插件兼容的散列格式, mysql_upgrade将设置空 plugin值 。'mysql_native_password'具有 pre-4.1 密码哈希的行必须手动升级。有关帐户升级说明,请参阅第 6.4.1.3 节,“从 4.1 版之前的密码哈希和 mysql_old_password 插件迁移”

mysql_upgrade不升级时区表或帮助表的内容。有关升级说明,请参阅第 5.1.13 节,“MySQL 服务器时区支持”第 5.1.14 节,“服务器端帮助支持”

除非使用该 --skip-sys-schema选项 调用,否则mysql_upgrade会安装 sys模式(如果未安装),否则将其升级到当前版本。sys如果模式存在但没有 视图,则会发生错误version,假设它的不存在表示用户创建的模式:

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.

要在这种情况下升级,请先删除或重命名现有 sys架构。

mysql_upgrade检查 InnoDB使用通用分区处理程序创建的分区表并尝试将它们升级到 InnoDB本机分区。(错误号 76734、错误号 20727344)您可以 使用 SQL 语句 在mysql客户端中单独升级这些表。ALTER TABLE ... UPGRADE PARTITIONING

mysql_upgrade支持以下选项,可以在命令行或 选项文件的组中指定[mysql_upgrade][client]有关 MySQL 程序使用的选项文件的信息,请参阅 第 4.2.2.2 节,“使用选项文件”

表 4.11 mysql_upgrade 选项

选项名称 描述 介绍
--绑定地址 使用指定的网络接口连接到 MySQL 服务器
--字符集目录 安装字符集的目录
- 压缩 压缩客户端和服务器之间发送的所有信息
--调试 写调试日志
--调试检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息、内存和 CPU 统计信息
--default-auth 要使用的身份验证插件
--默认字符集 指定默认字符集
--defaults-extra-file 除了通常的选项文件外,还读取命名的选项文件
--defaults-文件 只读命名选项文件
--defaults-group-suffix 选项组后缀值
- 力量 即使已经为当前 MySQL 版本执行了 mysql_upgrade,也强制执行
- 帮助 显示帮助信息并退出
- 主持人 MySQL 服务器所在的主机
--登录路径 从 .mylogin.cnf 读取登录路径选项
--最大允许数据包 发送到服务器或从服务器接收的最大数据包长度
--net-buffer-length TCP/IP 和套接字通信的缓冲区大小
--no-defaults 不读取选项文件
- 密码 连接到服务器时使用的密码
- 管道 使用命名管道连接到服务器(仅限 Windows)
--插件目录 安装插件的目录
- 港口 用于连接的 TCP/IP 端口号
--print-defaults 打印默认选项
- 协议 使用的传输协议
--shared-memory-base-name 共享内存连接的共享内存名称(仅限 Windows)
--skip-sys-schema 不要安装或升级 sys 架构
- 插座 要使用的 Unix 套接字文件或 Windows 命名管道
--ssl 启用连接加密
--ssl-ca 包含可信 SSL 证书颁发机构列表的文件
--ssl-capath 包含受信任的 SSL 证书颁发机构证书文件的目录
--ssl证书 包含 X.509 证书的文件
--ssl密码 连接加密的允许密码
--ssl-crl 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-密钥 包含 X.509 密钥的文件
--ssl模式 连接到服务器的所需安全状态 5.7.11
--ssl-verify-server-cert 根据服务器证书公用名身份验证主机名
--tls-版本 加密连接允许的 TLS 协议 5.7.10
--升级系统表 只更新系统表,不更新用户模式
- 用户 连接到服务器时使用的 MySQL 用户名
--冗长 详细模式
--版本检查 检查正确的服务器版本
--write-binlog 将所有语句写入二进制日志