MariaDB 10 CentOS 7 beweglichen datadir leiden
Brand new "minimal" - Installation von CentOS 7 zusammen mit MariaDB 10. Ich habe eine zusätzliche montiert gespiegelte volume, das ich verwenden möchten, für die datadir. Startup-Sequenz ist in Ordnung und wird normal ausgeführt, wenn Sie meinen.cnf [mysqld] auskommentiert ist. Ich habe die Daten kopiert..
sudo cp -R -p /var/lib/mysql/* /mnt/mysql/
Die Berechtigungen sind identisch mit denen des Originals. Die Lautstärke ist in /etc/fstab und mountet fein
/dev/sdb1 /mnt/mysql xfs defaults 0 0
[root@femur mysql]# ls -la
total 110632
drwxr-xr-x. 5 mysql mysql 4096 Oct 20 15:27 .
drwxr-xr-x. 3 root root 18 Oct 16 16:46 ..
-rw-rw----. 1 mysql mysql 16384 Oct 20 15:27 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Oct 20 15:27 aria_log_control
-rw-r-----. 1 mysql root 7005 Oct 20 13:49 femur.err
-rw-rw----. 1 mysql mysql 12582912 Oct 20 15:27 ibdata1
-rw-rw----. 1 mysql mysql 50331648 Oct 20 15:27 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 Oct 20 12:21 ib_logfile1
-rw-rw----. 1 mysql mysql 0 Oct 20 12:22 multi-master.info
drwx--x--x. 2 mysql mysql 4096 Oct 20 12:21 mysql
drwx------. 2 mysql mysql 4096 Oct 20 13:37 performance_schema
drwxr-xr-x. 2 mysql mysql 6 Oct 20 12:21 test
dies ist meiner.cnf
!includedir /etc/my.cnf.d
[mysqld]
log_error = /var/log/mysql-error.log
user = mysql
datadir = /mnt/mysql
socket = /mnt/mysql/mysql.sock
Dies ist, was ich bekomme, wenn ich versuche, es zu starten...
'[root@femur mysql]# sudo systemctl start mysql.service
Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details.'
Keine der beiden Dateien sagt viel, aber dies ist in /var/log/mysql-Fehler.melden Sie
141020 16:07:09 mysqld_safe Starting mysqld daemon with databases from /mnt/mysql
141020 16:07:09 [Warning] Can't create test file /mnt/mysql/femur.lower-test
141020 16:07:09 [Note] InnoDB: Using mutexes to ref count buffer pool pages
141020 16:07:09 [Note] InnoDB: The InnoDB memory heap is disabled
141020 16:07:09 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
141020 16:07:09 [Note] InnoDB: Memory barrier is not used
141020 16:07:09 [Note] InnoDB: Compressed tables use zlib 1.2.7
141020 16:07:09 [Note] InnoDB: Using Linux native AIO
141020 16:07:09 [Note] InnoDB: Using CPU crc32 instructions
141020 16:07:09 [Note] InnoDB: Initializing buffer pool, size = 128.0M
141020 16:07:09 [Note] InnoDB: Completed initialization of buffer pool
2014-10-20 16:07:09 7f6cb59c9880 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
141020 16:07:09 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
141020 16:07:09 [ERROR] InnoDB: The system tablespace must be writable!
141020 16:07:09 [ERROR] Plugin 'InnoDB' init function returned error.
141020 16:07:09 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
141020 16:07:09 [ERROR] mysqld: File '/mnt/mysql/aria_log_control' not found (Errcode: 13 "Permission denied")
141020 16:07:09 [ERROR] mysqld: Got error 'Can't open file' when trying to use aria control file '/mnt/mysql/aria_log_control'
141020 16:07:09 [ERROR] Plugin 'Aria' init function returned error.
141020 16:07:09 [ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed.
141020 16:07:09 [Note] Plugin 'FEEDBACK' is disabled.
141020 16:07:09 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
141020 16:07:09 [ERROR] Unknown/unsupported storage engine: InnoDB
141020 16:07:09 [ERROR] Aborting
141020 16:07:09 [Note] /usr/sbin/mysqld: Shutdown complete
141020 16:07:09 mysqld_safe mysqld from pid file /mnt/mysql/femur.pid ended
http://www.reddit.com/r/linuxadmin/comments/2ebhpf/adventures_in_moving_mariadb_data_folder/ ein bisschen geholfen, aber ich war nicht in der Lage, um es an die Arbeit.
Jegliche Hilfe würde sehr geschätzt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem ist in der Tat SELinux; Sie müssen drei Dinge tun, bevor MariaDB /MySQL start auf CentOS 7:
mysql:mysql
mysqld_db_t
system_u
Dies ist ganz einfach:
Die ganze Sache, die ich tun musste, nach dem einstecken einer Festplatte von unten:
sudo semanage fcontext --add --type mysqld_db_t "/database/db(/.*)?"
grep logrotate /var/log/audit/audit.log | audit2allow -M mypol
Die Datei mypol.te sah so aus:module mypol 1.0; require { type mysqld_db_t; type logrotate_t; class lnk_file read; } #============= logrotate_t ============== #!!!! This avc is allowed in the current policy allow logrotate_t mysqld_db_t:lnk_file read;
Danach lief ich:semodule -i mypol.pp
Nicht mehr logrotate Warnungen in der Revision.log danach.Nun, das war interessant...
Es stellt sich heraus, dass CentOS 7 "minimal" installiert SELinux, das war offenbar die Verhinderung mysql schreiben, die montiert gespiegelten Satz. Ich war auf der Suche nach security-Elemente, die ich vielleicht nicht darüber nachgedacht haben, und fanden es richtig, dort in der Dokumentation. Ich hatte bisher gedacht (offensichtlich fälschlicherweise), dass SELinux war ein Verteilungs -, kein Modul. Einmal lief ich den test, um zu sehen, ob es dort war....
Ich vorübergehend deaktiviert, um zu testen.
Schließlich war ich in der Lage zu starten MariaDB mit dem Verzeichnis, in dem gespiegelten Satz als datadir und keine Fehler. Damit diese änderung dauerhaft wird (weil dieser server ist hinter einer firewall), die in /etc/selinux/config habe ich gemacht
Ich hoffe, dies hilft jemand anderes. Haben Sie einen großen Tag!
Fand ich diese Schritt für Schritt Anleitung für mich arbeiten: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/sect-Managing_Confined_Services-MariaDB-Configuration_Examples.html
, Die Sie installieren müssen:
yum install policycoreutils-python
Guide:
Ansicht der SELinux-Kontext, der Standardpfad für die Datenbank für mysql:
Dies zeigt mysqld_db_t, welches das default-context-element den Speicherort für Datenbank-Dateien. In diesem Kontext müssen manuell angewendet werden, um den neuen Speicherort der Datenbank wird in diesem Beispiel verwendet werden, um ordnungsgemäß zu funktionieren.
Halten Sie den mysqld-daemon:
Erstellen Sie ein neues Verzeichnis für den neuen Speicherort der Datenbank(en). In diesem Beispiel /mysql/verwendet wird:
Kopie der Datenbank-Dateien vom alten Speicherort an den neuen Speicherort:
Ändern Sie das Eigentum an diesem Standort zu ermöglichen, Zugang von der mysql-Benutzer und die Gruppe. Dies stellt die traditionellen Unix-Berechtigungen, die SELinux wird immer noch zu beobachten:
Führen Sie den folgenden Befehl, um den ursprünglichen Kontext des neuen Verzeichnis:
Rahmen usr_t dieses neu erstellte Verzeichnis ist derzeit nicht geeignet, um SELinux als Standort für MariaDB Datenbank-Dateien. Sobald der Kontext geändert wurde, MariaDB wird in der Lage sein, um richtig zu funktionieren in diesem Bereich.
Öffnen Sie die Haupt-MariaDB-Konfiguration-Datei /etc/my.cnf mit einem text-editor und ändern Sie die datadir-option, so dass es bezieht sich auf die neue Lage. In diesem Beispiel ist der Wert, der eingetragen werden sollte, ist /mysql:
Speichern Sie diese Datei und beenden.
Starten Sie mysqld. Sollte der Dienst nicht gestartet, und eine denial-Nachricht wird protokolliert in /var/log/messages Datei:
Job für mariadb.service ist fehlgeschlagen. See 'systemctl status von postgresql.service' and 'journalctl -xn' for details.
Jedoch, wenn der audit-daemon wird ausgeführt, und mit ihm die setroubleshoot service, die Verweigerung wird protokolliert in /var/log/audit/audit.log-Datei, statt:
SELinux verhindert /usr/libexec/mysqld "schreiben" Zugriff auf /mysql. Für eine vollständige SELinux-Meldungen. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71
Den Grund für diese Ablehnung ist, dass /mysql/ist nicht richtig gekennzeichnet für MariaDB Daten-Dateien. SELinux hindert MariaDB aus, die Zugang zum Inhalt beschriftet als usr_t. Führen Sie die folgenden Schritte aus, um dieses problem zu beheben:
Führen Sie den folgenden Befehl zum hinzufügen eines context-mapping für /mysql/. Beachten Sie, dass die semanageutility ist nicht standardmäßig installiert. Wenn es fehlt auf Ihrem system haben, installieren Sie die policycoreutils-pythonpackage.
Diese Zuordnung ist schriftlich an die /etc/selinux/targeted/contexts/files/file_contexts.lokale Datei:
/mysql(/.*)? system_u:object_r:mysqld_db_t:s0
Verwenden nun die restorecon-Dienstprogramm für diesen Kontext die Zuordnung zu den running system:
Nun, dass die /mysql/Lage bezeichnet worden ist, mit den richtigen Rahmen für MariaDB, mysqldstarts:
Bestätigen der Kontext hat sich geändert für /mysql/:
Der Ort wurde geändert und beschriftet, und mysqld gestartet wurde, erfolgreich. An dieser Stelle laufen alle Dienste sollten überprüft werden, um zu bestätigen normalen Betrieb.