CentOS 6.4 (x64) / MySQL 5.6.10
Habe MySQL aus den Quelldateien installiert und es an seinem ursprünglichen Speicherort (/var/lib/mysql) problemlos gestartet. Ich habe alles auf ein anderes Volume (/u0/mysql) verschoben und es mehrere Male von SELinux ausgenommen ( cat /var/log/audit/audit.log | audit2allow -M mysql-*
gefolgt von semodule -i mysql-*.pp
). Nach jeder dieser Runden versuche ich, den Dienst neu zu starten und sehe diesen Fehler:
Starting MySQL..The server quit without updating PID file (/u0/mysql/server.pid).
[FAILED]
Nach 3-4 Runden des Hinzufügens von Ausnahmen bemerkte ich, dass sich die Dateien nicht mehr änderten. Das heißt, alles, was auf diese Weise hinzugefügt werden konnte, war bereits hinzugefügt worden. Aus Neugierde lief ich los audit2why -a
und bekam eine Menge von:
type=AVC msg=audit(1387207317.009:666): avc: <some permission> for pid=20640
comm="mysqld" dev=sdc1 ino=36831373 scontext=unconfined_u:system_r:mysqld_t:s0
tcontext=system_u:object_r:default_t:s0 tclass=file
Was caused by:
Unknown - would be allowed by active policy
Possible mismatch between this policy and the one under which the audit message was generated.
Possible mismatch between current in-memory boolean settings vs. permanent ones.
Dies lässt mich glauben, dass essollenfunktionieren. Wenn ich SELinux deaktiviere, setenforce 0
startet MySQL einwandfrei, es (SE) stört also immer noch.
Die Suche in SF wurdeDas- habe es versucht, ohne dass sich am Ergebnis etwas geändert hätte.
Also: Wie finde ich heraus, wo die Blockade ist?
BEARBEITEN:
[root@server u0]# ls -ldZ /var/lib/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /var/lib/mysql
[root@server u0]# ls -ldZ /u0/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /u0/mysql
Antwort1
Sie müssen den Sicherheitskontext des neuen Verzeichnisses so ändern, dass er mit /var/lib/mysql übereinstimmt.
Zum Beispiel:
ls -ldZ /var/lib/mysql/
drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/
Ändern Sie dann das neue Verzeichnis mit chcon auf die gleichen Einstellungen
chcon -R -u system_u -r object_r -t mysqld_db_t /u0/mysql
Antwort2
Sie können auch Folgendes versuchen:
chcon --reference=/path/to/existing/file /path/to/new/file
Übrigens, hier ist eine großartige Einführung in SELinux:http://www.youtube.com/watch?v=MxjenQ31b70vom Redhat 2012 Summit. Suchen Sie in Ihren Protokolldateien auch nach Fehlermeldungen in /var/log/audit/audit.log
oder /var/log/messages
.