AppArmor로 인해 MySQL이 시작되지 않습니까?


30

Kubuntu 16.04에 mysql-server-5.7을 설치하려고하는데 문제가 있습니다.

sudo apt install mysql-server 다음과 같은 출력을 제공합니다.

Setting up mysql-server-5.7 (5.7.18-0ubuntu0.16.04.1) ...
Renaming removed key_buffer and myisam-recover options (if present)
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since ons 2017-05-17 09:48:39 CEST; 10ms ago
  Process: 13622 ExecStartPost=/usr/share/mysql/mysql-systemd-start post (code=exited, status=0/SUCCESS)
  Process: 13621 ExecStart=/usr/sbin/mysqld (code=exited, status=2)
  Process: 13612 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 13621 (code=exited, status=2)

maj 17 09:48:39 anis systemd[1]: Failed to start MySQL Community Server.
maj 17 09:48:39 anis systemd[1]: mysql.service: Unit entered failed state.
maj 17 09:48:39 anis systemd[1]: mysql.service: Failed with result 'exit-code'.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

그리고 실행하여 문제를 해결하려고 할 때 journalctl -xe다음과 같은 결과가 나타납니다 .AppArmor가 문제를 일으키는 것으로 보입니다.

maj 17 09:53:14 anis systemd[1]: Starting MySQL Community Server...
-- Subject: Unit mysql.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mysql.service has begun starting up.
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=0
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:240): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:241): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=0
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:242): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/task/14767/mem" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.658:243): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/task/14767/mem" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis systemd[1]: mysql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT

이 문제를 해결하려면 어떻게해야합니까?


6
미래 독자들을위한 참고 사항 : Apparmor denied 메시지는 단지 경고 일 뿐이며 MySQL은 다른 이유로 종료 될 수 /var/log/mysql/error.log있습니다. 위의 / proc 및 / sys 파일에 액세스 할 수없는 경우에도 MySQL을 계속 실행할 수 있어야합니다.
— SystemParadox

디스크가 꽉 차지 않았는지 확인하십시오.
— Buttle Butkus

답변:


31

MySQL이 해당 파일에 액세스 할 수 있도록 apparmor 구성을 편집해야합니다. 로그 메시지는 당신을 말하고있다 /usr/sbin/mysqld요구 (읽기 r개방에) 액세스 /proc/14767/status, /sys/devices/system/node/(이 디렉토리를 읽을 원하기 때문에 슬래쉬),과 /proc/14767/task/14767/mem. 편집 할 파일은 /etc/apparmor.d/usr.sbin.mysqld입니다.

필자의 경우 중간에 어딘가에 두 줄을 추가하여 문제를 해결했습니다.

  /proc/*/status r,
  /sys/devices/system/node/ r,
  /sys/devices/system/node/node0/meminfo r,

(두 번째 줄의 마지막 슬래시에 유의하십시오.)

그런 다음 MySQL을 시작하고 더 많은 오류가 발생하면 해당 파일도 추가하고 다시 시도하십시오.

여기 다른 곳 에서이 문제에 대한 답변이 있습니다.


6
apparmour설치하기 위해 설정을 수동으로 편집해야하는 이유는 무엇입니까? 그렇다면 mysql문제가있는 것입니다.
— George Udosen

2
@George에 동의합니다! : 여기에 같은 문제를 공유하는 다른 사람들과 런치 패드 보고서입니다 bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 원래 기자가 다른 사람을 가지고 있지만 (대부분의 댓글은 여기에 같은 로그 메시지를보고는. )
— Paul A Jungwirth

3
/proc/*/status r불필요하게 열려 있습니다. Apparmor에는 현재 prid에 대한 matcher가 있으므로 다음과 같이 수행 할 @{PROC}/@{pid}/status r, 수 있습니다 node*/meminfo. 머신에 NUMA 지원 / 둘 이상의 CPU가 노출되어있는 경우 와일드 카드 액세스를 원할 수도 있습니다 .
— Martin Foot

3
또한 그 후 AppArmor의 다시 시작해야 할 수 있습니다 : sudo service apparmor restart
— Zbyszek

1
/etc/apparmor.d/local/user.sbin/mysqld기본 프로필 업데이트와 충돌을 피하기 위해 대신 넣는 것이 좋습니다. 기본 프로필에 이미 포함되어 있습니다
— Marat

6

그것은이있을 수 있습니다 : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739846을 너무 사용해보십시오

echo "exit 0" >> /etc/init.d/mysql
dpkg --configure -a

그것이 도움이되지 않으면 :

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-5.5
sudo apt-get install mysql-server

mysql을 완전히 제거하고 다시 설치하는 방법 경고 : 데이터베이스가 있으면 제거됩니다.


제안 해 주셔서 감사합니다! 내 /etc/init.d/mysql은 이미 exit 0끝났습니다. mysql-server를 제거하고 다시 설치하려고 시도했지만 도움이되지 않았습니다. 방금 mysql-common을 제거하지 않고 다시 시도했지만 도움이되지 않았습니다. 그것을 제거하려면 그것에 의존하는 많은 패키지를 제거해야합니다.
— Supernormal

방금 sudo apt remove --purge mysql-*모든 MySQL 항목을 완전히 제거하고 (버전 5.7이 있음) 수행 sudo apt install akonadi-server mysql-client mysql-server했지만 결과는 여전히 동일합니다. 여전히 같은 오류 메시지 journalctl -xe가 나타나고 위와 같이 AppArmor 문제가 있음을 나타냅니다.
— Supernormal

1

이 문제를 해결했습니다.

/etc/apparmor.d/local/usr.sbin.mysqld 편집

이 줄을 추가하십시오;

/data/ r,
/data/** rwk,

의류 서비스 재 장전

#sudo service apparmor reload

0

필자의 경우 위의 사용 후 Ubuntu 16.04에 mysql-server-5.7을 설치하려고하면 작동 한 것이 다음과 같습니다.

  1. 운영 sudo apt install mysql-server
  2. 위의 정확한 오류를 검사하십시오
  3. 재부팅
  4. sudo apt install mysql-server설치를 계속하려면 다시 실행 하십시오.

설치 완료.


알았지 만 불행히도 여전히 작동하지 않습니다.
— Supernormal

0
  1. stop mysql-server
  2. rm /var/lib/mysql/ib_logfile*
  3. restart mysql

1
코드에 코드 마크 업 {}을 사용하면 더 읽기 쉽습니다. 답변을 편집 할 수 있습니다.
— Robert Riedl

내 이름 ib_logfile*파일과 않았다 apt upgrade하지만 MySQL의에 도착했을 때 APT, 나는 다음과 같은 출력을 가지고 mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
— 비범

위대한, 나는 그것을 먼저 tarball하려고했지만, mysql은 tarball을 제거했는데, 이제는 다른 이유로 시작하지 못했습니다. 우분투 18.04. YMMV
— Chaim Eliyah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.