mysql_upgrade – 检查并升级MySQL表

作者: wxfeng 分类: 数据库 发布时间: 2018-12-12 18:49

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调用 mysqlmysqlcheck 客户端程序来执行所需的操作。对于较旧的实现,如果从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会返回错误 ,前提是缺少它表示用户创建的模式: sysversion

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,二进制日志 将所有语句写入二进制日志

 

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注