Mysql. Auf Unix-Socket binden: Berechtigung verweigert

12

Ich kann mysql nicht starten mit:

130408 11:31:22 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
/usr/libexec/mysqld: Table 'plugin' is read only
130408 11:31:22 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130408 11:31:22  InnoDB: Initializing buffer pool, size = 8.0M
130408 11:31:22  InnoDB: Completed initialization of buffer pool
130408 11:31:23  InnoDB: Started; log sequence number 0 19514977
130408 11:31:23 [ERROR] Can't start server : Bind on unix socket: Permission denied
130408 11:31:23 [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?
130408 11:31:23 [ERROR] Aborting

130408 11:31:23  InnoDB: Starting shutdown...
130408 11:31:28  InnoDB: Shutdown completed; log sequence number 0 19514977
130408 11:31:28 [Note] /usr/libexec/mysqld: Shutdown complete
130408 11:31:28 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Ein anderes MySQL läuft nicht:

[root@triton667 etc]# ps ax | grep mysql
 9195 pts/1    S+     0:00 grep mysql

my.cnf:

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    tmpdir=/tmp
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    max_allowed_packet=256M

    [mysqld_safe]

    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

Berechtigungen für "/ tmp" und "/ var / lib / mysql" sind 777 /

Irgendwelche Vorschläge?

UPD1 :

[root@triton667 etc]# mysql_upgrade
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) trying to connect
FATAL ERROR: Upgrade failed

UPD2 : plugin.MYD, plugin.MYI und plugin.frm sind in / var / lib / mysql / mysql / vorhanden.

Auf Port 3306 läuft nichts.

mysql.sock existiert nicht. Ich habe versucht, es selbst zu erstellen, aber nach dem Neustart wurde es entfernt.

montieren (alle rw):

[root@triton667 mysql]# mount
/dev/md1 on / type ext4 (rw,noatime,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/md0 on /boot type ext2 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

Dieses Problem trat heute auf, als ich versuchte, meine Site auf einer Unterdomäne zu klonen.

Aldwin
quelle
mysql_upgradewie vorgeschlagen ausführen ?
NickW
Nein. Touch /var/lib/mysql/mysql.sock - Funktioniert auch nicht
Aldwin
Gibt es eine plugin.MYD-, plugin.MYI- und plugin.frm-Datei unter / var / lib / mysql / mysql?
NickW
Ist die Datei mysql.sock auch im Verzeichnis / var / lib / mysql vorhanden?
NickW
Läuft schon etwas auf 3306 Port?
Erdferkel

Antworten:

15

1) Stellen Sie zunächst sicher, dass Sie die vorhandene Socket-Datei mit dem Befehl rm löschen.

rm /var/lib/mysql/mysql.sock

2) Beenden Sie alle vorhandenen MySQL-Prozesse mit dem folgenden Befehl.

service mysql stop

3) Sehr wichtig: Stellen Sie sicher, dass die Berechtigung für das MySQL-Datenbankverzeichnis unter /var/lib/Ordner mysql: root lautet

chown -R mysql:root /var/lib/mysql

4) Mit den obigen Informationen sollten Sie in der Lage sein, MySQL erfolgreich zu starten, und die Socket-Datei sollte erfolgreich unter dem Datenbankverzeichnis erstellt werden.

service mysql start
Abhishek Anand Amralkar
quelle
Ich benutze einen Ubuntu-Server, und das hat nicht funktioniert.
Vitor Mazuco
6

Dank der Antwort von @ Abhishek in Kombination mit der Ausgabe von mysqld (Kann /var/run/mysqld/mysqld.sock nicht verwenden) konnte ich dieses Problem mit einem einzigen Befehl lösen:

chown -R mysql:root /var/run/mysqld

Dann geht es richtig los:

root@***:~# service mysql start
df: Warning: cannot read table of mounted file systems: No such file or directory
[ ok ] Starting MySQL database server: mysqld ..
[info] Checking for tables which need an upgrade, are corrupt or were 
not closed cleanly..
Daniel Kmak
quelle
1
Herzlich Willkommen aus der Zukunft :)
Daniel Kmak
3

Ihr Problem kann durch eine beliebige Bedingung verursacht werden, die verhindert, dass der MySQL-Dämon eine Socket-Datei in den Pfad schreibt /var/lib/mysql. Die anderen Antworten, wie beispielsweise ein schreibgeschütztes Dateisystem oder ein falscher Verzeichnisbesitz, sprechen verschiedene Gründe an, aus denen MySQL möglicherweise nicht in der Lage ist, in den Socket zu schreiben.

Ein weiterer möglicher Grund ist, dass /var/lib/mysqlmöglicherweise der falsche SELinux-Kontext vorliegt. Sie können diesen Zustand diagnostizieren, indem Sie nach dem Versuch, den MySQL-Daemon zu starten, nach aktuellen SELinux AVC-Ablehnungen suchen:

ausearch -m avc --start recent

Wenn SELinux den Zugriff zum Erstellen der Socket-Datei verweigert, wird folgende Fehlermeldung angezeigt:

time->Thu Feb  2 03:46:27 2017
type=SYSCALL msg=audit(1566106187.784:152): arch=c000004e syscall=49 success=no exit=-13 a0=4f a1=7ff3fd652e80 a2=6e a3=7fcd2d6523d40 items=0 ppid=1 pid=1820 auid=4294967295 uid=996 gid=994 euid=996 suid=996 fsuid=996 egid=994 sgid=994 fsgid=994 tty=(none) ses=4294967295 comm="mysqld" exe="/usr/sbin/mysqld" subj=system_u:system_r:mysqld_t:s0 key=(null)
type=AVC msg=audit(1566106187.784:152): avc:  denied  { create } for  pid=1820 comm="mysqld" name="mysql.sock" scontext=system_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:var_log_t:s0 tclass=sock_file

Um eine SELinux-Ablehnung aufzulösen, versuchen Sie, den Standardkontext des Verzeichnisses wiederherzustellen (Ihre Distribution sollte den richtigen Kontext für die mysqld_db_tInstallation von MySQL oder MariaDB festlegen ):

restorecon -R -v -f /var/lib/mysql

Wenn Sie die Kontexte auf Ihrem System angepasst haben, liegt die Behebung des Problems außerhalb des Bereichs dieses Beitrags.

Craig Finch
quelle
Auf CentOS 7 mit SELinux war dies das, was ich sah, und das Wiederherstellen des Kontexts behebte es.
Ken J
1

Ich würde vorschlagen, basierend auf dem, was Sie schreiben, zu überprüfen, ob Ihr Dateisystem schreibgeschützt gemountet ist.

130408 ​​11:31:22 mysqld_safe Der Start des mysqld-Daemons mit Datenbanken aus / var / lib / mysql / usr / libexec / mysqld: Die Tabelle 'plugin' ist schreibgeschützt

pkhamre
quelle
0

Ich habe alle anderen Antworten ausprobiert, um das Problem zu beheben. Es scheint, dass, wenn ich Selinux auf permissive setze: setenforce 0Ich konnte den Server starten.

Ich habe dann das /var/lib/mysqlsock- Verzeichnis geändert, um dem Verzeichnis Selinux-Berechtigungen zu erteilen:

semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
restorecon -R -v -f /var/lib/mysql

Sobald dies erledigt ist, aktiviere ich Selinux mit dem setenforce 1gestarteten MySQL-Dienst und alles war in Ordnung .

Hoffe das hilft anderen.

AussieBunyip
quelle