每次升级 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
插件库文件的值的选项。
InnoDB
InnoDB
表空间加密要求在初始化之前加载要使用的密钥环插件
,因此默认--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:
确保服务器正在运行。
调用mysql_upgrade升级schema中的系统表,
mysql
检查修复其他schema中的表:mysql_upgrade [options]
停止服务器并重新启动它以使任何系统表更改生效。
如果您有多个 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 | 将所有语句写入二进制日志 |
显示一条简短的帮助消息并退出。
在具有多个网络接口的计算机上,使用此选项来选择用于连接到 MySQL 服务器的接口。
安装字符集的目录。请参阅 第 10.15 节,“字符集配置”。
--compress
,-C
如果可能,压缩客户端和服务器之间发送的所有信息。请参阅 第 4.2.6 节,“连接压缩控制”。
--debug[=
,debug_options
]-# [
debug_options
]写调试日志。典型的
debug_options
字符串是 . 默认值为 。d:t:o,
file_name
d:t:O,/tmp/mysql_upgrade.trace
程序退出时打印一些调试信息。
--debug-info
,-T
程序退出时打印调试信息以及内存和 CPU 使用统计信息。
关于使用哪个客户端身份验证插件的提示。请参阅第 6.2.13 节,“可插入身份验证”。
--default-character-set=
charset_name
用作
charset_name
默认字符集。请参阅第 10.15 节,“字符集配置”。--defaults-extra-file=
file_name
在全局选项文件之后但(在 Unix 上)在用户选项文件之前读取此选项文件。如果该文件不存在或无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
仅使用给定的选项文件。如果该文件不存在或无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
不仅要阅读通常的选项组,还要阅读具有通常名称和后缀
str
. 例如, mysql_upgrade通常会读取[client]
和[mysql_upgrade]
组。如果此选项作为 给出--defaults-group-suffix=_other
, mysql_upgrade还会读取[client_other]
和[mysql_upgrade_other]
组。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
mysql_upgrade_info
即使已经为当前版本的 MySQL 执行了 mysql_upgrade ,也 忽略该文件并强制执行。--host=
,host_name
-h
host_name
连接到给定主机上的 MySQL 服务器。
从登录路径文件中指定的登录路径读取选项
.mylogin.cnf
。“ 登录路径”是一个选项组,其中包含指定要连接到哪个 MySQL 服务器以及要以哪个帐户进行身份验证的选项。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
客户端/服务器通信缓冲区的最大大小。默认值为 24MB。最小值和最大值分别为 4KB 和 2GB。
客户端/服务器通信缓冲区的初始大小。默认值为 1MB − 1KB。最小值和最大值分别为 4KB 和 16MB。
不要读取任何选项文件。如果程序启动因从选项文件中读取未知选项而失败,
--no-defaults
可用于防止它们被读取。例外情况是
.mylogin.cnf
文件在所有情况下都会被读取(如果存在)。这允许以比在命令行上更安全的方式指定密码,即使在--no-defaults
使用 时也是如此。要创建.mylogin.cnf
,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
--password[=
,password
]-p[
password
]用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果没有给出, mysql_upgrade会提示输入一个。如果给定,则后面 的密码之间 不能有空格。如果未指定密码选项,则默认为不发送密码。
--password=
-p
在命令行上指定密码应该被认为是不安全的。为避免在命令行中提供密码,请使用选项文件。请参阅 第 6.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码并且 mysql_upgrade不应提示输入密码,请使用该
--skip-password
选项。--pipe
,-W
在 Windows 上,使用命名管道连接到服务器。仅当服务器启动时
named_pipe
启用了支持命名管道连接的系统变量时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。在其中查找插件的目录。如果该
--default-auth
选项用于指定身份验证插件但 mysql_upgrade未找到它,请指定此选项。请参阅 第 6.2.13 节,“可插入身份验证”。--port=
,port_num
-P
port_num
对于 TCP/IP 连接,要使用的端口号。
打印程序名称和它从选项文件中获取的所有选项。
--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,它很有用。有关允许值的详细信息,请参阅 第 4.2.5 节“连接传输协议”。
--shared-memory-base-name=
name
在 Windows 上,用于使用共享内存与本地服务器建立连接的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。仅当服务器启动时
shared_memory
启用了支持共享内存连接的系统变量时,此选项才适用。默认情况下,如果未安装模式,mysql_upgrade将安装
sys
模式,否则将其升级到当前版本。该--skip-sys-schema
选项会抑制此行为。--socket=
,path
-S
path
对于与 的连接
localhost
,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。在 Windows 上,仅当服务器启动时
named_pipe
启用了支持命名管道连接的系统变量时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。以 开头的选项
--ssl
指定是否使用加密连接到服务器并指示在哪里可以找到 SSL 密钥和证书。请参阅 加密连接的命令选项。加密连接允许的 TLS 协议。该值是一个或多个以逗号分隔的协议名称的列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”。
这个选项是在 MySQL 5.7.10 中添加的。
仅升级架构中的系统表
mysql
,不升级用户架构。--user=
,user_name
-u
user_name
用于连接到服务器的 MySQL 帐户的用户名。默认用户名为
root
。详细模式。打印有关程序功能的更多信息。
--version-check
,-k
检查 mysql_upgrade连接到的服务器的版本以验证它与 mysql_upgrade构建的版本相同。如果不是, mysql_upgrade退出。默认情况下启用此选项;要禁用检查,请使用
--skip-version-check
.默认情况下, 禁用mysql_upgrade的二进制日志记录。
--write-binlog
如果您希望将其操作写入二进制日志,请 调用该程序 。当服务器在启用全局事务标识符 (GTID) 的情况下运行时 (
gtid_mode=ON
),不要通过mysql_upgrade启用二进制日志记录。