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的方式如下:
确保服务器正在运行。
调用mysql_upgrade来升级mysql模式中的系统表并检查和修复其他模式中的表:
mysql_upgrade [options]
停止服务器并重新启动,以便任何系统表更改生效。
如果您有多个要升级的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压缩的连接,压缩级别 |