Mysql upgrade - 检查并升级MySQL表

来自泡泡学习笔记
BrainBs讨论 | 贡献2023年12月13日 (三) 09:29的版本 (创建页面,内容为“ <blockquote>注意 从MySQL 8.0.16开始,MySQL服务器不再执行由mysql_upgrade处理的升级任务。因此,自该版本起,mysql_upgrade不再需要,并在该版本中被弃用;预计在未来的MySQL版本中将其移除。因为mysql_upgrade不再执行升级任务,所以它无条件地以状态码0退出。 </blockquote> 每次升级MySQL时,您都应该执行mysql_upgrade,它会查找与升级后的MySQL服务器的不兼容之处…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

注意

从MySQL 8.0.16开始,MySQL服务器不再执行由mysql_upgrade处理的升级任务。因此,自该版本起,mysql_upgrade不再需要,并在该版本中被弃用;预计在未来的MySQL版本中将其移除。因为mysql_upgrade不再执行升级任务,所以它无条件地以状态码0退出。

每次升级MySQL时,您都应该执行mysql_upgrade,它会查找与升级后的MySQL服务器的不兼容之处: * 它升级mysql模式中的系统表,以便您可以利用可能添加的新权限或功能。 * 它升级Performance Schema、INFORMATION_SCHEMA和sys模式。 * 它检查用户模式。

如果mysql_upgrade发现一个表可能存在不兼容性,它会执行表检查,如果发现问题,尝试进行表修复。


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

警告

在执行升级之前,您应该始终备份当前的MySQL安装。

一些升级不兼容性可能需要在升级MySQL安装并运行mysql_upgrade之前进行特殊处理。


使用mysql_upgrade的方式如下:

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

  2. 调用mysql_upgrade来升级mysql模式中的系统表并检查和修复其他模式中的表:

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


如果您有多个要升级的MySQL服务器实例,使用适当的连接参数连接到每个所需服务器的实例。例如,对于在本地主机上运行的部分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根用户身份运行。如果在运行mysql_upgrade时根密码已过期,它将显示一条消息,指出您的密码已过期,并且mysql_upgrade失败。要解决此问题,重置根密码以使其未过期,然后再次运行mysql_upgrade。首先,以root身份连接到服务器:

$> mysql -u root -p
输入密码:****  <- 在这里输入root密码
使用ALTER USER重置密码:
mysql> ALTER USER USER() IDENTIFIED BY 'root-password';


然后退出mysql并再次运行mysql_upgrade:

$> mysql_upgrade [options]

注意

如果您以禁用某些存储引擎(例如MyISAM)的disabled_storage_engines系统变量设置为禁用的存储引擎运行服务器,mysql_upgrade可能会因错误而失败,如下所示:

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

要处理此问题,以禁用的存储引擎为禁用状态重新启动服务器。然后,您应该能够成功运行mysql_upgrade。之后,以disabled_storage_engines设置为其原始值重新启动服务器。

除非使用–upgrade-system-tables选项调用,否则mysql_upgrade将处理所有用户模式中的所有表。表检查可能需要很长时间才能完成。每个表在处理过程中都被锁定,因此对其他会话不可用。检查和修复操作可能需要很长时间,特别是对于大型表。表检查使用CHECK TABLE语句的FOR UPGRADE选项。


mysql_upgrade将所有检查和修复的表标记为当前MySQL版本号。这确保了下次使用相同版本的服务器运行mysql_upgrade时,可以确定是否需要再次检查或修复给定的表。 mysql_upgrade将MySQL版本号保存在名为mysql_upgrade_info的数据目录中的文件中。这将用于快速检查所有表是否已为此发布进行了检查,以便跳过表检查。要忽略此文件并无论如何执行检查,请使用–force选项。

注意

mysql_upgrade_info文件已被弃用;预计它将在未来的MySQL版本中被移除。

mysql_upgrade检查mysql.user系统表行,并为具有空插件列的任何行设置该列(如果凭据使用与该插件兼容的哈希格式),则将该列设置为’mysql_native_password’。 mysql_upgrade不会升级时区表或帮助表的内容。


mysql_upgrade支持以下选项,这些选项可以在命令行或选项文件中的[mysql_upgrade]和[client]组中指定。

选项名称 描述
–bind-address 使用指定的网络接口连接到MySQL服务器
–character-sets-dir 字符集安装的目录
–compress 压缩客户端和服务器之间发送的所有信息
–compression-algorithms 允许连接到服务器的压缩算法
–debug 写入调试日志
–debug-check 程序退出时打印调试信息
–debug-info 程序退出时打印调试信息、内存和CPU统计信息
–default-auth 要使用的认证插件
–default-character-set 指定默认字符集
–defaults-extra-file 除了通常的选项文件之外,读取命名选项文件
–defaults-file 只读取命名选项文件
–defaults-group-suffix 选项组后缀值
–force 即使已经为当前MySQL版本执行了mysql_upgrade,也强制执行
–get-server-public-key 从服务器请求RSA公钥
–help 显示帮助消息并退出
–host MySQL服务器所在的主机
–login-path 从.mylogin.cnf读取登录路径选项
–max-allowed-packet 发送到或从服务器的最大数据包长度
–net-buffer-length TCP/IP和套接字通信的缓冲区大小
–no-defaults 不读取任何选项文件
–password 连接到服务器时使用的密码
–pipe 使用命名管道(仅限Windows)连接到服务器
–plugin-dir 插件安装的目录
–port 用于连接的TCP/IP端口号
–print-defaults 打印默认选项
–protocol 要使用的传输协议
–server-public-key-path 文件路径名,包含RSA公钥
–shared-memory-base-name 共享内存连接的共享内存名称(仅限Windows)
–skip-sys-schema 不安装或升级sys模式
–socket Unix套接字文件或Windows命名管道以使用
–ssl-ca 包含受信任的SSL证书颁发机构列表的文件
–ssl-capath 包含受信任的SSL证书颁发机构证书文件的目录
–ssl-cert 包含X.509证书的文件
–ssl-cipher 允许用于连接加密的密码套件
–ssl-crl 包含证书吊销列表的文件
–ssl-crlpath 包含证书吊销列表文件的目录
–ssl-fips-mode 是否在客户端启用FIPS模式
–ssl-key 包含X.509密钥的文件
–ssl-mode 连接到服务器的期望安全状态
–ssl-session-data 包含SSL会话数据的文件
–ssl-session-data-continue-on-failed-reuse 如果会话重用失败,是否建立连接
–tls-ciphersuites 允许用于加密连接的TLSv1.3密码套件
–tls-version 允许用于加密连接的TLS协议
–upgrade-system-tables 仅更新系统表,不更新用户模式
–user 连接到服务器时使用的MySQL用户名
–verbose 详细模式
–version-check 检查正确的服务器版本
–write-binlog 将所有语句写入二进制日志
–zstd-compression-level 对于使用zstd压缩的连接,压缩级别