MySQL이 / tmp에 쓸 수 없어 다시 시작하지 못했습니다.


11

orthomcl을 사용 하는 프로그램을 실행 중이었습니다 mysql. 이 프로그램은 전에 같은 컴퓨터에서 정상적으로 작동했습니다. 이번에는 오류 메시지가 나타납니다.

DBD::mysql::st execute failed: Can't create/write to file '/tmp/#sql_700_1.MYI' (Errcode: 13) at /usr/local/bioinf/orthomclSoftware-v2.0.9/bin/orthomclPairs line 709, <F> line 14.

mysql서버 를 다시 시작하려고했지만 서버가 종료되었지만 시작하지 못했습니다.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.log그리고 /var/log/mysql.err비어 있습니다. 에서 제거 및 재설치 mysql-server및 제거 ib_logfile*를 포함하여 여기에서 찾은 몇 가지를 시도 했습니다 /var/lib/mysql.

내가 시도한 다른 것은

sudo dpkg-reconfigure mysql-server-5.5

오류 메시지는 다음과 같습니다.

/usr/sbin/mysqld: Can't create/write to file '/tmp/ibNzqwO0' (Errcode: 13)
InnoDB: Error: unable to create temporary file; errno: 13
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

다음은 몇 가지 정보입니다 dmesg | grep mysql.

[3115187.338273] init: mysql main process (44255) terminated with status 1
[3115187.338417] init: mysql main process ended, respawning
[3115187.356361] init: mysql post-start process (44256) terminated with status 1
[3116827.473256] type=1400 audit(1396394069.224:132): apparmor="DENIED" operation="open" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/" pid=45396 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[3116827.582489] type=1400 audit(1396394069.332:133): apparmor="DENIED" operation="mknod" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/#sql_b154_0.MYI" pid=45402 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
[3116827.908448] type=1400 audit(1396394069.660:134): apparmor="DENIED" operation="mknod" parent=45317 profile="/usr/sbin/mysqld" name="/home/tmp/ibbPfaqP" pid=45415 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=118 ouid=118
[3116841.623608] type=1400 audit(1396394083.372:139): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=45443 comm="apparmor_parser"
[3116841.771621] init: mysql pre-start process (45474) terminated with status 1

이와 같은 많은 줄이있었습니다.

MySQL 서버에 어떤 문제가 있는지 알아낼 수있는 사람이 있습니까?

많은 감사합니다.

답변:


15

그 이유는 귀하 /tmp가 다른 위치와 연결되어 있기 때문입니다 /home/tmp. 그러나 MySQL은 AppArmor에 의해 무장되어 자유롭게 쓰기를 허용하지 않습니다 /home/tmp. 상황을 해결하기 위해를 편집하고 적절히 /etc/apparmor.d/abstractions/user-tmp추가 할 수 있습니다 /home/tmp. 나를 위해 여분의 라인

  owner /home/tmp/**    rwkl,
  /home/tmp/            rw,

트릭을했다.


1
완전한! 문제를 즉시 해결했습니다. 나는 그것이 심볼릭 링크와 관련이 있다고 확신했다!
— YonoRan

1
변경 사항을 적용하려면 의류를 다시 시작해야했습니다.sudo /etc/init.d/apparmor restart
— Nadjib Mami

6

에 대한 올바른 권한이없는 것 같습니다 /tmp. 다음 명령으로 문제를 해결할 수 있습니다.

sudo chmod 1777 /tmp

그러면 권한이 777(모든 사람을위한 rwx)로 설정되고 /tmp디렉토리에 권장되는 고정 비트도 설정 됩니다. 에 설명 된대로 man chmod:

제한된 삭제 플래그 또는 끈적한 비트

제한된 삭제 플래그 또는 고정 비트는 단일 비트이며 해석은 파일 유형에 따라 다릅니다. 디렉토리의 경우 권한이없는 사용자가 파일이나 디렉토리를 소유하지 않는 한 디렉토리에서 파일을 제거하거나 이름을 바꾸는 것을 방지합니다. 이것을 디렉토리에 대한 제한된 삭제 플래그라고하며, 일반적으로 / tmp와 같은 쓰기 가능한 디렉토리에 있습니다. 일부 구형 시스템의 일반 파일의 경우 비트는 프로그램의 텍스트 이미지를 스왑 장치에 저장하므로 실행시 더 빨리로드됩니다. 이것을 끈적 끈적한 비트라고합니다.


@ScottSeverance는 변경을 위해 코드를 따옴표로 변경하지 마십시오. 그렇습니다. 인용 부호는 알고 있지만 코드 블록은 더 나은 서식을 제공하고 헤더와 들여 쓰기를 존중합니다. 당신이 그것을 편집 한 방식으로 모든 것이 같은 줄에 있습니다.
— terdon

1
코드로 포맷 할 때 일정한 가로 스크롤없이 휴대 전화에서 읽을 수 없기 때문에 변경했습니다. 따옴표를 코드로 형식화하면 실제로 이점이 없습니다. 제목이 같은 회선에있는 것을 좋아하지 않는 경우 전화기의 사용자 표시를 손상시키지 않으면 서이를 수정하는 방법이 있습니다.
— Scott Severance

@ScottSeverance 아, 공정한, 나는 그것이 전화에 문제를 일으키는 것을 깨달았다. 좋아요, 그럼 따옴표 블록에 넣겠습니다. 일반 브라우저에서 편집 내용 (설명없이)이 더 나빠 보이고 올바르게 렌더링되는지 확인하지 않았기 때문에 화가났습니다. 그리고 당신은 다시 편집하고 완벽합니다, 감사합니다!
— terdon

1
내 것이 올바른 해결책입니다. MySQL은 Apparmored되고 Apparmor는 confs /tmp를 변경하지 않고 다른 위치로 이동하는 것을 좋아하지 않습니다. 감사는 파일 시스템에 대한 권한 거부 문제가 아니라 의류 보호자임을 지적합니다.
— Antti Haapala
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.