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模式中的系统表,以便您可以利用可能已添加的新特权或功能。

  • 它升级了性能模式。

  • 它检查用户模式。

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

如果在 Linux 上从 RPM 包安装 MySQL,则必须安装服务器和客户端 RPM。 mysql_upgrade包含在服务器 RPM 中,但需要客户端 RPM,因为后者包含 mysqlcheck。(参见 第 2.5.5 节,“使用来自 Oracle 的 RPM 包在 Linux 上安装 MySQL”。)

笔记

在 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

$> mysql -u root -p
Enter password: ****  <- enter root password here
mysql> SET PASSWORD = PASSWORD('root-password');
mysql> quit

$> mysql_upgrade [options]

mysql_upgrade执行以下命令来检查和修复表以及升级系统表:

mysqlcheck --no-defaults --databases
 --fix-db-names --fix-table-names mysql
mysqlcheck --no-defaults --check-upgrade --databases
 --auto-repair mysql
mysql < fix_priv_tables
mysqlcheck --no-defaults --all-databases
 --skip-database=mysql --fix-db-names --fix-table-names
mysqlcheck --no-defaults --check-upgrade --all-databases
 --skip-database=mysql --auto-repair

上述命令注意事项:

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

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

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

mysql_upgrade支持以下选项,可以在命令行或 选项文件的组中指定[mysql_upgrade][client]无法识别的选项被传递给 mysqlcheck。有关选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

表 4.9 mysql_upgrade 选项

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