MySQL sẽ không bắt đầu vì AppArmor?


30

Tôi đang cố gắng cài đặt mysql-server-5.7 trên Kubfox 16.04, nhưng tôi gặp sự cố.

sudo apt install mysql-server cho đầu ra sau.

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)

Và khi cố gắng khắc phục sự cố bằng cách chạy, journalctl -xetôi nhận được kết quả như sau, điều này dường như cho thấy AppArmor đang gây rắc rối cho tôi.

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

Làm thế nào tôi có thể đi về giải quyết vấn đề này?


6
Lưu ý cho độc giả trong tương lai: các tin nhắn bị từ chối của apparmor chỉ là cảnh báo và MySQL có thể sẽ thoát vì một lý do khác - xem /var/log/mysql/error.log. MySQL vẫn có thể chạy ngay cả khi nó không thể truy cập các tệp / Proc và / sys ở trên.
SystemParadox

Hãy chắc chắn rằng đĩa của bạn không đầy.
Butussy Butkus

Câu trả lời:


31

Bạn cần chỉnh sửa cấu hình apparmor của mình để cho phép MySQL truy cập các tệp đó. Các thông điệp tường trình đang nói với bạn rằng /usr/sbin/mysqldcần rtruy cập read ( ) để mở /proc/14767/status, /sys/devices/system/node/(dấu gạch chéo vì nó muốn đọc thư mục) và /proc/14767/task/14767/mem. Các tập tin để chỉnh sửa là /etc/apparmor.d/usr.sbin.mysqld.

Trong trường hợp của tôi, tôi đã giải quyết vấn đề bằng cách thêm các dòng này ở đâu đó ở giữa (với hai khoảng trắng ở trước mỗi dòng):

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

(Lưu ý dấu gạch chéo cho dòng thứ hai.)

Sau khi làm điều đó, hãy thử khởi động MySQL và nếu bạn gặp nhiều lỗi hơn, hãy thêm các tệp đó và thử lại.

Đây là một câu trả lời tôi đã đưa ra cho vấn đề này ở nơi khác.


6
Tại sao người ta cần phải chỉnh sửa apparmourcài đặt bằng tay để cài đặt mysql, nếu đó là trường hợp thì có vấn đề.
George Udosen

2
Tôi đồng ý @George! Đây là một báo cáo launchpad với những người khác có cùng vấn đề: bug.launchpad.net/ubfox/+source/mysql-5.7/+bug/1610765 (Hầu hết các bình luận đều báo cáo các thông điệp tường trình như ở đây, mặc dù người báo cáo ban đầu có những thông báo khác nhau. )
Paul A Jungwirth

3
/proc/*/status rlà mở không cần thiết. Apparmor có các công cụ đối sánh cho prid hiện tại, vì vậy bạn có thể làm điều đó như sau: @{PROC}/@{pid}/status r, Bạn cũng có thể muốn truy cập ký tự đại diện node*/meminfonếu bạn có hỗ trợ NUMA / nhiều CPU tiếp xúc với máy.
Martin Foot

3
Cũng có thể cần phải khởi động lại apparmor sau đó: sudo service apparmor restart
Zbyszek

1
thay vào đó, có thể có ý nghĩa khi đặt nó vào /etc/apparmor.d/local/user.sbin/mysqldđể tránh xung đột với các cập nhật hồ sơ mặc định. Nó đã được bao gồm trong hồ sơ mặc định
Marat

6

Nó có thể là thế này: https://bugs.debian.org/cgi-bin/ormsreport.cgi?orms=739846 vì vậy hãy thử sử dụng

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

nếu nó không giúp sử dụng:

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

để xóa hoàn toàn mysql của bạn và cài đặt lại Cảnh báo: Nếu bạn có bất kỳ cơ sở dữ liệu nào, chúng sẽ bị xóa.


Cám ơn vì sự gợi ý! exit 0Cuối cùng /etc/init.d/mysql của tôi đã có . Tôi đã thử thanh trừng và cài đặt lại máy chủ mysql, nhưng không được. Tôi vừa thử cài đặt lại (không thanh trừng) mysql-common, điều này cũng không giúp được gì. Việc thanh trừng nó sẽ yêu cầu tôi gỡ cài đặt rất nhiều gói phụ thuộc vào nó, điều mà tôi hơi sợ.
Siêu nhiên

Tôi vừa mới làm sudo apt remove --purge mysql-*để loại bỏ hoàn toàn tất cả những thứ của MySQL (tôi có phiên bản 5.7), và sau đó đã làm sudo apt install akonadi-server mysql-client mysql-server, nhưng kết quả vẫn như vậy. Tôi vẫn nhận được thông báo lỗi tương tự và journalctl -xechỉ ra sự cố AppArmor như trên.
Siêu nhiên

1

Tôi đã giải quyết vấn đề này với điều này;

Chỉnh sửa /etc/apparmor.d/local/usr.sbin.mysqld

Thêm các dòng này;

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

tải lại dịch vụ apparmor

#sudo service apparmor reload

0

Trong trường hợp của tôi, tôi đang cố gắng cài đặt mysql-server-5.7 trên Ubuntu 16.04 sau khi sử dụng các câu trả lời ở trên, điều làm việc là:

  1. Chạy sudo apt install mysql-server
  2. Kiểm tra lỗi chính xác ở trên
  3. Khởi động lại
  4. Chạy sudo apt install mysql-serverlại để tiếp tục cài đặt

Cài đặt hoàn tất.


OK, nhưng điều đó vẫn không làm việc cho tôi, thật không may.
Siêu nhiên

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

1
Vui lòng sử dụng đánh dấu mã {}cho mã, nó làm cho nó dễ đọc hơn. Bạn có thể chỉnh sửa câu trả lời của bạn.
Robert Riedl

Tôi đã đổi tên ib_logfile*các tập tin của mình và thực hiện apt upgradenhưng khi apt chuyển sang mysql, tôi đã nhận được kết quả đầu ra sau đây mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
Siêu nhiên

thật tuyệt, tôi đã thử tarball nó trước, mysql đã gỡ bỏ tarball, bây giờ nó không thể bắt đầu vì một lý do khác. Ubuntu 18.04. YMMV
Chaim Eliyah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.