.sock 파일이 /etc/mysql/my.cnf에서 변경된 경우 MySQL 서버를 시작할 수 없습니다


8

우분투 12.04에 MySQL 서버 5.5를 설치했습니다. 다른 양말 파일에서 MySQL 서버를 시작하려고합니다. 기본적으로 MySQL은 /var/run/mysqld/mysqld.sock에서 실행됩니다.

/var/run/mysqld/mysqld1.sock에서 동일한 서버를 실행하려고합니다.

이를 위해 다음과 같이 변경했습니다.

  1. /etc/mysql/my.cnf로 변경
[고객]
    포트 = 3306
    소켓 = /var/run/mysqld/mysqld1.sock

[mysqld_safe]
    소켓 = /var/run/mysqld/mysqld1.sock
    좋은 = 0

[mysqld]
    사용자 = MySQL
    pid 파일 = /var/run/mysqld/mysqld.pid
    ** 소켓 = /var/run/mysqld/mysqld1.sock**
    포트 = 3306
    basedir = / usr
    datadir = / var / lib / mysql
    tmpdir = / tmp
    lc-messages-dir = / usr / share / mysql
  1. 또한 /etc/apparmor.d/usr/sbin.mysqld에 다음 줄을 추가했습니다.

    /var/run/mysqld/mysqld1.sock w,

    /var/run/mysqld/mysqld[1-9].sock w,

  2. 또한 / var / run / mysqld 디렉토리의 소유권을 mysql 사용자로 변경했습니다.

    ls -lA / var / run / | grep mysqld

    drwxrwxrwx 2 mysql mysql 40 12 월 31 일 17:24 mysqld

