Mysql không thể ghi vào / tmp sau đó không thể khởi động lại


11

Tôi đã chạy orthomclchương trình sử dụng mysql. Chương trình này đã hoạt động tốt trên cùng một máy tính trước đó. Lần này tôi có một thông báo lỗi.

DBD::mysql::st execute failed: Can't create/write to file '/tmp/#sql_700_1.MYI' (Errcode: 13) at /usr/local/bioinf/orthomclSoftware-v2.0.9/bin/orthomclPairs line 709, <F> line 14.

Tôi đã cố gắng khởi động lại mysqlmáy chủ, máy chủ tắt nhưng không khởi động được.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.log/var/log/mysql.errtrống rỗng Tôi đã thử một vài điều mà tôi tìm thấy ở đây bao gồm tẩy và cài đặt lại mysql-servervà loại bỏ ib_logfile*trong /var/lib/mysql.

Một điều khác tôi đã thử là

sudo dpkg-reconfigure mysql-server-5.5

Các thông báo lỗi là:

/usr/sbin/mysqld: Can't create/write to file '/tmp/ibNzqwO0' (Errcode: 13)
InnoDB: Error: unable to create temporary file; errno: 13
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

Dưới đây là một số thông tin từ dmesg | grep mysql:

[3115187.338273] init: mysql main process (44255) terminated with status 1
[3115187.338417] init: mysql main process ended, respawning
[3115187.356361] init: mysql post-start process (44256) terminated with status 1
[3116827.473256] type=1400 audit(1396394069.224:132): apparmor="DENIED" operation="open" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/" pid=45396 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[3116827.582489] type=1400 audit(1396394069.332:133): apparmor="DENIED" operation="mknod" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/#sql_b154_0.MYI" pid=45402 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
[3116827.908448] type=1400 audit(1396394069.660:134): apparmor="DENIED" operation="mknod" parent=45317 profile="/usr/sbin/mysqld" name="/home/tmp/ibbPfaqP" pid=45415 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=118 ouid=118
[3116841.623608] type=1400 audit(1396394083.372:139): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=45443 comm="apparmor_parser"
[3116841.771621] init: mysql pre-start process (45474) terminated with status 1

Có rất nhiều dòng như thế này.

Ai đó có thể giúp tôi tìm ra những gì sai với máy chủ MySQL của tôi không?

Cảm ơn nhiều.

Câu trả lời:


15

Lý do cho điều này là vì bạn /tmpđược liên kết với một vị trí khác , /home/tmp. Nhưng MySQL được bọc thép bởi AppArmor, không cho phép viết tự do /home/tmp. Để khắc phục tình trạng này, bạn có thể chỉnh sửa /etc/apparmor.d/abstractions/user-tmpvà thêm vào /home/tmpđó một cách thích hợp; cho tôi những dòng thêm

  owner /home/tmp/**    rwkl,
  /home/tmp/            rw,

đã lừa


1
Hoàn hảo! Giải quyết vấn đề ngay. Tôi chắc chắn rằng nó có một cái gì đó để làm với symlink!
YonoRan

1
Tôi đã phải khởi động lại apparmor để những thay đổi có hiệu lực:sudo /etc/init.d/apparmor restart
Nadjib Mami

6

Có vẻ như bạn không có quyền phù hợp /tmp, điều này có thể ghi được trên thế giới. Bạn sẽ có thể sửa nó bằng lệnh này:

sudo chmod 1777 /tmp

Điều đó sẽ đặt quyền cho 777(rwx cho mọi người) và cũng đặt bit dính được khuyến nghị cho /tmpthư mục. Như đã giải thích trong man chmod:

FLAG GIỚI HẠN HẠN CHẾ HOẶC BIT STICKY

Cờ xóa bị hạn chế hoặc bit dính là một bit đơn, việc giải thích phụ thuộc vào loại tệp. Đối với các thư mục, nó ngăn người dùng không có đặc quyền xóa hoặc đổi tên tệp trong thư mục trừ khi họ sở hữu tệp hoặc thư mục; đây được gọi là cờ xóa bị hạn chế cho thư mục và thường được tìm thấy trên các thư mục có thể ghi trên thế giới như / tmp. Đối với các tệp thông thường trên một số hệ thống cũ, bit sẽ lưu hình ảnh văn bản của chương trình trên thiết bị trao đổi để nó sẽ tải nhanh hơn khi chạy; đây được gọi là bit dính.


@ScottSeverance vui lòng không thay đổi mã thành dấu ngoặc kép chỉ để thay đổi. Có tôi biết tôi đã trích dẫn nhưng khối mã cho định dạng tốt hơn và tôn trọng tiêu đề và thụt lề. Cách bạn chỉnh sửa nó, mọi thứ đều nằm trên cùng một dòng.
terdon

1
Tôi đã thay đổi nó bởi vì khi nó được định dạng dưới dạng mã, tôi không thể đọc nó trên điện thoại của mình mà không phải cuộn ngang liên tục. Thực sự không có lợi ích để định dạng một trích dẫn như mã. Nếu bạn không thích tiêu đề nằm trên cùng một dòng, có nhiều cách khắc phục mà không làm hỏng màn hình của người dùng trên điện thoại.
Scott Severance

@ScottSeverance ah, đủ công bằng, tôi đã không nhận ra nó gây ra vấn đề trên điện thoại. OK, tôi sẽ đặt nó trong một khối trích dẫn. Tôi chỉ thấy khó chịu vì chỉnh sửa của bạn (không có lời giải thích) trông tệ hơn trên các trình duyệt bình thường và bạn đã không kiểm tra xem nó có hiển thị chính xác không. Và bạn chỉ cần chỉnh sửa một lần nữa và nó hoàn hảo, cảm ơn!
terdon

1
Của tôi là giải pháp chính xác. Mysql được bổ sung và apparmor không thích /tmpbị chuyển đến một vị trí khác mà không thay đổi confs. Các cuộc kiểm toán nói rằng đó không phải là vấn đề cho phép bị từ chối trên hệ thống tập tin, mà là những người bảo vệ apparmor.
Antti Haapala
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.