"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?

amacleod
quelle
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.

xyzman
quelle
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
Dimitre Radoulov
quelle
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.

Muneeb Mirza
quelle
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.

Sithara
quelle
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
Mike Purcell
quelle
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

Wirklich nur Glück
quelle
-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.

tomthumb99
quelle