그러나 MySQL 서버를 시작하려고하면 다음 오류가 발생합니다 (루트 사용자로서)

    $ mysqld --user = mysql --verbose
    121231 18:40:56 [참고] 플러그인 'FEDERATED'가 비활성화되었습니다.
    121231 18:40:56 InnoDB : InnoDB 메모리 힙이 비활성화되었습니다
    121231 18:40:56 InnoDB : Mutexes 및 rw_locks는 GCC 원자 내장을 사용합니다
    121231 18:40:56 InnoDB : 압축 테이블은 zlib 1.2.3.4를 사용합니다
    121231 18:40:56 InnoDB : 버퍼 풀 초기화, 크기 = 128.0M
    121231 18:40:56 InnoDB : 버퍼 풀 초기화 완료
    121231 18:40:56 InnoDB : 지원되는 파일 형식은 Barracuda입니다.
    121231 18:40:57 InnoDB : 백그라운드 스레드가 시작되기를 기다리는 중
    121231 18:40:58 InnoDB : 1.1.8 시작; 로그 시퀀스 번호 1595685
    121231 18:40:58 [참고] 서버 호스트 이름 (바인드 주소) : '127.0.0.1'; 포트 : 3306
    121231 18:40:58 [참고]- '127.0.0.1'은 '127.0.0.1'로 해석됩니다.
    121231 18:40:58 [참고] IP에서 생성 된 서버 소켓 : '127.0.0.1'.
   **`121231 18:40:58 [오류] 서버를 시작할 수 없습니다 : 유닉스 소켓에 바인딩 : 권한이 거부되었습니다 **

    121231 18:40:58 [오류] 이미 다른 mysqld 서버가 소켓에서 실행되고 있습니까? 
    /var/run/mysqld/mysqld1.sock?
    121231 18:40:58 [오류] 중단 **
    121231 18:40:58 InnoDB : 종료 시작 중 ...
    121231 18:40:58 InnoDB : 종료가 완료되었습니다. 로그 시퀀스 번호 1595685
    121231 18:40:58 [참고] mysqld : 종료 완료

기본 소켓 파일로 서버를 시작하면 서버를 시작할 수 있습니다. 이 문제에 대해 Google에서 검색했지만 권한 문제임을 제안하는 솔루션 만 찾았습니다. 그러나 권한은 괜찮아 보입니다. 일부 사람들은 AppArmor가 원인 일 수 있다고 제안했지만 너무 스 니펫을 붙여 넣었습니다.

누군가 단서를 제공 할 수 있습니까?

[편집하다]

에 다음 출력이 표시됩니다 /var/log/syslog.

1 월 2 일 12:09:34 praveshp-lt mysqld : 130102 12:09:34 [참고] 플러그인 'FEDERATED'가 비활성화되었습니다.
1 월 2 일 12:09:34 praveshp-lt mysqld : 130102 12:09:34 InnoDB : InnoDB 메모리 힙이 비활성화되었습니다
1 월 2 일 12:09:34 praveshp-lt mysqld : 130102 12:09:34 InnoDB : Mutexes와 rw_locks는 GCC 원자 내장을 사용합니다.
1 월 2 일 12:09:34 praveshp-lt mysqld : 130102 12:09:34 InnoDB : 압축 테이블은 zlib 1.2.3.4를 사용합니다.
1 월 2 일 12:09:34 praveshp-lt mysqld : 130102 12:09:34 InnoDB : 버퍼 풀 초기화, 크기 = 128.0M
1 월 2 일 12:09:34 praveshp-lt mysqld : 130102 12:09:34 InnoDB : 버퍼 풀 초기화 완료
1 월 2 일 12:09:34 praveshp-lt mysqld : 130102 12:09:34 InnoDB : 지원되는 파일 형식은 Barracuda입니다.
1 월 2 일 12:09:35 praveshp-lt mysqld : 130102 12:09:35 InnoDB : 백그라운드 스레드가 시작되기를 기다리는 중
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 InnoDB : 1.1.8 시작; 로그 시퀀스 번호 1595685
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 [참고] 서버 호스트 이름 (바인드 주소) : '127.0.0.1'; 포트 : 3307
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 [참고]- '127.0.0.1'은 '127.0.0.1'로 해석됩니다.
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 [참고] IP에서 생성 된 서버 소켓 : '127.0.0.1'.
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 [오류] 서버를 시작할 수 없습니다 : 유닉스 소켓에 바인딩 : 권한이 거부되었습니다
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 [오류] 소켓에서 다른 mysqld 서버가 이미 실행 중입니까 : /var/run/mysqld/mysqld1.sock?
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 [오류] 중단
1 월 2 일 12:09:36 praveshp-lt mysqld : 
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 InnoDB : 시스템 종료 중 ...
1 월 2 일 12:09:36 praveshp-lt 커널 : [7060.098580] type = 1400 audit (1357108776.036 : 33) : apparmor = "DENIED"operation = "mknod"parent = 6702 profile = "/ usr / sbin / mysqld"name = "/run/mysqld/mysqld1.sock"pid = 7039 comm = "mysqld"requested_mask = "c"denied_mask = "c"fsuid = 116 ouid = 116
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 InnoDB : 종료 완료; 로그 시퀀스 번호 1595685
1 월 2 일 12:09:36 praveshp-lt mysqld : 130102 12:09:36 [참고] / usr / sbin / mysqld : 종료 완료

권한이 거부되었지만 올바른 권한을 설정 한 것 같습니다.


1. /usr/local/mysql및 에 대한 권한을 확인하십시오 /tmp. 최소 775 여야합니다. 2. /var/lib/폴더 아래의 mysql 데이터베이스 디렉토리에 대한 권한은 mysql:root ( chown mysql:root mysql) 이어야합니다.
Rinzwind

1
권한을 확인했는데 문제가없는 것 같습니다.
user117844

또한 /etc/apparmor.d/usr.sbin.mysqld이전 버전과 새 버전의 비교가 여기에 있습니다. bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/…
Rinzwind

답변:


5

로그의 다음 줄에서이 줄을 보면 Apparmor가 액세스를 거부 한 것으로 나타납니다.

Jan  2 12:09:36 praveshp-lt kernel: [ 7060.098580] type=1400 audit(1357108776.036:33):
     apparmor="DENIED" operation="mknod" parent=6702 profile="/usr/sbin/mysqld" 
     name="/run/mysqld/mysqld1.sock" pid=7039 comm="mysqld" requested_mask="c"
     denied_mask="c" fsuid=116 ouid=116

이를 허용하려면 /etc/apparmor.d/local/usr.sbin.mysqld아래 항목이 있는 파일 을 추가하고 MySQL을 다시 시작하십시오.

/var/run/mysqld/mysqld1.sock w,

이것을 지적 해준 Rinzwind 에게 감사합니다 .


하아! : D 약간의 검색을했다;)
Rinzwind

Apparmor 의 로컬 변경 디렉토리 를 사용하도록 답변을 개선했습니다 . 패키지 관리 기능을 사용하지 않으면 업그레이드 등을 수행 할 때 나중에 중단 될 가능성이 줄어 듭니다.
gertvdijk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.