CentOS 6.4(x64) / MySQL 5.6.10
소스 파일에서 MySQL을 설치하고 원래 위치(/var/lib/mysql)에서 정상적으로 시작했습니다. 모든 것을 다른 볼륨(/u0/mysql)으로 옮겼고 SELinux에서 몇 차례 면제했습니다( cat /var/log/audit/audit.log | audit2allow -M mysql-*
뒤에 semodule -i mysql-*.pp
). 이 작업이 끝날 때마다 서비스를 다시 시작하려고 하는데 다음 오류가 표시됩니다.
Starting MySQL..The server quit without updating PID file (/u0/mysql/server.pid).
[FAILED]
3~4번의 면제 추가 후에 파일이 더 이상 변경되지 않는 것을 확인했습니다. IE에서는 이런 방식으로 추가할 수 있는 모든 것이 이미 추가되었습니다. 호기심에 달려가서 audit2why -a
다음과 같은 것들을 얻었습니다.
type=AVC msg=audit(1387207317.009:666): avc: <some permission> for pid=20640
comm="mysqld" dev=sdc1 ino=36831373 scontext=unconfined_u:system_r:mysqld_t:s0
tcontext=system_u:object_r:default_t:s0 tclass=file
Was caused by:
Unknown - would be allowed by active policy
Possible mismatch between this policy and the one under which the audit message was generated.
Possible mismatch between current in-memory boolean settings vs. permanent ones.
이것이 나로 하여금 그것을 믿게 만든다.~해야 한다일하고 있어. SELinux를 비활성화하면 setenforce 0
mysql이 정상적으로 시작되므로 (SE)가 여전히 방해가 됩니다.
SF를 검색해 보니이것up - 결과에 변화가 없이 시도해 보았습니다.
SO: 막힌 곳이 어디인지 어떻게 알 수 있나요?
편집하다:
[root@server u0]# ls -ldZ /var/lib/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /var/lib/mysql
[root@server u0]# ls -ldZ /u0/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /u0/mysql
답변1
새 디렉토리의 보안 컨텍스트를 /var/lib/mysql과 동일하게 변경해야 합니다.
예를 들어:
ls -ldZ /var/lib/mysql/
drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/
그런 다음 chcon을 사용하여 새 디렉토리를 동일한 설정으로 변경하십시오.
chcon -R -u system_u -r object_r -t mysqld_db_t /u0/mysql
답변2
다음과 같이 시도해 볼 수도 있습니다.
chcon --reference=/path/to/existing/file /path/to/new/file
그런데, 여기 SELinux에 대한 훌륭한 소개가 있습니다:http://www.youtube.com/watch?v=MxjenQ31b70Redhat 2012 Summit에서. 또한 로그 파일에서 /var/log/audit/audit.log
또는 의 오류 메시지를 찾아보세요 /var/log/messages
.