Ich aktualisiere von MySQL 5.1 auf 5.5, starte mysql_upgrade
und erhalte diese Ausgabe:
# mysql_upgrade
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
Irgendwelche Ideen, wo Sie nachsehen können, was gerade passiert (oder was nicht?), Damit ich das Problem beheben und tatsächlich ausführen kann mysql_upgrade
?
Vielen Dank!
Mehr Leistung:
# 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 dem Neustart von mysql über service mysql start
durchläuft das Fehlerprotokoll diese Fehlermenge 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-Log 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)
So wie ich es verstehe, sollten alle Probleme mit der Tabellenstruktur / -existenz (im Zusammenhang mit MySQL-Systemtabellen) behoben werden, indem Folgendes ausgeführt wird mysql_upgrade
:
mysqld
läuft, mit--skip-grant-tables
Option. Ich kann übermysql
das Terminal ohne Anmeldeinformationen eine Verbindung herstellen, und ich erhalte keine Fehler über Syslog oder irgendwo anders, wo ich nachsehen kann, wenn ich laufemysql_upgrade
Antworten:
Ich denke, dass es Benutzername und Passwort benötigt
Wenn ich sie nicht bestehe, bekomme ich deine Fehlermeldung
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 beachten
Sie erhalten diesen Fehler also, wenn
mysqld --skip-grant-table
)quelle
Ich bin beim Upgrade von 5.5 auf 5.6 auf genau diese Symptome gestoßen, und es stellte sich heraus, dass es sich um ein Problem mit der Erreichbarkeit von Diensten handelte.
Obwohl der CLI-MySQL-Client mit nur -u und -p eine Verbindung zu meiner lokalen DB-Instanz herstellen konnte, musste ich -h 127.0.0.1 für mysql_upgrade angeben, da er versuchte, eine Socket-Dateiverbindung herzustellen, und der Versuch scheiterte kläglich.
quelle
Dies scheint ein Plesk-Server zu sein. Wenn Sie Plesk verwenden, gibt es keinen Root für Mysql, aber der Administrator von Mysql heißt admin. Daher sollte dieser Befehl auf Plesk funktionieren, wie ich es zuvor versucht habe:
quelle
Sie können versuchen, diese nacheinander auszuführen, um festzustellen, wo dies fehlschlägt:
von http://dev.mysql.com/doc/refman/5.5/en/mysql-upgrade.html
quelle
fix_priv_tables
ein Skript, das generiert wird,mysql_upgrade
um die Privileg-Tabellen zu reparieren/usr/bin/mysql_upgrade
Gleicher Fehler! Die Lösung für mich kam von http://www.freebsd.org/cgi/query-pr.cgi?pr=180624
Kurz: Der Fehler ist irreführend! Führen Sie
mysql_upgrade -u root -p
die Datenbank online aus und geben Sie das root-Passwort an.quelle
Diese Frage ist unglaublich allgemein und ich entschuldige mich dafür.
Ich konnte keine direkte Ursache und Lösung für das Problem finden, also habe ich MySQL neu installiert, um zu sehen, ob das funktionieren würde. Es stellte sich heraus, dass die Neuinstallation den Trick gemacht hat. Das war ein lahmer Weg, um das Problem zu beheben, aber es war die einzige Option, die ich noch hatte.
Viele der anderen Antworten auf diese Frage waren Probleme, die ich durcharbeiten musste, um mysql_upgrade zunächst zum Laufen zu bringen, aber aus irgendeinem Grund - es schlug fehl, weil versucht wurde, einige automatische Abfragen auszuführen, und ich konnte die Dokumentation nicht finden, auf der Abfragen, die ausgeführt wurden, damit ich sie beheben konnte.
quelle
Sie müssen die Berechtigung aller Dateien unter MySQL-Daten überprüfen. Es sollte derselbe Eigentümer von mysql PID sein (mysql oder _mysql). Dies kann vorkommen, wenn Daten ohne entsprechende Erlaubnis aus einer Datei wiederhergestellt werden. Zum Beispiel, wenn sich Ihre MySQL-Daten unter / var / lib / mysql befinden
quelle
Unser DBA hat mysql Version 5.0.95 deinstalliert, anstatt nur auf 5.5.39 zu aktualisieren. Die Deinstallation sicherte das,
/etc/my.cnf
um es/etc/my.cnf.rpmsave
dann zu entfernen, und dies verhinderte, dass MySQL richtig gestartet wurde:Sie können eine der folgenden Aktionen ausführen:
Vergleichen Sie die my.cnf-Dateien manuell und nehmen Sie die entsprechenden Konfigurationseinstellungen für InnoDB vor
Stellen Sie die
my.cnf.rpmsave
Rückseite über dem Original wieder her (suchen Sie zuerst nach neuen Standardeinstellungen, die Sie hinzufügen sollten!)Verwenden Sie ein Diff-Tool
vimdiff
, um dasmy.cnf.rpmsave
mit dem neuen zu vergleichenmy.cnf
und die Änderungen, die an der MySQL-Konfiguration vorgenommen wurden, einschließlich der InnoDB-Einstellungen, rückgängig zu machen.[root]# vimdiff /etc/my.cnf /etc/my.cnf.rpmsave
Ich habe die letzte Option gewählt und konnte dann MySQL starten:
und jetzt
mysql_upgrade
funktioniert das einwandfrei,mysql_upgrade -uroot -p
so dass ich zur Eingabe des root-Passworts aufgefordert wurde.Hoffe das hilft!
und auch die Verwendung ist
mysql_upgrade -uroot -p
fehlgeschlagen, da MySQL zum Laufen benötigt wird!Gewonnene Erkenntnisse:
quelle
Das gleiche Problem für mich, aber die Quelle meiner Probleme war das alte Passwortformat. Während mysql gezwungen werden kann, eine Verbindung im alten Format mit "skip-secure-auth" herzustellen, hat mysql_upgrade diese Option nicht. Sie müssen zuerst das root-Passwort mit dem neuen Format aktualisieren und dann können Sie Ihr mysql aktualisieren.
quelle
Hatte das gleiche Problem beim Upgrade von 5.1 auf 5.5.
Das hat bei mir funktioniert:
sudo mysql_upgrade -S <path-to-socket> -u <myuser> -p<mypass>
Mein Fehler wurde wahrscheinlich durch Berechtigungen für den Socket-Pfad verursacht, aber ich habe nicht die Zeit, um zu überprüfen, ob dies die Ursache war.
quelle
Ich bin auch darauf gestoßen, nachdem ich mein System von Mint 12 auf Mint 15 aktualisiert hatte. Ich hatte / var / lib / mysql archiviert und nach dem Upgrade wieder installiert. Ich habe den ersten
mysqlcheck
Kommentar von user16081 gelesen und mich über mysql.sock beschwert.Ich habe mysqld mit gestartet
/usr/sbin/mysqld &
und bin gutmysql_upgrade
gelaufen.quelle
SHOW TABLES
, existieren aber sonst nicht. Ich versuche gerade, mysql-utilities zum Laufen zu bringen, aber das beklagt sich über fehlende Python-Module.Ich bin auf dasselbe Problem gestoßen.
Ich habe es gelöst, indem ich -S /path/to/mysql.sock mit einbezogen habe
In meinem speziellen Fall lautete die Ausgabe von mysql_upgrade wie folgt
:
Suchen nach 'mysql' als: mysql Suchen nach 'mysqlcheck' als: mysqlcheck
FATAL ERROR: Upgrade fehlgeschlagen
Das ist ziemlich nutzlos. --verbose machte keinen Unterschied.
Ich habe mich für den folgenden Befehl entschieden und er hat wie ein Zauber
funktioniert : mysql_upgrade -S /var/lib/mysql/mysql.sock -uUSERNAME -p
Ich hoffe es hilft.
quelle
Ich war mit diesem Problem konfrontiert und fand heraus, dass
Es war erforderlich, dass MySQL Service ausgeführt wurde
dazu sind Benutzername und Passwort erforderlich
quelle
Ich bin auf dasselbe Problem gestoßen.
Ich habe dieses Problem gelöst, indem ich eine neue Datenbank installiert habe,
mysql_install_db --user=mysql
wie in den Kommentaren meinerrc.mysql
Datei in / etc. Beschrieben .Dann konnte ich den mysql-Daemon starten und 'mysql' verwenden oder was auch immer Sie mit dem mysql-Paket verbinden möchten.
Ich hatte dieses Problem mit dem Slackware-Arm, aber in diesem Fall spielt es keine Rolle.
quelle
In meinem Fall liefen einige Versionen von mysqld lokal, wodurch mysql_upgrade mit dem Fehler fehlschlug : Fehler beim Abrufen der Serverversion ! Könnte an nicht autorisiertem Zugriff liegen.
ps aux | grep mysql
und stellen Sie sicher, dass mysqld alle heruntergefahren ist. Dann deinstalliere alle Versionen und installiere die richtige Version neu. Und danach fing mysql_upgrade an zu arbeiten.quelle
Versuchen
oder vielleicht sogar (oder beides)
quelle
130730 21:03:34 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
ich denke, das ist der Grund, warum die ganze Sache fehlschlägt.mysql_upgrade --version
erzeugt keine Versionsausgabe (nur den Fehler FATAL ERROR).mysql --version
ist mysql Ver 14.14 Distrib 5.5.32, für debian-linux-gnu (x86_64) mit readline 6.2, und mysqld version ist 5.5Der Root-Benutzer für MySQL heißt "admin", nicht root. Der richtige Befehl ist
quelle
root
.