it-swarm.com.de

"Datei mysql / plugin.frm kann nicht gefunden werden" beim Starten von MySQL

Wenn ich meinen MySQL-Server starte, wird folgende Fehlermeldung angezeigt:

/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

Ich bin gerannt mysql_upgrade, um es neu zu erstellen, und es funktioniert, um es neu zu erstellen. Vorher habe ich MySQL entfernt und installiert. Beim Neustart wird jedoch der gleiche Fehler angezeigt. Ich bin sicher, dass es kein Berechtigungsproblem ist, da alle Dateien und Verzeichnisse vom Benutzer mysql erstellt werden.

Können Sie mir einen Rat geben, wie Sie diesen Fehler beheben können?

17
user3172679

Wenn Sie ein MySQL-Datenverzeichnis an einem nicht standardmäßigen Speicherort haben und Ihr System über Apparmor verfügt, stellen Sie sicher, dass /etc/apparmor.d/usr.sbin.mysqld hat Ihr Datenverzeichnis auf die Whitelist gesetzt. Die Konfiguration sollte folgendermaßen aussehen:

/mysql/data/dir/ r, #trailing slash is mandatory
/mysql/data/dir/** rwk,

Der Apparmor-Daemon muss neu gestartet werden, nachdem Sie Änderungen an der Konfiguration vorgenommen haben.

16
xyzman

Sind Sie sicher, dass es nicht um Berechtigungen geht? errno: 1:

$ perror 13
OS error code  13:  Permission denied

Das erste, was Sie versuchen sollten, ist, den Besitz des Datenverzeichnisses von MySQL zu ändern, wenn Sie beispielsweise MySQL mit dem Benutzer mysql ausführen:

chown -R mysql:mysql /path/to/datadir

Eine andere zu überprüfende Sache ist, ob der Prozessbesitzer mysqld (höchstwahrscheinlich mysql) die erforderlichen Berechtigungen für das als tmpdir definierte Ziel hat. Und wenn aus irgendeinem Grund das oben genannte nicht funktioniert, versuchen Sie, den mysqld -Prozess zu verfolgen, um zu sehen, wo und warum er Berechtigung verweigert:

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log
12

In meinem Fall musste ich das MySQL-Datenverzeichnis einschließlich des Ordners ibdata1 In eine andere Partitionierung verschieben, da mein ibdata1 Zu schnell wuchs und ein Speicherproblem auftrat. Dafür musste ich meine.cnf-Datei wie unten ändern.

my.cnf war:

datadir         =  /var/lib/mysql

my.cnf jetzt:

datadir         = /home/ubuntu/data/mysql

Ich habe es versucht,

Sudo chown -R mysql:mysql  /home/ubuntu/data/mysql

habe aber immer noch den gleichen obigen Fehler. Dann habe ich versucht, die Datei /etc/apparmor.d/usr.sbin.mysqld Zu ändern. Es hat gut für mich funktioniert.

Wir sollten unseren neuen Ordner in usr.sbin.mysqld Auf die Whitelist setzen.

 # /var/lib/mysql/ r,
 #/var/lib/mysql/** rwk,

Anstelle der obigen Zeilen hinzufügen,

 /home/ubuntu/data/mysql/ r,
 /home/ubuntu/data/mysql/** rwk,

Starten Sie dann den MySQL-Server neu.

1
Sithara

Ich stimme Dimitre zu. Dieses Problem tritt hauptsächlich aufgrund unzureichender Berechtigungen auf. Ändern Sie den Besitz des MySQL-Stammordners in MySQL.

chown -R mysql:mysql [mysql root folder]

Möglicherweise möchten Sie jedoch die Berechtigung von MySQL-Skripten für Ihren benutzerdefinierten Benutzer ändern.

chown my_mysql:my_mysql [mysqld etc]

Das hat bei mir funktioniert.

1
Muneeb Mirza

Wenn Sie SELinux ausführen, kann auch Folgendes hilfreich sein ...

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa
1
Mike Purcell

Ich hatte dieses Problem, nachdem ich ein Upgrade von 5.5 auf 5.6 durchgeführt hatte.

Seltsamerweise sah es so aus, als wäre der Benutzer mysql entfernt und neu erstellt worden, was dazu geführt hatte, dass alle MySQL-Dateien im Wesentlichen ihre Berechtigungen verloren hatten ...

Ich fand dies heraus, indem ich zum MySQL-Verzeichnis ging (was in meinem Fall nicht das Standardverzeichnis war, da ich es verschoben habe) und sah, dass der Besitzer nur eine UUID- und Guid-Nummer war ... Also lief ich einfach chown mysql:mysql auf allen Verzeichnissen und Dateien und voila

0