MySQL tidak akan memulai karena AppArmor?

30

Saya mencoba menginstal mysql-server-5.7 di Kubuntu 16.04, tetapi saya mengalami masalah.

sudo apt install mysql-server memberikan hasil sebagai berikut.

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)

Dan ketika mencoba memecahkan masalah dengan menjalankan, journalctl -xesaya mendapatkan output seperti berikut, yang tampaknya menunjukkan bahwa AppArmor memberi saya masalah.

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

Bagaimana saya bisa menyelesaikan masalah ini?

Supernormal
sumber
6
Catatan untuk pembaca di masa mendatang: pesan yang ditolak aparatur hanya peringatan, dan MySQL kemungkinan keluar karena alasan yang berbeda - lihat /var/log/mysql/error.log. MySQL harus tetap dapat berjalan walaupun tidak dapat mengakses file / proc dan / sys di atas.
SystemParadox
Pastikan disk Anda tidak penuh.
Buttle Butkus

Jawaban:

31

Anda perlu mengedit konfigurasi apparmor Anda untuk membiarkan MySQL mengakses file-file itu. Pesan log memberitahu Anda bahwa /usr/sbin/mysqldperlu membaca ( r) akses untuk membuka /proc/14767/status, /sys/devices/system/node/(mengikuti garis miring karena ingin membaca direktori), dan /proc/14767/task/14767/mem. File yang akan diedit adalah /etc/apparmor.d/usr.sbin.mysqld.

Dalam kasus saya, saya memecahkan masalah dengan menambahkan garis-garis ini di suatu tempat di tengah (dengan dua spasi di depan masing-masing):

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

(Perhatikan garis miring untuk baris kedua.)

Setelah melakukan itu, coba mulai MySQL, dan jika Anda mendapatkan lebih banyak kesalahan, tambahkan file-file itu juga dan coba lagi.

Inilah jawaban yang saya berikan untuk masalah ini di tempat lain.

Paul A Jungwirth
sumber
6
Mengapa seseorang perlu mengedit apparmourpengaturan secara manual untuk menginstal mysql, jika itu masalahnya maka ada masalah.
George Udosen
2
Saya setuju @George! Berikut ini adalah laporan launchpad dengan orang lain yang berbagi masalah yang sama: bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 (Kebanyakan komentator melaporkan pesan log yang sama seperti di sini, meskipun reporter aslinya memiliki yang berbeda. )
Paul A Jungwirth
3
/proc/*/status rtidak perlu terbuka. Apparmor memiliki pencocokan untuk harga saat ini, sehingga Anda dapat melakukannya seperti ini: @{PROC}/@{pid}/status r, Anda juga mungkin ingin wildcard akses node*/meminfojika Anda memiliki dukungan NUMA / lebih dari satu CPU yang terpapar ke mesin.
Martin Foot
3
Mungkin juga perlu me-restart apparmor setelah itu: sudo service apparmor restart
Zbyszek
1
mungkin masuk akal untuk memasukkannya ke dalam /etc/apparmor.d/local/user.sbin/mysqlduntuk menghindari bentrok dengan pembaruan profil default. Itu sudah termasuk dalam profil default
Marat
6

Mungkin ini: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739846 jadi coba gunakan

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

jika tidak membantu gunakan:

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

untuk menghapus mysql Anda sepenuhnya dan menginstal ulang Peringatan: Jika Anda memiliki database mereka akan dihapus.

ADDB
sumber
Terima kasih untuk sarannya! /Etc/init.d/mysql saya sudah ada exit 0di akhir. Saya telah mencoba membersihkan dan menginstal ulang mysql-server, yang tidak membantu. Saya baru saja mencoba menginstal ulang (tanpa membersihkan) mysql-common, yang juga tidak membantu. Membersihkannya akan mengharuskan saya untuk menghapus banyak paket yang bergantung padanya, yang agak saya takuti.
Supernormal
Saya hanya melakukan sudo apt remove --purge mysql-*untuk menghapus semua hal MySQL (saya memiliki versi 5.7), dan kemudian melakukannya sudo apt install akonadi-server mysql-client mysql-server, tetapi hasilnya masih sama. Saya masih mendapatkan pesan kesalahan yang sama dan journalctl -xemenunjukkan masalah AppArmor seperti di atas.
Supernormal
1

Saya memecahkan masalah ini dengan ini;

Edit /etc/apparmor.d/local/usr.sbin.mysqld

Tambahkan baris ini;

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

memuat kembali layanan apparmor

#sudo service apparmor reload
Kadir Y.
sumber
0

Dalam kasus saya mencoba menginstal mysql-server-5.7 di Ubuntu 16.04 setelah menggunakan jawaban di atas, hal yang berhasil adalah:

  1. Menjalankan sudo apt install mysql-server
  2. Periksa kesalahan pasti di atas
  3. Mulai ulang
  4. Jalankan sudo apt install mysql-serverlagi untuk melanjutkan instalasi

Instalasi selesai.

viky_manoli
sumber
Oke, tapi itu masih tidak berhasil untukku, sayangnya.
Supernormal
0
  1. stop mysql-server
  2. rm /var/lib/mysql/ib_logfile*
  3. restart mysql
jusme Mi
sumber
1
Silakan gunakan markup kode {}untuk kode, itu membuatnya lebih mudah dibaca. Anda dapat mengedit jawaban Anda.
Robert Riedl
Saya mengganti nama ib_logfile*file saya dan melakukannya apt upgradetetapi ketika saya kembali ke mysql, saya mendapatkan output berikut mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
Supernormal
hebat, saya mencoba tarball dulu, mysql menghapus tarball, sekarang gagal memulai karena alasan yang berbeda. Ubuntu 18.04. YMMV
Chaim Eliyah