Pertanyaan Mysql tidak bisa menulis ke / tmp kemudian gagal untuk memulai kembali


Saya berlari orthomcl program yang menggunakan mysql. Program ini telah beroperasi dengan baik pada komputer yang sama sebelumnya. Kali ini saya memiliki 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 memulai ulang mysql server, server dimatikan tetapi gagal dimulai.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.log dan /var/log/mysql.err kosong. Saya sudah mencoba beberapa hal yang saya temukan di sini termasuk membersihkan dan menginstal ulang mysql-server dan menghapus ib_logfile* di /var/lib/mysql.

Hal lain yang saya coba adalah

sudo dpkg-reconfigure mysql-server-5.5

Pesan kesalahannya 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 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 banyak garis seperti ini.

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

Terimakasih banyak.


9
2018-04-02 17:59


asal




Jawaban:


Alasan untuk ini adalah Anda /tmp di-symlink ke lokasi lain, /home/tmp. Tapi MySQL diberi lapis baja oleh AppArmor, yang tidak memungkinkan menulis secara bebas /home/tmp. Untuk memperbaiki situasinya, Anda dapat mengedit /etc/apparmor.d/abstractions/user-tmp dan tambahkan /home/tmp ada dengan tepat; bagi saya garis tambahan

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

melakukan triknya.


12
2017-12-06 23:58



Sempurna! Segera atasi masalah ini. Saya yakin itu ada hubungannya dengan symlink! - YonoRan


Sepertinya Anda tidak memiliki izin yang tepat /tmp, yang seharusnya bisa ditulis 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 /tmp dir. Seperti yang dijelaskan di man chmod:

BATAS PENGHAPUSAN YANG DIBATALKAN ATAU BIT STICKY

Flag penghapusan terbatas atau bit sticky adalah bit tunggal, yang   interpretasi tergantung pada jenis file. Untuk direktori, itu mencegah   pengguna yang tidak berhak untuk menghapus atau mengganti nama file dalam direktori   kecuali mereka memiliki file atau direktori; ini disebut   tanda penghapusan terbatas untuk direktori, dan umumnya ditemukan di   direktori yang dapat ditulis dunia seperti / tmp. Untuk file biasa pada beberapa yang lebih tua   sistem, bit menyimpan gambar teks program pada perangkat swap jadi   itu akan memuat lebih cepat saat dijalankan; ini disebut bit lengket.


6
2018-04-02 18:56



@ScottSeverance jangan mengubah kode ke kutipan hanya demi perubahan. Ya saya tahu saya mengutip tetapi blok kode memberikan pemformatan yang lebih baik dan menghormati tajuk dan indentasi. Cara Anda mengeditnya, semuanya ada di baris yang sama. - terdon♦
Saya mengubahnya karena ketika diformat sebagai kode saya tidak bisa membacanya di ponsel saya tanpa gulir horizontal konstan. Benar-benar tidak ada manfaat untuk memformat kutipan sebagai kode. Jika Anda tidak suka judul berada di baris yang sama, ada cara untuk memperbaikinya tanpa merusak tampilan pengguna di ponsel. - Scott Severance
@ScottSeverance ah, cukup adil, saya tidak menyadari itu menyebabkan masalah pada ponsel. Oke, saya akan memasukkannya ke dalam blok kutipan. Saya hanya kesal karena hasil edit Anda (tanpa penjelasan) terlihat lebih buruk pada browser biasa dan Anda tidak memeriksa apakah itu benar. Dan Anda baru saja mengedit lagi dan itu sempurna, terima kasih! - terdon♦
Milik saya adalah solusi yang tepat. Mysql adalah apparmored dan apparmor tidak suka /tmpdipindahkan ke lokasi lain tanpa mengubah confs. Audit mengatakan bahwa itu bukan masalah izin ditolak pada sistem file, tetapi penjaga apparmor. - Antti Haapala