mysql_upgrade – 检查并升级MySQL表
4.4.7 mysql_upgrade – 检查并升级MySQL表
mysql_upgrade检查所有数据库中的所有表是否与当前版本的MySQL Server不兼容。mysql_upgrade还会升级系统表,以便您可以利用可能已添加的新特权或功能。
如果mysql_upgrade发现表可能存在不兼容性,则会执行表检查,如果发现问题,则尝试进行表修复。如果表无法修复,请参见第2.11.3节“重建或修复表或索引”以了解手动表修复策略。
每次升级MySQL时都 应该执行mysql_upgrade。
从MySQL 5.7.5开始,mysql_upgrade直接与MySQL服务器通信,向它发送执行升级所需的SQL语句。在5.7.5之前, mysql_upgrade调用 mysql和mysqlcheck 客户端程序来执行所需的操作。对于较旧的实现,如果从Linux上的RPM软件包安装MySQL,则必须安装服务器和客户端RPM。 mysql_upgrade包含在服务器RPM中,但需要客户端RPM,因为后者包含 mysqlcheck。(请参见 第2.5.5节“使用Oracle的RPM包在Linux上安装MySQL”。)
从MySQL 5.7.12开始,默认 --early-plugin-load
值为空。要加载keyring_file
插件,必须使用--early-plugin-load
具有非空值的显式 选项。
在MySQL 5.7.11中,默认 --early-plugin-load
值是keyring_file
插件库文件的名称,因此默认情况下加载了插件。 InnoDB
表空间加密需要在 初始化keyring_file
之前加载插件 InnoDB
,因此这种默认值的更改会导致升级从5.7.11升级到5.7.12或更高版本不兼容。具有加密InnoDB
表空间的管理员 必须采取明确的操作以确保继续加载 keyring_file
插件:使用--early-plugin-load
命名插件库文件的选项启动服务器。有关其他信息,请参见第6.5.4节“MySQL密钥环”。
如果从早于5.7.2的版本升级到MySQL 5.7.2或更高版本,则对mysql.user
表的更改需要一系列特殊步骤才能使用mysql_upgrade执行升级。有关详细信息,请参见第2.11.1.3节“MySQL 5.7中的更改”。
在Windows上,您必须以管理员权限运行mysql_upgrade。您可以通过以管理员身份运行命令提示符并运行命令来执行此操作。如果不这样做可能会导致升级无法正确执行。
在执行升级之前, 应始终备份当前的MySQL安装 。请参见 第7.2节“数据库备份方法”。
在升级MySQL安装并运行mysql_upgrade之前,某些升级不兼容性可能需要特殊处理 。有关确定是否有任何此类不兼容性适用于您的安装以及如何处理它们的说明,请参见 第2.11.1节“升级MySQL”。
要使用mysql_upgrade,请确保服务器正在运行。然后像这样调用它来检查和修复表并升级系统表:
shell> mysql_upgrade [
options
]
运行mysql_upgrade后,停止服务器并重新启动它,以便对系统表所做的任何更改生效。
如果有多个MySQL服务器实例在运行,请使用适合连接到所需服务器的连接参数调用 mysql_upgrade。例如,如果服务器在部件3306到3308上的本地主机上运行,请通过连接到相应的端口来升级每个服务器:
shell> mysql_upgrade --protocol=tcp -P 3306 [
other_options
]
shell> mysql_upgrade --protocol=tcp -P 3307 [
other_options
]
shell> mysql_upgrade --protocol=tcp -P 3308 [
other_options
]
对于Unix上的本地主机连接,该 --protocol=tcp
选项强制使用TCP / IP而不是Unix套接字文件进行连接。
如果运行服务器并将 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
并将其设置为其原始值。
mysql_upgrade处理所有数据库中的所有表,这可能需要很长时间才能完成。每个表都被锁定,因此在处理其他会话时不可用。检查和维修操作可能非常耗时,特别是对于大型桌子。
有关表检查操作所需的详细信息,请参阅语句FOR UPGRADE
选项的 CHECK TABLE
说明(请参见 第13.7.2.2节“CHECK TABLE语法”)。
所有已检查和修复的表都标有当前的MySQL版本号。这可以确保下次使用相同版本的服务器运行 mysql_upgrade时,它可以判断是否需要再次检查或修复表。
mysql_upgrade还将MySQL版本号保存mysql_upgrade_info
在数据目录中指定的文件中。这用于快速检查是否已检查此版本的所有表,以便可以跳过表检查。要忽略此文件并执行检查,请使用该 --force
选项。
从MySQL 5.7.2开始,mysql_upgrade检查 user
表行,对于具有空plugin
列的任何行,将该列设置为 'mysql_native_password'
或 'mysql_old_password'
取决于Password
列值的哈希格式。从MySQL 5.7.5开始,支持4.1之前的密码哈希 mysql_old_password
并被删除,因此如果凭据使用与该插件兼容的哈希格式, mysql_upgrade会设置空 plugin
值'mysql_native_password'
。必须手动升级具有4.1之前密码哈希的行。有关帐户升级说明,请参见第6.5.1.3节“迁移远离4.1之前的密码散列和mysql_old_password插件”。
mysql_upgrade不会升级帮助表的内容。有关升级说明,请参见 第5.1.14节“服务器端帮助”。
从MySQL 5.7.7开始,除非使用该--skip-sys-schema
选项 调用,否则 mysql_upgrade会安装 sys
架构(如果未安装),否则将其升级到当前版本。 如果模式存在但没有 视图,mysql_upgrade会返回错误 ,前提是缺少它表示用户创建的模式: sys
version
Error occurred: 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 5.7.9及更高版本中,mysql_upgrade 检查InnoDB
使用通用分区处理程序创建的分区表,并尝试将它们升级到InnoDB
本机分区(在MySQL 5.7.6及更高版本中使用)。(Bug#76734,Bug#20727344)同样从MySQL 5.7.9开始,您可以使用SQL语句在mysql客户端中 单独升级这些表ALTER TABLE ... UPGRADE PARTITIONING
。
默认情况下,mysql_upgrade作为MySQL root
用户运行 。如果root
运行mysql_upgrade时密码已过期 ,您将看到一条消息,指出您的密码已过期且 mysql_upgrade因此失败。要更正此问题,请重置root
密码以将其取消,然后再次运行mysql_upgrade。首先,连接到服务器root
:
shell> mysql -u root -p
Enter password: **** <- enter root password here
使用适当的SQL语句重置密码。从MySQL 5.7.6开始,使用ALTER USER
:
mysql> ALTER USER USER() IDENTIFIED BY 'root-password';
在5.7.6之前,使用SET PASSWORD
:
mysql> SET PASSWORD = PASSWORD('root-password');
然后退出mysql并再次运行 mysql_upgrade:
shell> mysql_upgrade [
options
]
mysql_upgrade支持下面的选项,可以在命令行或在指定 [mysql_upgrade]
与 [client]
一个选项文件的组。有关MySQL程序使用的选项文件的信息,请参见 第4.2.6节“使用选项文件”。
表4.9 mysql_upgrade选项
格式 | 描述 | 介绍 | 删除 |
---|---|---|---|
–basedir | 不曾用过 | 5.7.2 | |
–bind地址 | 使用指定的网络接口连接到MySQL服务器 | 5.7.5 | |
–character集-DIR | 安装字符集的目录 | ||
– 压缩 | 压缩客户端和服务器之间发送的所有信息 | ||
–datadir | 不曾用过 | 5.7.2 | |
–debug | 写调试日志 | ||
–debug检查 | 程序退出时打印调试信息 | ||
– 调试信息 | 程序退出时打印调试信息,内存和CPU统计信息 | ||
–default-AUTH | 要使用的身份验证插件 | ||
–default-字符集 | 指定默认字符集 | ||
–defaults-额外文件 | 除常用选项文件外,还可以读取命名选项文件 | ||
–defaults文件 | 只读命名选项文件 | ||
–defaults基团的后缀 | 选项组后缀值 | ||
– 力 | 即使已经为当前版本的MySQL执行了mysql_upgrade,也强制执行 | ||
– 救命 | 显示帮助消息并退出 | ||
– 主办 | 连接到给定主机上的MySQL服务器 | ||
–login路径 | 从.mylogin.cnf中读取登录路径选项 | ||
–max允许的分组 | 发送到服务器或从服务器接收的最大数据包长度 | 5.7.5 | |
–net缓冲长度 | TCP / IP和套接字通信的缓冲区大小 | 5.7.5 | |
–no-默认 | 不读选项文件 | ||
– 密码 | 连接服务器时使用的密码 | ||
– 管 | 在Windows上,使用命名管道连接到服务器 | ||
–plugin-DIR | 安装插件的目录 | ||
– 港口 | 用于连接的TCP / IP端口号 | ||
–print-默认 | 打印默认选项 | ||
– 协议 | 要使用的连接协议 | ||
–shared存储器碱基名 | 用于共享内存连接的共享内存的名称 | ||
–skip-SYS-模式 | 不要安装或升级sys架构 | 5.7.7 | |
– 插座 | 对于localhost的连接,要使用的Unix套接字文件 | ||
–ssl | 启用加密连接 | ||
–ssl-CA | 包含受信任SSL证书颁发机构列表的文件 | ||
–ssl-capath | 包含受信任的SSL证书颁发机构证书文件的目录 | ||
–ssl证书 | 包含X.509证书的文件 | ||
–ssl-密码 | 用于连接加密的允许密码列表 | ||
–ssl-CRL | 包含证书吊销列表的文件 | ||
–ssl-crlpath | 包含证书吊销列表文件的目录 | ||
–ssl键 | 包含X.509密钥的文件 | ||
–ssl模式 | 连接到服务器的安全状态 | 5.7.11 | |
–ssl-验证服务器证书 | 根据服务器证书Common Name身份验证主机名 | ||
–tls版本 | 允许加密连接的协议 | 5.7.10 | |
–tmpdir | 临时文件的目录 | 5.7.5 | |
–upgrade-系统表 | 仅更新系统表,而不是数据 | ||
– 用户 | 连接服务器时使用的MySQL用户名 | ||
–verbose | 详细模式 | ||
–version检查 | 检查服务器版本是否正确 | 5.7.2 | |
–write,二进制日志 | 将所有语句写入二进制日志 |
--help
显示简短的帮助消息并退出。--basedir=
dir_name
MySQL安装目录的路径。MySQL 5.7.2中删除了此选项。--bind-address=
ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接MySQL服务器的接口。--character-sets-dir=
dir_name
安装字符集的目录。请参见 第10.14节“字符集配置”。--compress
,-C
如果两者都支持压缩,则压缩客户端和服务器之间发送的所有信息。--datadir=
dir_name
数据目录的路径。MySQL 5.7.2中删除了此选项。--debug[=
debug_options
]
,-# [
debug_options
]
编写调试日志。典型的debug_options
字符串是 。默认是 。d:t:o,
file_name
d:t:O,/tmp/mysql_upgrade.trace
--debug-check
程序退出时打印一些调试信息。--debug-info
,-T
程序退出时打印调试信息和内存以及CPU使用情况统计信息。--default-auth=
plugin
有关要使用的客户端身份验证插件的提示。请参见第6.3.9节“可插入验证”。--default-character-set=
charset_name
使用charset_name
作为默认字符集。请参见第10.14节“字符集配置”。--defaults-extra-file=
file_name
在全局选项文件之后读取此选项文件,但在用户选项文件之前(在Unix上)。如果文件不存在或无法访问,则会发生错误。file_name
如果作为相对路径名而不是完整路径名给出,则相对于当前目录进行解释。有关此选项和其他选项文件选项的其他信息,请参见第4.2.7节“影响选项文件处理的命令行选项”。
--defaults-file=
file_name
仅使用给定的选项文件。如果文件不存在或无法访问,则会发生错误。file_name
如果作为相对路径名而不是完整路径名给出,则相对于当前目录进行解释。有关此选项和其他选项文件选项的其他信息,请参见第4.2.7节“影响选项文件处理的命令行选项”。
--defaults-group-suffix=
str
不仅要读取通常的选项组,还要读取通常名称和后缀的组str
。例如, mysql_upgrade通常会读取[client]
和[mysql_upgrade]
组。如果--defaults-group-suffix=_other
给出了该 选项,mysql_upgrade也会读取[client_other]
和[mysql_upgrade_other]
组。有关此选项和其他选项文件选项的其他信息,请参见第4.2.7节“影响选项文件处理的命令行选项”。
--force
mysql_upgrade_info
即使已经为当前版本的MySQL执行了mysql_upgrade,也要 忽略该文件并强制执行。--host=
host_name
,-h
host_name
连接到给定主机上的MySQL服务器。--login-path=
name
从.mylogin.cnf
登录路径文件中的指定登录路径中读取选项 。阿 “ 登录路径 ”是含有指定要连接到哪个MySQL服务器和选项哪个帐户作为认证选项组。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参见 第4.6.6节“ mysql_config_editor – MySQL配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参见第4.2.7节“影响选项文件处理的命令行选项”。
--max-allowed-packet=
value
客户端/服务器通信的最大缓冲区大小。默认值为24MB。最小值和最大值分别为4KB和2GB。--net-buffer-length=
value
用于客户端/服务器通信的缓冲区的初始大小。默认值为1MB – 1KB。最小值和最大值分别为4KB和16MB。MySQL 5.7.5中添加了此选项。--no-defaults
不要读任何选项文件。如果程序启动由于从选项文件中读取未知选项而失败,--no-defaults
则可用于防止它们被读取。例外情况是,
.mylogin.cnf
在所有情况下都会读取该文件(如果存在)。这允许以比命令行更安全的方式指定密码,即使--no-defaults
使用密码 也是如此。(.mylogin.cnf
由mysql_config_editor实用程序创建 。请参见 第4.6.6节“ mysql_config_editor – MySQL配置实用程序”。)有关此选项和其他选项文件选项的其他信息,请参见第4.2.7节“影响选项文件处理的命令行选项”。
--password[=
password
]
,-p[
password
]
连接服务器时使用的密码。如果使用短选项表单(-p
), 则选项和密码之间不能有空格。如果省略命令行上password
的--password
或-p
选项后面的 值 ,则 mysql_upgrade会提示输入一个值。在命令行上指定密码应该被认为是不安全的。请参见 第6.1.2.1节“密码安全的最终用户指南”。您可以使用选项文件来避免在命令行上提供密码。
--pipe
,-W
在Windows上,使用命名管道连接到服务器。仅当服务器支持命名管道连接时,此选项才适用。--plugin-dir=
dir_name
查找插件的目录。如果该--default-auth
选项用于指定身份验证插件但 mysql_upgrade找不到,请指定此选项 。请参见 第6.3.9节“可插入验证”。--port=
port_num
,-P
port_num
用于连接的TCP / IP端口号。--print-defaults
打印程序名称以及从选项文件中获取的所有选项。--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接服务器的连接协议。当其他连接参数通常会导致协议被使用而不是您想要的协议时,它很有用。有关允许值的详细信息,请参见 第4.2.2节“连接到MySQL服务器”。--shared-memory-base-name=
name
在Windows上,使用共享内存名称,用于使用共享内存与本地服务器建立的连接。默认值为MYSQL
。共享内存名称区分大小写。必须使用
--shared-memory
启用共享内存连接的选项启动服务器 。--skip-sys-schema
sys
如果未安装架构, mysql_upgrade将安装 架构,否则将其升级到当前版本。该--skip-sys-schema
选项会抑制此行为。--socket=
path
,-S
path
用于连接localhost
,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。--ssl*
以“开头”选项--ssl
指定是否使用SSL连接到服务器并指示在何处查找SSL密钥和证书。请参见 第6.4.2节“加密连接的命令选项”。--tls-version=
protocol_list
客户端允许的加密连接协议。该值是以逗号分隔的列表,其中包含一个或多个协议名称。可以为此选项命名的协议取决于用于编译MySQL的SSL库。有关详细信息,请参见 第6.4.6节“加密连接协议和密码”。MySQL 5.7.10中添加了此选项。
--tmpdir=
dir_name
,-t
dir_name
用于创建临时文件的目录的路径名。由于重新实现不再使用临时文件,因此在MySQL 5.7.5中删除了此选项。--upgrade-system-tables
,-s
仅升级系统表,不升级数据。--user=
user_name
,-u
user_name
连接到服务器时使用的MySQL用户名。默认用户名是root
。--verbose
详细模式。打印有关程序功能的更多信息。--version-check
,-k
检查mysql_upgrade连接到的服务器的版本, 以验证它与构建mysql_upgrade的版本相同 。如果没有, mysql_upgrade退出。默认情况下启用此选项; 要禁用检查,请使用--skip-version-check
。--write-binlog
默认情况下,mysql_upgrade的二进制日志记录 被禁用。--write-binlog
如果要将其操作写入二进制日志,请调用该程序 。当服务器运行时启用了全局事务标识符(GTID)(
gtid_mode=ON
)时,请不要通过mysql_upgrade启用二进制日志记录。