Frage mysql_upgrade ist fehlgeschlagen ohne Angabe von Gründen


Ich aktualisiere von MySQL 5.1 auf 5.5, laufe mysql_upgrade und diese Ausgabe bekommen:

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

Irgendwelche Ideen darüber, wo nach was zu suchen ist (oder nicht passiert?), Damit ich beheben kann, was falsch ist und tatsächlich läuft mysql_upgrade?

Vielen Dank!

Mehr Ausgabe:

# 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

Nach dem Herunterfahren mysqld --skip-grant-tables über mysqladmin shutdown und Neustart von MySQL über service mysql start, das Fehlerprotokoll durchläuft diese Reihe von Fehlern immer wieder:

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

MySQL Protokoll beim Start über 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)

Wie ich es verstehe, sollten alle Probleme mit der Tabellenstruktur / -existenz (wie sie sich auf MySQL-Systemtabellen beziehen) durch Ausführen korrigiert werden mysql_upgrade :


68
2017-07-30 20:21


Ursprung


Auch wahrscheinlich nichts wert, mysqld läuft, mit --skip-grant-tables Möglichkeit. Ich kann über verbinden mysql auf dem Terminal mit keine Anmeldeinformationen, und ich bekomme keine Fehler über Syslog oder sonst wo ich denken kann, wenn ich renne mysql_upgrade - Jim Rubenstein
Das MySQL Referenzhandbuch deckt das Upgrade auf 5.5 von 5.1 ziemlich gut ab. Wenn Sie alle Anweisungen hier befolgt haben, wäre es erwähnenswert. Wenn du nicht, naja ... - Aaron Copley
Wenn Ihr mysql-root-Benutzer kein Passwort hat, fügen Sie nicht -p in mysql_upgrade -u root -p ein - Jeferex


Antworten:


Ich denke, dass es Benutzername und Passwort benötigt

mysql_upgrade -u root -p

Wenn ich sie nicht überlasse, bekomme ich Ihren Fehler

Bearbeiten: Dank der Kommentare weiß ich jetzt, dass es andere Gründe gibt, vielleicht weniger häufig, aber es ist am besten, sie auch zu kennen

Du bekommst also diesen Fehler wenn

  • Sie haben Benutzername und Passwort nicht weitergegeben
  • Sie haben Ihre Anmeldeinformationen weitergegeben, aber sie haben sich geirrt
  • Der MySQL-Server läuft nicht
  • die Tabellen der Berechtigungen sind ruiniert (dann müssen Sie MySQL mit neu starten mysqld --skip-grant-table)
  • die Tabelle mysql.plugin fehlt (Sie sehen einen Fehler beim Starten von MySQL, der vorschlägt, ... mysql_upgrade auszuführen, und das schlägt fehl. Sie haben wahrscheinlich eine veraltete Konfiguration in my.cnf)

93
2017-08-14 10:01



Das war genau das Problem, das ich hatte - warum zur Hölle konnte es nicht einfach sagen "Konnte nicht authentifizieren" oder "Verbindungsfehler" oder etwas? So wütend ... - les2
Leute, du bekommst den gleichen Fehler, wenn dein Passwort auch falsch ist. Also sei informiert. - Yoosaf Abdulla
Und Sie erhalten den gleichen Fehler, wenn der Server nicht ausgeführt wird, obwohl es scheint, das Kennwort zu akzeptieren. - Raman
nur wenn die Datenbanktabelle oder das Datenbankformat ebenfalls fehlerhaft ist, funktioniert es auch nicht, dann müssen Sie den Daemon mit "mysqld --skip-grant-tables" starten und mysql_upgrade in einem anderen Terminal ausführen! - Henning
+1 dafür. Noch ein Grund, warum ich MySQL hasse - Excalibur


Ich bin gerade auf diese präzisen Symptome gestoßen, als ich von 5.5 auf 5.6 aktualisiert habe, und es stellte sich heraus, dass es sich um ein Service-Erreichbarkeitsproblem handelte.

Obwohl der cli-MySQL-Client eine Verbindung zu meiner lokalen DB-Instanz mit nur a -u und -p herstellen konnte, musste ich auch -h 127.0.0.1 für mysql_upgrade angeben, da er versuchte, eine Socket-Dateiverbindung herzustellen und dabei kläglich versagte.


9
2017-08-19 19:33



Das war genau mein Problem, weil ich mysqd so ausführe: mysqld --skip-grant-tables --user = mysql - Rodo


Das scheint ein Plesk-Server zu sein, bei Plesk gibt es keine Wurzel für Mysql, aber der Administrator von Mysql namens admin, daher sollte dieser Befehl bei Plesk funktionieren, so wie ich es vorher versucht habe:

mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`

9
2017-10-09 08:56



Das hat perfekt für mich funktioniert - Carlos Alberto Martínez Gadea


Gleicher Fehler! Die Lösung für mich kam von http://www.freebsd.org/cgi/query-pr.cgi?pr=180624

Kurz gesagt: Der Fehler ist irreführend! Lauf mysql_upgrade -u root -p mit der DB online und geben Sie das Root-Passwort an.


5
2017-11-30 10:23





Sie könnten versuchen, diese nacheinander auszuführen, um zu sehen, wo es scheitert:

mysql_upgrade führt die folgenden Befehle aus, um Tabellen zu überprüfen und zu reparieren und um die Systemtabellen zu aktualisieren:

mysqlcheck --all-databases --check-upgrade --auto-repair  
mysql < fix_priv_tables  
mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names

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


4
2017-07-30 21:10



Dachte darüber nach, aber fix_priv_tables ist ein Skript, das von generiert wird mysql_upgrade um die privelege Tabellen zu reparieren - Jim Rubenstein
guter Punkt, vielleicht versuchen Sie nur die erste mysqlcheck-Linie? Und versuchen Sie, direkt aus dem Ordner "bin" zu starten, fwiw, /usr/bin/mysql_upgrade - user16081-JoeT


Diese Frage ist unglaublich generisch und ich entschuldige mich dafür.

Ich konnte keine direkte Ursache und Lösung für das Problem finden, das ich hatte, also habe ich MySQL neu installiert, um zu sehen, ob das funktionieren würde. Stellt sich heraus, Neuinstallation hat den Trick gemacht. Das war ein lahmer Weg, um es zu beheben, aber es war die einzige Option, die ich noch hatte.

Viele der anderen Antworten zu dieser Frage sind Probleme, die ich durcharbeiten musste, um mysql_upgrade zu starten, aber aus irgendeinem Grund - es scheiterte, als es versuchte, einige automatisierte Abfragen auszuführen, und ich konnte die Dokumentation nicht finden Abfragen, die es ausgeführt wurde, damit ich sie beheben konnte.


3
2017-11-30 14:00



Ja, sobald das Datenverzeichnis von MySQL beschädigt ist, gibt es so gut wie nichts, was Sie tun können - Krauser


Sie müssen die Berechtigung für alle Dateien unter mysql-Daten überprüfen. Es sollte derselbe Besitzer von mysql PID (mysql oder _mysql) sein. Dies geschieht manchmal, weil Daten aus der Datei ohne die entsprechende Berechtigung wiederhergestellt werden. Zum Beispiel, wenn Ihre MySQL-Daten unter / var / lib / mysql sind

chown -R mysql /var/lib/mysql

2
2017-11-07 00:12