MySQL. 유닉스 소켓에 바인딩 : 권한 거부


12

다음으로 mysql을 시작할 수 없습니다 :

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

"/ tmp"및 "/ var / lib / mysql"에 대한 권한은 777 /

어떤 제안?

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 및 plugin.frm은로 / var / lib / mysql을 / mysql을 / 존재한다.

포트 3306에서 실행중인 것이 없습니다.

mysql.sock이 존재하지 않습니다. 직접 만들려고했지만 다시 시작한 후에 제거되었습니다.

마운트 (모든 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)

이 문제는 오늘 하위 도메인에서 내 사이트를 복제하려고 할 때 나타났습니다.


mysql_upgrade제안대로 실행 ?
NickW

터치 /var/lib/mysql/mysql.sock-작동하지 않음
Aldwin

/ var / lib / mysql / mysql 아래에 plugin.MYD, plugin.MYI 및 plugin.frm 파일이 있습니까?
NickW

또한 mysql.sock 파일이 / var / lib / mysql 디렉토리에 있습니까?
NickW

3306 포트에서 이미 실행 중입니까?
aardvark

답변:


15

1) 먼저 rm 명령을 사용하여 기존 소켓 파일을 삭제하십시오.

rm /var/lib/mysql/mysql.sock

2) 다음 명령을 통해 기존의 모든 MySQL 프로세스를 종료하십시오.

service mysql stop

3) 매우 중요 : /var/lib/폴더 아래의 MySQL 데이터베이스 디렉토리에 대한 권한 이 mysql : root 인지 확인하십시오 .

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

4) 위의 정보를 사용하여 MySQL을 성공적으로 시작할 수 있어야하며 데이터베이스 파일 아래에 소켓 파일이 작성되어야합니다.

service mysql start

우분투 서버를 사용했는데 작동하지 않았습니다.
Vitor Mazuco

6

@Abhishek의 답변과 mysqld 출력 (/var/run/mysqld/mysqld.sock을 사용할 수 없음) 덕분에 하나의 명령 으로이 문제를 해결할 수있었습니다.

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

그런 다음 제대로 시작됩니다.

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
미래에서 오신 것을 환영합니다 :)
Daniel Kmak 11:30

3

MySQL 데몬이 소켓 파일을 경로에 쓰지 못하게하는 조건으로 인해 문제가 발생할 수 있습니다 /var/lib/mysql. 읽기 전용 파일 시스템 또는 잘못된 디렉토리 소유권과 같은 다른 답변은 MySQL이 소켓에 쓸 수없는 다양한 이유를 해결합니다.

또 다른 가능한 이유는 /var/lib/mysql잘못된 SELinux 컨텍스트를 가질 수 있기 때문입니다 . MySQL 데몬을 시작한 후 최근 SELinux AVC 거부를 확인하여이 상태를 진단 할 수 있습니다.

ausearch -m avc --start recent

SELinux가 소켓 파일을 작성하기위한 액세스를 거부하는 경우 다음과 같은 오류 메시지가 표시됩니다.

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

SELinux 거부를 해결하려면 디렉토리의 기본 컨텍스트를 복원하십시오 (분배 mysqld_db_t시 MySQL 또는 MariaDB를 설치할 때 의 올바른 컨텍스트를 설정해야 함 ).

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

시스템의 컨텍스트를 사용자 정의한 경우 문제점 수정은이 글의 범위를 벗어납니다.


SELinux를 사용하는 CentOS 7에서 이것은 내가 직면하고 컨텍스트를 복원 한 것입니다.
Ken J

1

작성한 내용에 따라 파일 시스템이 읽기 전용으로 마운트되어 있는지 확인하는 것이 좋습니다.

130408 ​​11:31:22 mysqld_safe / var / lib / mysql / usr / libexec / mysqld에서 데이터베이스로 mysqld 데몬 시작 : 'plugin'테이블은 읽기 전용


0

문제를 해결하기 위해 다른 모든 답변을 시도했습니다. selinux를 허용으로 설정 setenforce 0하면 서버를 시작할 수 있습니다.

그런 다음 디렉토리에 /var/lib/mysqlselinux 권한을 부여 하는 sock 디렉토리를 수정했습니다 .

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

완료되면 setenforce 1mysql 서비스 를 시작하여 selinux를 사용할 수 있으며 모든 것이 잘되었습니다.

이것이 다른 사람들을 돕기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.