Mysql bin-log.index nicht gefunden
Frage
Ich habe meine Bin-Logs in einen anderen Ordner gebracht:
log-bin = /storage/mysql/bin-log
log-bin-index = /storage/mysql/bin-log.index
Wenn ich versuche, MySQLD zu starten, bekomme ich Folgendes:
/usr/libexec/mysqld: File '/storage/mysql/bin-log.index' not found (Errcode: 13)
Berechtigungen für Dateien und Verzeichnis sind in Ordnung, sudo -u mysql touch /storage/mysql/bin-log.index
Funktioniert gut und es gibt keinen Apparmor.
Irgendwelche Ideen, was könnte das verursachen?
Lösung
Selinux wurde installiert und ermöglichte keinen Zugriff auf diese Dateien.
Deaktivieren löst das Problem.
Andere Tipps
Basierend auf dieser Dokumentation von Red Hat: Kapitel 3. Selinux -Kontexte und man page
lesen:
Ich möchte Protokolldateien in /var/log/mysql
Anstatt von /var/log/mariadb
und lassen Sie Selinux aktiviert.
Das neu erstellte Protokollverzeichnis /var/log/mysql
wird standardmäßig für MySQL Server aufgrund von Selinux nicht zugänglich sein.
So:
grep
für String setroubleshoot
in /var/log/
und leiten Sie die angegebenen sealert
Befehle, um Details zum tatsächlichen Selinux -Problem zu finden, das Sie beobachten.
Zum Beispiel:
sealert -l 141804b3-9ae5-4484-be0b-741fc558ff6d
SELinux is preventing /usr/libexec/mysqld from 'read, write' accesses on the file bin_hull03.index.
***** Plugin catchall (100. confidence) suggests **************************
If you believe that mysqld should be allowed read write access on the bin_hull03.index file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'mysqld' --raw | audit2allow -M my-mysqld
# semodule -i my-mysqld.pp
Additional Information:
...
Dies ist in diesem Fall nicht unbedingt hilfreich.
Verwenden ls -lZ
um herauszufinden, was der Kontext von /var/log/mysql
ist relativ zu /var/log/mariadb
:
# ls -lZ /var/log/mysql /var/log/mariadb
drwxrwx---. root mysql unconfined_u:object_r:var_log_t:s0 mysql
drwxr-x---. mysql mysql system_u:object_r:mysqld_log_t:s0 mariadb
Passen Sie nun den Dateikontext des Baums an /var/log/mysql
.
Überprüfen Sie, welcher Wert der vermeintliche Wert ist, indem Sie den Kontext für abrufen /var/log/mariadb
Aus der Selinux -Konfigurationsdatenbank:
# semanage fcontext --list | egrep '/var/log/(mysql|mariadb)'
/var/log/mysql.* regular file system_u:object_r:mysqld_log_t:s0
/var/log/mysql(/.*)? all files system_u:object_r:mysqld_log_t:s0
Fügen Sie der Selinux -Einstellungsdatenbank einen Eintrag hinzu, um den Kontext des neuen Dateibaums zu definieren:
# semanage fcontext --add -s system_u -t mysqld_log_t '/var/log/mysql(/.*)?'
semanage fcontext --list | egrep '/var/log/(mysql|mariadb)'
/var/log/mysql.* regular file system_u:object_r:mysqld_log_t:s0
/var/log/mariadb(/.*)? all files system_u:object_r:mysqld_log_t:s0
/var/log/mysql(/.*)? all files system_u:object_r:mysqld_log_t:s
Setzen Sie SELinux -Attribute rekursiv auf dem neuen Dateibaum selbst:
restorecon -r -F /var/log/mysql/
Das gibt das, was wir wollen:
# ls -lZR /var/log/mysql/
/var/log/mysql/:
drwxrwx---. root mysql system_u:object_r:mysqld_log_t:s0 binary
drwxrwx---. root mysql system_u:object_r:mysqld_log_t:s0 general
-rw-rw----. mysql mysql system_u:object_r:mysqld_log_t:s0 mysqld_safe_log.err
drwxrwx---. root mysql system_u:object_r:mysqld_log_t:s0 relay
-rw-rw----. mysql mysql system_u:object_r:mysqld_log_t:s0 server.err
drwxrwx---. root mysql system_u:object_r:mysqld_log_t:s0 slow
/var/log/mysql/binary:
-rw-rw----. mysql mysql system_u:object_r:mysqld_log_t:s0 bin_hull03.000001
-rw-rw----. mysql mysql system_u:object_r:mysqld_log_t:s0 bin_hull03.000002
-rw-rw----. mysql mysql system_u:object_r:mysqld_log_t:s0 bin_hull03.index
/var/log/mysql/general:
/var/log/mysql/relay:
/var/log/mysql/slow: