Mysql. Collegamento a socket unix: autorizzazione negata


12

Impossibile avviare mysql con:

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

Un altro mysql non è runnig:

[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

Le autorizzazioni per "/ tmp" e "/ var / lib / mysql" sono 777 /

Eventuali suggerimenti?

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 e plugin.frm sono presenti in / var / lib / mysql / mysql /.

Niente in esecuzione sulla porta 3306.

mysql.sock non esiste. Ho provato a crearlo da solo, ma dopo il riavvio è stato rimosso.

mount (tutto 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)

Questo problema è apparso oggi quando ho provato a clonare il mio sito su un sottodominio.


correre mysql_upgradecome suggerito?
NickW

No. touch /var/lib/mysql/mysql.sock - Inoltre non funziona
Aldwin

Esiste un file plugin.MYD, plugin.MYI e plugin.frm in / var / lib / mysql / mysql?
NickW

Inoltre, esiste il file mysql.sock nella directory / var / lib / mysql?
NickW

C'è già qualcosa in esecuzione sulla porta 3306?
aardvark,

Risposte:


15

1) Innanzitutto assicurati di eliminare il file socket esistente usando il comando rm.

rm /var/lib/mysql/mysql.sock

2) Uccidi tutti i processi MySQL esistenti tramite il seguente comando.

service mysql stop

3) Molto importante: assicurarsi che l'autorizzazione per la directory del database MySQL nella /var/lib/cartella sia mysql: root

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

4) Con le informazioni di cui sopra dovresti essere in grado di avviare MySQL correttamente e il file socket dovrebbe essere creato correttamente nella directory del database.

service mysql start

Uso un server Ubuntu e questo non ha funzionato.
Vitor Mazuco,

6

Grazie alla risposta di @ Abhishek unita all'output di mysqld (Impossibile utilizzare /var/run/mysqld/mysqld.sock) sono riuscito a risolverlo con un comando:

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

Quindi si avvia correttamente:

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..

1
Il vostro benvenuto dal futuro :)
Daniel Kmak,

3

Il problema può essere causato da qualsiasi condizione che impedisce al demone MySQL di scrivere un file socket nel percorso /var/lib/mysql. Le altre risposte, come un filesystem di sola lettura o la proprietà errata della directory, affrontano vari motivi per cui MySQL potrebbe non essere in grado di scrivere sul socket.

Un'altra possibile ragione è che /var/lib/mysqlpotrebbe avere il contesto SELinux errato. È possibile diagnosticare questa condizione verificando i recenti dinieghi di SELinux AVC dopo aver tentato di avviare il demone MySQL:

ausearch -m avc --start recent

Se SELinux sta negando l'accesso per creare il file socket, vedrai un messaggio di errore come questo:

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

Per risolvere un rifiuto di SELinux, prova a ripristinare il contesto predefinito della directory (la tua distribuzione dovrebbe impostare il contesto corretto di mysqld_db_tquando hai installato MySQL o MariaDB):

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

Se hai personalizzato i contesti sul tuo sistema, risolvere il problema va oltre lo scopo di questo post.


Su CentOS 7 con SELinux questo è quello che stavo affrontando e ripristinando il contesto è stato risolto.
Ken J

1

Sulla base di ciò che scrivi, ti suggerisco di verificare se il tuo filesystem è montato in sola lettura.

130408 ​​11:31:22 mysqld_safe Avvio del demone mysqld con database da / var / lib / mysql / usr / libexec / mysqld: la tabella 'plugin' è di sola lettura


0

Ho provato tutte le altre risposte per risolvere il problema. Sembra che quando ho impostato selinux su permissive: setenforce 0ho potuto avviare il server.

Ho quindi modificato la directory sock /var/lib/mysqlconcedendo le autorizzazioni selinux alla directory:

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

Una volta fatto, abilito selinux usando setenforce 1avviato il servizio mysql e tutto è andato bene.

Spero che questo aiuti gli altri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.