"Kann die Datei mysql / plugin.frm nicht finden" beim Starten von MySQL


17

Wenn ich meinen MySQL-Server starte, erhalte ich folgende Fehlermeldung:

/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 gelaufen mysql_upgrade, um es wieder aufzubauen, und es funktioniert, um es wieder aufzubauen. Vorher habe ich MySQL entfernt und installiert. Beim Neustart wird jedoch derselbe Fehler angezeigt. Ich bin sicher, dass es kein Berechtigungsproblem ist, da alle Dateien und Verzeichnisse vom mysqlBenutzer erstellt werden.

Können Sie mir raten, wie Sie diesen Fehler beheben können?


Selinux kann dieses Problem ebenfalls verursachen.
Ross

Antworten:


16

Wenn Sie ein nicht standardmäßiges mysql-Datenverzeichnis haben und Ihr System über Apparmor verfügt, stellen /etc/apparmor.d/usr.sbin.mysqldSie sicher, dass Ihr Datenverzeichnis auf der Whitelist steht. 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.


1
apparmorkommt zurück, um uns von Zeit zu Zeit zu wecken, nur damit wir ihn nicht vergessen ...
Ring Ø

1
Beeindruckend! viel Zeit auf der Suche nach dieser Antwort. Vielen Dank!
Diego Andrés Díaz Espinoza

In meinem Fall verwende ich auch ein benutzerdefiniertes temporäres Verzeichnis und musste einige Zeilen von imitieren /etc/apparmor.d/abstractions/user-tmp. Als ich legte owner /mysql-tmp/** rwkl, /mysql-tmp/ r,in /etc/apparmor.d/local/usr.sbin.mysqldsie begann für mich arbeiten auf Ubuntu 14.04.
Amacleod

12

Sind Sie sicher, dass es nicht um Berechtigungen geht? Errno: 13 :

$ perror 13
OS error code  13:  Permission denied

Das erste, was Sie versuchen müssen, ist, den Eigentümer des Datenverzeichnisses von MySQL zu ändern , zum Beispiel, wenn Sie MySQL mit dem Benutzer mysql ausführen :

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

Sie müssen auch überprüfen, ob der Eigentümer des mysqld- Prozesses (höchstwahrscheinlich mysql ) über die erforderlichen Berechtigungen für das als tmpdir definierte Ziel verfügt . Wenn dies aus irgendeinem Grund nicht funktioniert, versuchen Sie, den mysqld- Prozess zu verfolgen, um festzustellen , wo und warum die Berechtigung verweigert wird :

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

Ich bin beim Upgrade von MySQL 5.1 auf 5.7 auf dasselbe Problem gestoßen. Es scheint, dass Benutzer mysql den Besitz des Verzeichnisses / var / lib / mysql verloren hat .
Rob

1

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

In meinem Fall musste ich das MySQL-Datenverzeichnis einschließlich des ibdata1Ordners in einer anderen Partition platzieren, da mein Verzeichnis ibdata1zu 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 trotzdem den gleichen obigen fehler. Dann habe ich versucht, die /etc/apparmor.d/usr.sbin.mysqldDatei zu ändern . Es hat gut funktioniert für mich.

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

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

Anstelle der obigen Zeilen fügen Sie hinzu,

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

Starten Sie dann den MySQL-Server neu.


1

Wenn Sie SELinux verwenden, kann auch Folgendes helfen ...

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

Für mich hat es restorecon -R /var/lib/mysqlgeholfen, die SELinux-Einstellungen für das Verzeichnis korrekt wiederherzustellen.
Sebi

0

Ich hatte dieses Problem, nachdem ich von 5.5 auf 5.6 aktualisiert habe.

Seltsamerweise sah es so aus, als ob der mysqlBenutzer entfernt und neu erstellt wurde, was dazu führte, dass alle MySQL-Dateien im Wesentlichen ihre Berechtigungen "verloren" hatten ...

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


-1

So einfach chownhat es bei mir auch geklappt, kein Absturz mehr:

sudo chown -R mysql:mysql  /var/lib/mysql

Zum Glück wird das Spielen mit Appar- mor kompliziert und schwierig zu bearbeiten.

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.