MySQL: Schwerwiegender Fehler: Berechtigungstabellen können nicht geöffnet und gesperrt werden: Tabelle 'mysql.host' existiert nicht [geschlossen]


9

Plötzlich lief mein lokaler MySQL 5.5-Server auf meinem Windows XP SP3 nicht mehr.

Ich habe auch WAMP Apache und WAMP MySQL installiert, aber WAMP MySQL läuft nicht. Das Fehlerprotokoll zeigt:

  • Server kann nicht gestartet werden: Bindung an TCP / IP-Port: Keine solche Datei oder kein solches Verzeichnis
  • Haben Sie bereits einen anderen mysqld-Server auf Port: 3306?

Ich habe versucht, den Port von 3306 auf 3307 zu ändern, aber der Dienst wurde immer noch nicht gestartet, was zu einem Fehler führte:

Die Ereignisanzeige zeigt:

  • Schwerwiegender Fehler: Berechtigungstabellen können nicht geöffnet und gesperrt werden: Die Tabelle 'mysql.host' ist nicht vorhanden
  • Die Tabelle mysql.plugin kann nicht geöffnet werden. Bitte führen Sie mysql_upgrade aus, um es zu erstellen.

Anscheinend kann ich mysql_upgrade nur ausführen, wenn der Server ausgeführt wird. Wie kann ich 'mysql.host' erstellen, wenn der Dienst nicht gestartet werden kann?

Ich habe MySQL Server deinstalliert und neu installiert. Während des Konfigurationsassistenten nach der Installation wird die folgende Fehlermeldung angezeigt: Der Dienst konnte nicht gestartet werden. Fehler: 0.

Wie gehe ich von hier aus vor?


Steve, führen Sie dies unter Windows, BSD, Linux, OSX oder einem anderen Betriebssystem aus? Wenn Sie es unter Windows ausführen, unterscheiden sich die Details für einige Schritte.
Rik Schneider

@ Rik Schneider: Rick, ich verwende MySQL auf meinem Windows-Laptop. Vielen Dank.
Steve

Antworten:


9

Führen Sie den folgenden Befehl aus

mysql_install_db

Übrigens ist dies erforderlich, wenn eine Installation unter (mindestens) Linux CentOS 7 durchgeführt wird. Andernfalls wird mysqld nicht gestartet. Ich habe das gesehen, als ich gelaufen binsystemctl status mysqld.service 2015-02-20 15:41:07 15160 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
Mike S

5

Initialisieren Sie MySQL, bevor Sie unter Windows starten.

mysqld --initialize

Ich wünschte, ich könnte dies mehr als einmal positiv bewerten. Ich habe nach dieser einfachen Lösung gesucht. Vielen Dank!
Schiavini

1

Als erstes müssen Sie die folgenden Befehle ausführen:

use mysql
show tables;

Bitte beachten Sie die Unterschiede

MySQL 5.0 enthält 17 Tabellen im MySQL-Schema

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.1 enthält 23 Tabellen im MySQL-Schema

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.5 enthält 24 Tabellen im MySQL-Schema

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

Bitte beachten Sie, dass mysql.plugin in MySQL 5.0 nicht vorhanden ist. Es ist sehr plausibel zu vermuten, dass Sie MySQL 5.0 irgendwie installiert und wichtige Tabellen für MySQL 5.5 verschwinden lassen.

Hier sind einige gute Neuigkeiten. Sie können etwas ausprobieren.

Für dieses Beispiel

  • In ServerA leben Ihre MySQL 5.5-Daten
  • In ServerB erstellen Sie eine separate MySQL 5.5-Umgebung

Hier sind deine Schritte

  1. Auf ServerA mkdir / root / myusers
  2. Auf ServerA cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Installieren Sie MySQL 5.5 auf ServerB
  4. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  5. Auf ServerA cp /root/myusers/user.* / var / lib / mysql / mysql /.
  6. Service MySQL starten

Das ist es.

Wenn Sie dies unter Windows ausführen, müssen dieselben Prinzipien gelten.

Versuche es !!!

UPDATE 29.07.2011 16:15 EDT

