`mysql_upgrade` 失败,没有给出真正的原因

Jim*_*ein 72 mysql mysql5.5

我正在从 MySQL 5.1 升级到 5.5,运行mysql_upgrade并获得以下输出:

# mysql_upgrade
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
Run Code Online (Sandbox Code Playgroud)

关于在哪里寻找正在发生的事情(或没有发生?)的任何想法,以便我可以修复任何错误并实际运行mysql_upgrade

谢谢!

更多输出:

# mysql_upgrade --verbose
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

# mysql_upgrade --debug-check --debug-info
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

# mysql_upgrade --debug-info
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

User time 0.00, System time 0.00
Maximum resident set size 1260, Integral resident set size 0
Non-physical pagefaults 447, Physical pagefaults 0, Swaps 0
Blocks in 0 out 16, Messages in 0 out 0, Signals 0
Voluntary context switches 9, Involuntary context switches 5

# mysql_upgrade --debug-check
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
Run Code Online (Sandbox Code Playgroud)

关闭mysqld --skip-grant-tablesviamysqladmin shutdown并重新启动 mysql via 后service mysql start,错误日志会一遍又一遍地遍历这组错误:

130730 21:03:27 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Table 'mysql.plugin' doesn't exist
130730 21:03:27 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130730 21:03:27 InnoDB: The InnoDB memory heap is disabled
130730 21:03:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130730 21:03:27 InnoDB: Compressed tables use zlib 1.2.3.4
130730 21:03:27 InnoDB: Initializing buffer pool, size = 20.0G
130730 21:03:29 InnoDB: Completed initialization of buffer pool
130730 21:03:30 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 588190222435
130730 21:03:30  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 588192055067
130730 21:03:30  InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
InnoDB: Apply batch completed
InnoDB: Last MySQL binlog file position 0 81298895, file name /var/log/mysql/mysql-bin.006008
130730 21:03:33  InnoDB: Waiting for the background threads to start
130730 21:03:34 InnoDB: 5.5.32 started; log sequence number 588192055067
130730 21:03:34 [Note] Recovering after a crash using /var/log/mysql/mysql-bin
130730 21:03:34 [Note] Starting crash recovery...
130730 21:03:34 [Note] Crash recovery finished.
130730 21:03:34 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130730 21:03:34 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130730 21:03:34 [Note] Server socket created on IP: '0.0.0.0'.
130730 21:03:34 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
Run Code Online (Sandbox Code Playgroud)

启动期间的 MySQL 日志通过 mysqld_safe --skip-grant-tables

130730 21:19:36 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
130730 21:19:36 [Note] Plugin 'FEDERATED' is disabled.
130730 21:19:36 InnoDB: The InnoDB memory heap is disabled
130730 21:19:36 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130730 21:19:36 InnoDB: Compressed tables use zlib 1.2.3.4
130730 21:19:37 InnoDB: Initializing buffer pool, size = 20.0G
130730 21:19:39 InnoDB: Completed initialization of buffer pool
130730 21:19:39 InnoDB: highest supported file format is Barracuda.
130730 21:19:42  InnoDB: Warning: allocated tablespace 566, old maximum was 0
130730 21:19:42  InnoDB: Waiting for the background threads to start
130730 21:19:43 InnoDB: 5.5.32 started; log sequence number 588192055067
130730 21:19:43 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130730 21:19:43 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130730 21:19:43 [Note] Server socket created on IP: '0.0.0.0'.
130730 21:19:43 [Warning] Can't open and lock time zone table: Table 'mysql.time_zone_leap_second' doesn't exist trying to live without them
130730 21:19:43 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_history' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_history_long' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_consumers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_instruments' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_timers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'performance_timers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'threads' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_thread_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_instance' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_global_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_summary_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_summary_by_instance' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'mutex_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'rwlock_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'cond_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_instances' has the wrong structure
130730 21:19:43 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.32-0ubuntu0.12.04.1-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)
Run Code Online (Sandbox Code Playgroud)

据我了解,所有表结构/存在问题(因为它与 mysql 系统表有关)都应该通过运行来纠正mysql_upgrade

Ric*_*lli 98

我认为它需要用户名和密码

mysql_upgrade -u root -p
Run Code Online (Sandbox Code Playgroud)

如果我不通过它们,我会收到您的错误信息

编辑:多亏了评论,现在我知道还有其他原因,可能不那么频繁,但最好也了解它们

所以当你得到那个错误时

  • 你没有传递用户名和密码
  • 你通过了你的凭据,但它们是错误的
  • MySQL 服务器没有运行
  • 权限表被破坏了(然后你必须用 重新启动 MySQL mysqld --skip-grant-table
  • 表 mysql.plugin 丢失(在启动 MySQL 时你会看到一个错误,建议运行...mysql_upgrade,但失败了。你可能在 my.cnf 中有一些过时的配置)

  • 这正是我遇到的问题 - 为什么它不能只说“无法验证”或“连接错误”之类的?太生气了 ... (24认同)
  • 伙计们,如果您的密码也错误,您也会遇到同样的错误。所以被告知。 (3认同)
  • 如果服务器没有运行,即使它似乎接受密码,也会出现相同的错误。 (3认同)

Aub*_*ner 9

我刚从 5.5 升级到 5.6 时遇到了这些确切的症状,结果证明是服务可达性问题。

尽管 cli MySQL 客户端可以仅提供 -u 和 -p 连接到我的本地数据库实例,我还需要为 mysql_upgrade 指定 -h 127.0.0.1,因为它正在尝试套接字文件连接并在尝试中惨遭失败。


小智 9

这似乎是一个 Plesk 服务器,当使用 Plesk 时,Mysql 没有 root,但是 Mysql 的管理员称为 admin,所以这个命令应该可以在 Plesk 上运行,因为我之前尝试过:

mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`
Run Code Online (Sandbox Code Playgroud)


use*_*oeT 5

您可以尝试一一运行这些以查看失败的地方:

mysql_upgrade 执行以下命令来检查和修复表并升级系统表:

mysqlcheck --all-databases --check-upgrade --auto-repair  
mysql < fix_priv_tables  
mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names
Run Code Online (Sandbox Code Playgroud)

来自http://dev.mysql.com/doc/refman/5.5/en/mysql-upgrade.html


Dr.*_*ini 5

同样的问题!我的解决方案来自http://www.freebsd.org/cgi/query-pr.cgi?pr=180624

简而言之:该错误具有误导性!在线运行mysql_upgrade -u root -p数据库并提供 root 密码。


Jim*_*ein 3

这个问题非常普遍,对此我深表歉意。

我找不到问题的直接原因和解决方案,因此我重新安装 MySQL 来看看是否可行。事实证明,重新安装就成功了。这是一个蹩脚的解决方法,但这是我剩下的唯一选择。

关于这个问题的许多其他答案都是我必须解决才能让 mysql_upgrade 最初运行的问题,但无论出于何种原因 - 它失败了,因为它试图运行一些自动查询,并且我找不到相关文档查询它正在运行,以便我可以修复它们。