mysql_upgrade 和 MySQL 服务 - 恶性循环

Posted

技术标签:

【中文标题】mysql_upgrade 和 MySQL 服务 - 恶性循环【英文标题】:mysql_upgrade and MySQL service - Vicious Circle 【发布时间】:2018-11-04 21:30:05 【问题描述】:

我正在 Windows 10 上将 mysql 服务器 5.067 升级到 5.5.60。

我停止了服务,将 bin 替换为共享目录并启动了服务。

服务启动失败并显示消息(在事件查看器中):

Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
For more information, see Help and Support Center at http://www.mysql.com. 

好的,所以我使用以下命令以管理员身份打开了 cmd:

mysql_upgrade --port 64202

结果:

Looking for 'mysql.exe' as: C:\Program Files (x86)\XXX\MySQLServer\bin\mysql.exe
Looking for 'mysqlcheck.exe' as: C:\Program Files (x86)\XXX\MySQLServer\bin\mysqlcheck.exe
Error: Failed while fetching Server version! Could be due to unauthorized access.
FATAL ERROR: Upgrade failed

MySQL 升级的设计是通过 TCP 连接到 MySQL 来运行升级,但是如果服务没有运行,它怎么可能工作呢?这是一个恶性循环 - MySQL 服务需要升级才能启动,而 mysql_upgrade 需要连接到正在运行的服务。

怎么了?

【问题讨论】:

【参考方案1】:

不支持跳过主要版本 (5.1),它可能有效,也可能无效。适当的升级是以下之一:

计划 A:升级到 5.1,然后升级到 5.5。在每一步运行mysql_upgrade

Plan B:使用 mysqldump 从 5.0 转储数据。 (一定要获得例程等)。吹走(或绕过)5.0 并安装新的 5.5。重新加载数据。可能转储文件中存在语法错误,如果需要,请编辑文件。

【讨论】:

【参考方案2】:

由于您是从 5.0 升级到 5.5,因此有些配置值已被弃用,导致引擎无法启动。

最有可能的罪魁祸首是skip-dbd,如this site 所述。

所以:找到你的 MySQL 配置文件,注释掉 skip-dbd 选项并重启 MySQL 服务。然后,您可以使用适当的选项(包括身份验证)运行 mysql_upgrade

【讨论】:

以上是关于mysql_upgrade 和 MySQL 服务 - 恶性循环的主要内容,如果未能解决你的问题,请参考以下文章

mysql_upgrade 失败 - innodb 表不存在?

MySQL二进制包使用mysql_upgrade版本更新升级MySQL 5.7

r MySQL server version for the right syntax to use near 'mysql_upgrade -u root -p' at line 1

mysql错误总结

如何修复mysql.user表?

Linux MySQL 5.7二进制 小版本升级