Mysql tidak bisa menulis ke / tmp kemudian gagal untuk me-restart

11

Saya menjalankan orthomclprogram yang menggunakan mysql. Program ini telah beroperasi dengan baik di komputer yang sama sebelumnya. Kali ini saya mendapat pesan kesalahan.

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.

Saya mencoba untuk me-restart mysqlserver, server dimatikan tetapi gagal untuk memulai.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.logdan /var/log/mysql.errkosong. Saya sudah mencoba beberapa hal yang saya temukan di sini termasuk pembersihan dan menginstal ulang mysql-serverdan menghapus ib_logfile*di /var/lib/mysql.

Hal lain yang saya coba adalah

sudo dpkg-reconfigure mysql-server-5.5

Pesan kesalahan adalah:

/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

Berikut ini beberapa informasi dari 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

Ada banyak garis seperti ini.

Adakah yang bisa membantu saya mencari tahu apa yang salah dengan server MySQL saya?

Terimakasih banyak.

pengguna264649
sumber

Jawaban:

15

Alasannya adalah karena Anda /tmpterhubung ke lokasi lain /home/tmp,. Tetapi MySQL dikekang oleh AppArmor, yang tidak memungkinkan penulisan secara bebas /home/tmp. Untuk memperbaiki situasi, Anda dapat mengedit /etc/apparmor.d/abstractions/user-tmpdan menambahkan di /home/tmpsana dengan tepat; bagi saya garis ekstra

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

melakukan trik.

Antti Haapala
sumber
1
Sempurna! Memecahkan masalah dengan segera. Saya yakin itu ada hubungannya dengan symlink!
YonoRan
1
Saya harus memulai kembali apparmor agar perubahan diterapkan:sudo /etc/init.d/apparmor restart
Nadjib Mami
6

Kedengarannya Anda tidak memiliki izin yang tepat /tmp, yang seharusnya bisa ditulis oleh dunia. Anda harus dapat memperbaikinya dengan perintah ini:

sudo chmod 1777 /tmp

Itu akan mengatur izin untuk 777(rwx untuk semua orang) dan juga mengatur bit lengket yang direkomendasikan untuk /tmpdir. Sebagaimana dijelaskan dalam man chmod:

FLAG PENGHAPUSAN TERBATAS ATAU STIKI BIT

Bendera penghapusan terbatas atau bit sticky adalah bit tunggal, yang interpretasinya tergantung pada jenis file. Untuk direktori, ini mencegah pengguna yang tidak memiliki hak untuk menghapus atau mengganti nama file dalam direktori kecuali mereka memiliki file atau direktori; ini disebut flag penghapusan terbatas untuk direktori, dan umumnya ditemukan pada direktori yang dapat ditulis oleh dunia seperti / tmp. Untuk file biasa pada beberapa sistem yang lebih lama, bit menyimpan gambar teks program pada perangkat swap sehingga akan memuat lebih cepat saat dijalankan; ini disebut bit yang lengket.

terdon
sumber
@ScottSeverance tolong jangan mengubah kode untuk mengutip hanya demi perubahan. Ya saya tahu saya mengutip tetapi blok kode memberikan format yang lebih baik dan menghormati header dan indentasi. Cara Anda mengeditnya, semuanya ada di baris yang sama.
terdon
1
Saya mengubahnya karena ketika diformat sebagai kode saya tidak dapat membacanya di ponsel saya tanpa menggulir horizontal yang konstan. Benar-benar tidak ada untungnya memformat kutipan sebagai kode. Jika Anda tidak suka judulnya berada di jalur yang sama, ada beberapa cara untuk memperbaikinya tanpa merusak tampilan pengguna di ponsel.
Scott Severance
@ScottSeverance ah, cukup adil, saya tidak menyadari itu menyebabkan masalah pada ponsel. OK, saya akan memasukkannya ke dalam blok kutipan. Saya hanya kesal karena hasil edit Anda (tanpa penjelasan) terlihat lebih buruk di browser normal dan Anda tidak memeriksa apakah itu ditampilkan dengan benar. Dan Anda baru saja mengedit lagi dan ini sempurna, terima kasih!
terdon
1
Milik saya adalah solusi yang benar. Mysql apparmored dan apparmor tidak suka /tmpdipindahkan ke lokasi lain tanpa mengubah conf. Audit mengatakan bahwa itu bukan masalah izin yang ditolak pada sistem file, tetapi penjaga aparatur.
Antti Haapala