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

4.4.5 mysql_upgrade — 检查和升级 MySQL 表

笔记

从 MySQL 8.0.16 开始,MySQL 服务器执行以前由mysql_upgrade处理的升级任务 (有关详细信息,请参阅 第 2.11.3 节,“MySQL 升级过程升级的内容”)。因此, 不需要mysql_upgrade并且从该版本开始已弃用;希望在未来的 MySQL 版本中将其删除。因为mysql_upgrade不再执行升级任务,它无条件地以状态 0 退出。

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

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

  • 它升级了 Performance Schema INFORMATION_SCHEMA、 和 sysschema。

  • 它检查用户模式。

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

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

警告

在执行升级之前 ,您应该始终备份当前的 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.3.2 节,“CHECK TABLE 语句”

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

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

笔记

mysql_upgrade_info文件已弃用;希望在未来的 MySQL 版本中将其删除。

mysql_upgrade检查 mysql.user系统表行,并且对于任何具有空plugin列的行,'mysql_native_password'如果凭据使用与该插件兼容的哈希格式,则将该列设置为。具有 pre-4.1 密码哈希的行必须手动升级。

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

除非使用该 --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支持以下选项,可以在命令行或 选项文件的组中指定[mysql_upgrade][client]有关 MySQL 程序使用的选项文件的信息,请参阅 第 4.2.2.2 节,“使用选项文件”

表 4.10 mysql_upgrade 选项

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