Wenn Ihre Benutzernamen DB-spezifische Berechtigungen hatten, sind hier Ihre Schritte

  1. Auf ServerA mkdir / root / myusers
  2. Auf ServerA cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Auf ServerA cp /var/lib/mysql/mysql/db.* / root / myusers /.
  4. Installieren Sie MySQL 5.5 auf ServerB
  5. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  6. Auf ServerA cp / root / myusers / * / var / lib / mysql / mysql /.
  7. Service MySQL starten

0

Der Dienst konnte nicht gestartet werden. Fehler: 0.

Fügen Sie den Umgebungsvariablen den MySQL-Pfad hinzu.


Danke, aber es war bereits in der Pfadvariablen.
Steve

0

Es sieht so aus, als ob MySQL bereits läuft

Versuchen

ps ax|grep mysql

Wenn Sie eine Ausgabe sehen, müssen Sie diese wahrscheinlich stoppen (oder die Box neu starten).

Wenn Sie keine Ausgabe sehen, versuchen Sie, mysqld ohne Dämonisierung auszuführen, und sehen Sie die Ausgabe.


0

Ich habe ein Windows-Tag hinzugefügt, um die Beantwortung der Frage zu erleichtern.

Mein Hintergrund ist nicht Windows, aber die Prinzipien gelten.

Läuft bereits ein MySQL-Prozess? In diesem Fall müssen Sie es vor der Deinstallation beenden. Wenn es beim Versuch der Deinstallation / Neuinstallation noch ausgeführt wurde, hängen Prozesse und Dateien herum und verhindern eine vollständige Deinstallation.

Öffnen Sie das Dienstfenster, suchen Sie nach etwas mit MySQL im Namen und stellen Sie sicher, dass nicht versucht wird, mit einem Neustart zu beginnen. Öffnen Sie dann die Registerkarte "Laufende Prozesse" des Fensters "Laufende Programme" (öffnen Sie sie mit STRG-ALT-ENTF) und suchen und beenden Sie laufende Prozesse mit MySQL im Namen.

Wenn Sie zufrieden sind, dass keine MySQL-Prozesse mehr ausgeführt werden, können Sie fortfahren. Möglicherweise möchten Sie einen Neustart durchführen, um sicherzustellen, dass keine laufenden MySQL-Prozesse mehr hängen.

Zu diesem Zeitpunkt sollten Sie in der Lage sein, mysql neu zu installieren und zu starten.


0

Führen Sie mysql-test-run aus und Sie sollten die folgende Ausgabe sehen:

./mysql-test-run
Logging: ./mysql-test-run  
2013-09-14 03:39:32 2566 [Warning] Setting lower_case_table_names=2 because file system for /var/folders/fr/sn4l2f393_v_ytcwkb0lx7_40000gp/T/_M2mZFQPjV/ is case insensitive
2013-09-14 03:39:32 2566 [Note] Plugin 'FEDERATED' is disabled.
2013-09-14 03:39:32 2566 [Note] Binlog end
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'MyISAM'
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'CSV'
MySQL Version 5.6.13
Checking supported features...
 - SSL connections supported
Using suites: main,sys_vars,binlog,federated,rpl,innodb,innodb_fts,perfschema,funcs_1,opt_trace,parts,auth_sec
Collecting tests...
 - adding combinations for binlog



 - adding combinations for rpl
Removing old var directory...
Creating var directory '/Users/das/mysql/mysql-5.6.13-osx10.7-x86_64/mysql-test/var'...
Installing system database...
Using server port 50409

==============================================================================

TEST                                      RESULT   TIME (ms) or COMMENT
--------------------------------------------------------------------------

0

Wenn Sie Ihren Datenverzeichnis verschieben, müssen Sie nicht nur die neuen Datenverzeichnisberechtigungen erteilen, sondern auch sicherstellen, dass alle übergeordneten Verzeichnisse über Berechtigungen verfügen.

Ich habe meinen Datadir auf eine Festplatte verschoben, die in Ubuntu wie folgt gemountet ist:

/media/*user*/Data/

und mein Datenverzeichnis war Datenbanken .

Ich musste für jedes Medien-, Benutzer- und Datenverzeichnis die Berechtigung 771 festlegen :

sudo chmod 771 *DIR*

Wenn dies nicht funktioniert, können Sie MySQL auch zum Laufen bringen, indem Sie den Benutzer in /etc/mysql/my.cnf in root ändern. Es gibt jedoch zweifellos einige Probleme, dies aus Sicherheitsgründen zu tun.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.