MySQL จะไม่เริ่มต้นเนื่องจาก AppArmor


30

ฉันพยายามติดตั้ง mysql-server-5.7 บน Kubuntu 16.04 แต่ฉันมีปัญหา

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 ปฏิเสธเป็นเพียงคำเตือนและ MySQL มีแนวโน้มที่จะออกด้วยเหตุผลที่แตกต่างกัน - /var/log/mysql/error.logดู MySQL ควรยังสามารถเรียกใช้แม้ว่ามันจะไม่สามารถเข้าถึงไฟล์ข้างต้น / proc และ / sys
SystemParadox

ตรวจสอบให้แน่ใจว่าดิสก์ของคุณไม่เต็ม
Buttle Butkus

คำตอบ:


31

คุณต้องแก้ไขการกำหนดค่า apparmor ของคุณเพื่อให้ MySQL สามารถเข้าถึงไฟล์เหล่านั้นได้ ข้อความเข้าสู่ระบบที่มีการบอกคุณว่า/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! นี่คือรายงาน launchpad กับผู้อื่นที่แชร์ปัญหาเดียวกัน: bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 (ผู้วิจารณ์ส่วนใหญ่รายงานข้อความบันทึกเดียวกันกับที่นี่ )
Paul A Jungwirth

3
/proc/*/status rเปิดโดยไม่จำเป็น Apparmor มีผู้จับคู่สำหรับ prid ปัจจุบันดังนั้นคุณสามารถทำเช่นนี้ได้: @{PROC}/@{pid}/status r, คุณอาจต้องการใช้สัญลักษณ์แทนการเข้าถึงnode*/meminfoหากคุณมี NUMA รองรับ / มากกว่าหนึ่ง CPU ที่สัมผัสกับเครื่อง
Martin Foot

3
อาจต้องรีสตาร์ทเครื่องอาวุธหลังจากนั้น: 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,

โหลดบริการ apparmor ใหม่

#sudo service apparmor reload

0

ในกรณีของฉันพยายามที่จะติดตั้ง mysql-server-5.7 บน Ubuntu 16.04 หลังจากใช้คำตอบข้างต้นสิ่งที่ทำงานคือ:

  1. วิ่ง sudo apt install mysql-server
  2. ตรวจสอบข้อผิดพลาดที่แน่นอนข้างต้น
  3. Reboot
  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 ฉันได้ผลลัพธ์ต่อไปนี้ mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
Supernormal

ดีฉันพยายาม tarball ก่อน mysql ลบ tarball ตอนนี้มันล้มเหลวในการเริ่มต้นด้วยเหตุผลอื่น Ubuntu 18.04 YMMV
Chaim Eliyah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.