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 mysql
Benutzer erstellt werden.
Können Sie mir raten, wie Sie diesen Fehler beheben können?
Antworten:
Wenn Sie ein nicht standardmäßiges mysql-Datenverzeichnis haben und Ihr System über Apparmor verfügt, stellen
/etc/apparmor.d/usr.sbin.mysqld
Sie sicher, dass Ihr Datenverzeichnis auf der Whitelist steht. Die Konfiguration sollte folgendermaßen aussehen:Der Apparmor-Daemon muss neu gestartet werden, nachdem Sie Änderungen an der Konfiguration vorgenommen haben.
quelle
apparmor
kommt zurück, um uns von Zeit zu Zeit zu wecken, nur damit wir ihn nicht vergessen .../etc/apparmor.d/abstractions/user-tmp
. Als ich legteowner /mysql-tmp/** rwkl, /mysql-tmp/ r,
in/etc/apparmor.d/local/usr.sbin.mysqld
sie begann für mich arbeiten auf Ubuntu 14.04.Sind Sie sicher, dass es nicht um Berechtigungen geht? Errno: 13 :
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 :
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 :
quelle
Ich stimme Dimitre zu. Dieses Problem tritt hauptsächlich aufgrund unzureichender Berechtigungen auf. Ändern Sie den Besitz des MySql-Stammordners in mysql.
Möglicherweise möchten Sie jedoch die Berechtigung von MySQL-Skripten für Ihren benutzerdefinierten Benutzer ändern.
Das hat bei mir funktioniert.
quelle
In meinem Fall musste ich das MySQL-Datenverzeichnis einschließlich des
ibdata1
Ordners in einer anderen Partition platzieren, da mein Verzeichnisibdata1
zu schnell wuchs und ein Speicherproblem auftrat. Dafür musste ich meine.cnf-Datei wie unten ändern.my.cnf war:
my.cnf jetzt:
Ich habe es versucht,
habe aber trotzdem den gleichen obigen fehler. Dann habe ich versucht, die
/etc/apparmor.d/usr.sbin.mysqld
Datei zu ändern . Es hat gut funktioniert für mich.Wir sollten unseren neuen Ordner in die Whitelist aufnehmen
usr.sbin.mysqld
.Anstelle der obigen Zeilen fügen Sie hinzu,
Starten Sie dann den MySQL-Server neu.
quelle
Wenn Sie SELinux verwenden, kann auch Folgendes helfen ...
quelle
restorecon -R /var/lib/mysql
geholfen, die SELinux-Einstellungen für das Verzeichnis korrekt wiederherzustellen.Ich hatte dieses Problem, nachdem ich von 5.5 auf 5.6 aktualisiert habe.
Seltsamerweise sah es so aus, als ob der
mysql
Benutzer 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:mysql
auf allen dirs und files und voilaquelle
So einfach
chown
hat es bei mir auch geklappt, kein Absturz mehr:Zum Glück wird das Spielen mit Appar- mor kompliziert und schwierig zu bearbeiten.
quelle