![Nach dem Upgrade von MySQL von 5.6 auf 5.7 ist keine Anmeldung als Root-Benutzer möglich](https://rvso.com/image/97256/Nach%20dem%20Upgrade%20von%20MySQL%20von%205.6%20auf%205.7%20ist%20keine%20Anmeldung%20als%20Root-Benutzer%20m%C3%B6glich.png)
Nach dem Upgrade von MySQL von 5.6 auf 5.7 kann ich mich nicht als Root anmelden:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Im Log habe ich folgendes gefunden:
2016-10-26T10:23:01.845088Z 0 [Warning] User entry 'root'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
2016-10-26T10:23:01.845112Z 0 [Warning] User entry 'mysql.sys'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
2016-10-26T10:23:01.845127Z 0 [Warning] User entry 'debian-sys-maint'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
2016-10-26T10:23:01.845142Z 0 [Warning] User entry 'phpmyadmin'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
2016-10-26T10:23:01.845155Z 0 [Warning] Some of the user accounts with SUPER privileges were disabled because of empty mysql.user.plugin value. If you are upgrading from MySQL 5.6 to MySQL 5.7 it means we were not able to substitute for empty plugin column. Probably because of pre 4.1 password hash. If your account is disabled you will need to:
2016-10-26T10:23:01.845183Z 0 [Warning] 1. Stop the server and restart it with --skip-grant-tables.
2016-10-26T10:23:01.845192Z 0 [Warning] 2. Run mysql_upgrade.
2016-10-26T10:23:01.845200Z 0 [Warning] 3. Restart the server with the parameters you normally use.
2016-10-26T10:23:01.845207Z 0 [Warning] For complete instructions on how to upgrade MySQL to a new version please see the 'Upgrading MySQL' section from the MySQL manual
2016-10-26T10:23:01.853461Z 0 [Note] Event Scheduler: Loaded 0 events
2016-10-26T10:23:01.853962Z 0 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.7.16-0ubuntu0.16.04.1' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu)
2016-10-26T10:23:02.138961Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
Also habe ich es wie vorgeschlagen gemacht: den Server gestoppt:
> service mysql stop
Habe es mit übersprungenen Berechtigungstabellen gestartet:
> sudo mysqld_safe --skip-grant-tables
Wenn mysqld_safe mit --skip-grant-tables ausgeführt wird, kann ich mich als Root anmelden, aber nur, bis ich das Terminal schließe, auf dem es ausgeführt wird (es läuft nicht als Daemon, wird aber beim Schließen des Terminals gestoppt).
Dann habe ich wie vorgeschlagen mysql_upgrade ausgeführt (in einem anderen Terminal)
> sudo mysql_upgrade
Und das hat meine Tabellen aufgewertet.
Ich habe das Terminal geschlossen, in dem mysqld_safe ausgeführt wurde, und den MySQL-Server gestoppt (service mysql stop). Ich musste alle Instanzen von MySQL beenden, da ich sonst ein vollständiges Protokoll mit den folgenden Fehlern erhalten hätte:
2016-10-26T10:40:54.073975Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
2016-10-26T10:40:54.074060Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.
Dann habe ich MySQL erneut gestartet:
> service mysql start
und habe das gleiche Ergebnis wie oben erhalten (Zugriff für Benutzer „root“@„localhost“ verweigert (mit Kennwort: NEIN))
Wie behebe ich das Problem? Ich kämpfe schon seit Stunden damit und bin für jede Hilfe dankbar!
Antwort1
Ich hatte dasselbe Problem, als ich Ubuntu von 14.04 auf 16.04 aktualisiert habe. Ich war zu faul, Ihren Vorschlag umzusetzen (Datenbanken exportieren und neu beginnen), also habe ich das hier gemacht, um das Problem zu beheben!
Stoppen Sie MySQL und starten Sie es dann ohne Berechtigungen
> sudo service stop mysql
> sudo mkdir /var/run/mysqld # needed to launch mysql in ubuntu from command line...may not apply to other distros
> sudo chown mysql:mysql /var/run/mysqld # same reason as above
> sudo mysqld_safe --skip-grant-tables
Dann in einem anderen Terminalfenster:
> mysql -uroot
> select User, host, authentication_string,plugin from mysql.user; #see what users don't have a password (authentication_string and plugin are empty)
> update mysql.user set authentication_string=PASSWORD('woot') where user='user';
> update mysql.user set plugin='mysql_native_password' where user='user';
> FLUSH PRIVILEGES;
> exit;
Schließlich musste ich nur noch die temporäre MySQL-Instanz (mysqld_safe) beenden und neu starten ... Auf dem ersten Terminal
> ^\ #to tell the mysqld_safe process to quit itself
> sudo service mysqld start
Antwort2
Das Problem bestand darin, dass der Wert des Plugins mysql.user für alle Benutzer, einschließlich debian-sys-maint, leer war, sodass ich das Paket nicht einmal neu konfigurieren konnte. Das Problem sollte durch Ausführen von mysql_upgrade behoben werden, wurde aber aus irgendeinem Grund nicht behoben.
Also habe ich einen Dump aller Datenbanken erstellt, den MySQL-Server vollständig entfernt, ihn dann neu installiert und meine Datenbanken wieder importiert.
Sichern Sie alle Ihre Datenbanken:
> mysqldump -u root -p --databases db1 db2 > alldb.sql
Es war ziemlich dumm von mir, aber ich habe mit --all-databases einen Dump aller Datenbanken durchgeführt. Er enthielt die Tabelle mysql.user, in der alle Benutzer einen leeren „Plugin“-Wert hatten, sodass ich nach dem ersten Neustart des MySQL-Dienstes auf dasselbe Problem stieß. Daher habe ich anschließend nur den Dump für meine Datenbanken durchgeführt.
Der Dump wird in dem Ordner abgelegt, aus dem Sie den Befehl ausgeführt haben
Entfernen Sie MySQL und seine Einstellungen:
> sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.7 mysql-client-core-5.7
> sudo rm -rf /etc/mysql /var/lib/mysql
> sudo apt-get autoremove
> sudo apt-get autoclean
Installieren Sie MySQL:
> sudo apt-get install mysql-server
Importieren Sie Ihre Datenbanken zurück:
> mysql -u root -p < alldb.sql