Mysql. Bind pada unix socket: Izin ditolak


12

Tidak dapat memulai mysql dengan:

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

Mysql lain tidak 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

Izin pada "/ tmp" dan "/ var / lib / mysql" adalah 777 /

Ada saran?

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 dan plugin.frm ada di / var / lib / mysql / mysql /.

Tidak ada yang berjalan di port 3306.

mysql.sock tidak ada. Saya mencoba membuatnya sendiri, tetapi setelah restart itu dihapus.

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

Masalah ini muncul hari ini ketika saya mencoba mengkloning situs saya pada subdomain.


berjalan mysql_upgradeseperti yang disarankan?
NickW

Sentuh /var/lib/mysql/mysql.sock - Juga tidak berfungsi
Aldwin

Apakah ada file plugin.MYD, plugin.MYI dan plugin.frm di bawah / var / lib / mysql / mysql?
NickW

Juga, apakah file mysql.sock ada di direktori / var / lib / mysql?
NickW

Apakah ada yang sudah berjalan di port 3306?
aardvark

Jawaban:


15

1) Pertama-tama pastikan Anda menghapus file socket yang ada menggunakan perintah rm.

rm /var/lib/mysql/mysql.sock

2) Bunuh semua proses MySQL yang ada melalui perintah berikut.

service mysql stop

3) Sangat penting: Pastikan izin untuk direktori database MySQL di bawah /var/lib/folder harus mysql: root

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

4) Dengan informasi di atas Anda harus dapat memulai MySQL dengan sukses dan file socket harus dibuat dengan sukses di bawah direktori database.

service mysql start

Saya menggunakan Server Ubuntu, dan ini tidak berhasil.
Vitor Mazuco

6

Terima kasih atas jawaban Abhishek yang dikombinasikan dengan output mysqld (Tidak dapat menggunakan /var/run/mysqld/mysqld.sock) Saya berhasil menyelesaikan ini dengan satu perintah:

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

Kemudian mulai dengan benar:

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
Selamat datang dari masa depan :)
Daniel Kmak

3

Masalah Anda dapat disebabkan oleh kondisi apa pun yang mencegah daemon MySQL dari menulis file socket ke path /var/lib/mysql. Jawaban lainnya, seperti sistem file read-only atau kepemilikan direktori salah, menjawab berbagai alasan bahwa MySQL mungkin tidak dapat menulis ke soket.

Alasan lain yang mungkin adalah bahwa /var/lib/mysqlmungkin memiliki konteks SELinux yang salah. Anda dapat mendiagnosis kondisi ini dengan memeriksa penolakan SELinux AVC baru-baru ini setelah mencoba memulai daemon MySQL:

ausearch -m avc --start recent

Jika SELinux menolak akses untuk membuat file socket, Anda akan melihat pesan kesalahan seperti ini:

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

Untuk menyelesaikan penolakan SELinux, cobalah untuk mengembalikan konteks default direktori (distribusi Anda harus menetapkan konteks yang benar mysqld_db_tketika Anda menginstal MySQL atau MariaDB):

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

Jika Anda telah menyesuaikan konteks pada sistem Anda, memperbaiki masalah berada di luar cakupan tulisan ini.


Pada CentOS 7 dengan SELinux inilah yang saya hadapi dan mengembalikan konteks memperbaikinya.
Ken J

1

Berdasarkan apa yang Anda tulis, saya sarankan Anda memeriksa apakah filesystem Anda sudah dimount read-only.

130408 ​​11:31:22 mysqld_safe Memulai daemon mysqld dengan basis data dari / var / lib / mysql / usr / libexec / mysqld: Tabel 'plugin' hanya dapat dibaca


0

Saya mencoba semua jawaban lain untuk menyelesaikan masalah. Tampaknya ketika saya mengatur selinux ke permisif: setenforce 0Saya bisa memulai server.

Saya kemudian mengubah direktori sock yang /var/lib/mysqlmemberikan izin selinux ke direktori:

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

Setelah selesai, saya mengaktifkan selinux menggunakan setenforce 1memulai layanan mysql dan semuanya baik-baik saja.

Semoga ini bisa membantu orang lain.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.