MySQL을 시작할 때“mysql / plugin.frm 파일을 찾을 수 없습니다”


17

MySQL 서버를 시작할 때 다음 오류가 발생합니다.

/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

나는 mysql_upgrade그것을 재건하기 위해 달려 왔으며 재건을 위해 일한다. 그렇게하기 전에 MySQL을 제거하고 설치했습니다. 그러나 다시 시작하려고 할 때 동일한 오류가 발생합니다. 모든 파일과 디렉토리가 mysql사용자에 의해 생성되므로 권한 문제가 아니라고 확신합니다 .

이 오류를 해결하는 방법에 대해 조언 해 주시겠습니까?


selinux도이 문제를 일으킬 수 있습니다.
Ross

답변:


16

비표준 위치에 mysql 데이터 디렉토리가 있고 시스템에 apparmor가있는 경우, /etc/apparmor.d/usr.sbin.mysqld데이터 디렉토리가 화이트리스트에 있는지 확인 하십시오. 구성은 다음과 같아야합니다.

/mysql/data/dir/ r, #trailing slash is mandatory
/mysql/data/dir/** rwk,

config를 변경 한 후 Apparmor 데몬을 다시 시작해야합니다.


1
apparmor때때로 우리를 깨우기 위해 돌아온다. 그래서 우리는 그를 잊지 않는다.
Ring Ø

1
와! 이 답변을 찾고 많은 시간. 감사!
Diego Andrés Díaz Espinoza

내 경우에는 사용자 정의 temp dir도 사용하고에서 일부 줄을 모방해야한다는 것을 알았습니다 /etc/apparmor.d/abstractions/user-tmp. 내가 넣어하는 경우 owner /mysql-tmp/** rwkl, /mysql-tmp/ r,/etc/apparmor.d/local/usr.sbin.mysqld그 우분투 14.04에 나를 위해 일하기 시작했다.
amacleod

12

권한에 관한 것이 아닙니까? 오류 번호 : 13 :

$ perror 13
OS error code  13:  Permission denied

시도 우선의 DATADIR의 소유권 변경하는 것입니다 MySQL의를 실행할 경우, 예를 들어, MySQL의 사용자로 mysql을 :

chown -R mysql:mysql /path/to/datadir

확인해야 할 또 다른 사항은 mysqld 프로세스 소유자 (대부분 mysql )가 대상에 필요한 권한이 tmpdir로 정의되어 있는지 입니다. 그리고 위와 같은 이유로 작동하지 않으면 mysqld 프로세스를 추적하여 권한이 거부 되는 위치와 이유를 확인하십시오 .

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log

MySQL 5.1에서 5.7로 업그레이드 할 때 동일한 문제가 발생했습니다. mysql 사용자 가 / var / lib / mysql 디렉토리의 소유권을 잃은 것으로 보입니다 .
Rob

1

Dimitre에 동의합니다. 이 문제는 주로 권한이 충분하지 않기 때문에 발생합니다. MySql 루트 폴더의 소유권을 mysql로 ​​변경하십시오.

chown -R mysql:mysql [mysql root folder]

그래도 Mysql 스크립트의 권한을 사용자 정의 사용자로 변경할 수 있습니다.

chown my_mysql:my_mysql [mysqld etc]

이것은 나를 위해 일했습니다.


1

필자의 경우 ibdata1폴더가 포함 된 MySQL 데이터 디렉토리 를 다른 파티션 에 배치해야 ibdata1했습니다. 너무 빠르게 증가하고 메모리 문제가 발생 했기 때문 입니다. 이를 위해 아래와 같이 my.cnf 파일을 변경해야했습니다.

my.cnf는 다음과 같습니다.

datadir         =  /var/lib/mysql

지금 my.cnf :

datadir         = /home/ubuntu/data/mysql

나는 시도했다

sudo chown -R mysql:mysql  /home/ubuntu/data/mysql

그러나 여전히 위의 오류가 동일합니다. 그런 다음 /etc/apparmor.d/usr.sbin.mysqld파일 을 변경하려고했습니다 . 그것은 나를 위해 잘 작동했습니다.

에 새 폴더를 허용 목록에 추가해야합니다 usr.sbin.mysqld.

 # /var/lib/mysql/ r,
 #/var/lib/mysql/** rwk,

위의 줄 대신에

 /home/ubuntu/data/mysql/ r,
 /home/ubuntu/data/mysql/** rwk,

그런 다음 MySQL 서버를 다시 시작하십시오.


1

SELinux를 실행하는 경우 다음 사항도 도움이 될 수 있습니다.

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa

나를 restorecon -R /var/lib/mysql위해 디렉토리에 대한 SELinux 설정을 올바르게 복원 하는 데 도움이되었습니다.
세비

0

5.5에서 5.6으로 업그레이드 한 후이 문제가 발생했습니다.

이상하게도 mysql 사용자가 제거되고 다시 생성 된 모든 mysql 파일이 본질적으로 권한을 '손실'했습니다.

나는 mysql 디렉토리로 이동하여 이것을 발견했다 chown mysql:mysql. dirs와 파일, 그리고 voila


-1

이 간단한 chown작업도 저에게 효과적이었습니다.

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

고맙게도, 의류를 가지고 노는 것은 복잡하고 편집하기가 어렵습니다.

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