Mysql не может записать в / tmp, затем не удалось перезапустить

11

Я запустил orthomclпрограмму, которая использует mysql. Эта программа прекрасно работала на том же компьютере и раньше. На этот раз у меня было сообщение об ошибке.

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.

Я попытался перезагрузить mysqlсервер, сервер выключился, но не запустился.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.logи /var/log/mysql.errпусты. Я попробовал несколько вещей , которые я нашел здесь , включая очистку и переустановку mysql-serverи удаление ib_logfile*в /var/lib/mysql.

Другая вещь, которую я попробовал,

sudo dpkg-reconfigure mysql-server-5.5

Сообщения об ошибках:

/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

Вот некоторая информация от 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

Было много много таких строк.

Может кто-нибудь помочь мне выяснить, что не так с моим сервером MySQL, пожалуйста?

Большое спасибо.

user264649
источник

Ответы:

15

Причиной этого является то, что вы /tmpсвязаны с другим местоположением /home/tmp. Но MySQL защищен AppArmor, который не позволяет свободно писать /home/tmp. Чтобы исправить ситуацию, вы можете отредактировать /etc/apparmor.d/abstractions/user-tmpи добавить /home/tmpтуда соответствующим образом; для меня лишние строки

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

сделал свое дело.

Антти Хаапала
источник
1
Отлично! Решил проблему сразу. Я был уверен, что это как-то связано с символической ссылкой!
YonoRan
1
Я должен был перезапустить apparmor, чтобы изменения вступили в силу:sudo /etc/init.d/apparmor restart
Наджиб Мами
6

Похоже, у вас нет необходимых прав доступа /tmp, которые должны быть доступны для записи. Вы должны быть в состоянии исправить это с помощью этой команды:

sudo chmod 1777 /tmp

Это установит права доступа 777(rwx для всех), а также установит бит закрепления, который рекомендуется для /tmpкаталога. Как объяснено в man chmod:

ОГРАНИЧЕННЫЙ ФЛАГ УДАЛЕНИЯ ИЛИ КЛЕЙКА

Ограниченный флаг удаления или закрепленный бит - это один бит, интерпретация которого зависит от типа файла. Для каталогов это предотвращает удаление или переименование файла в каталоге непривилегированным пользователям, если они не владеют файлом или каталогом; это называется флагом ограниченного удаления для каталога и обычно встречается в каталогах, доступных для записи во всем мире, таких как / tmp. Для обычных файлов в некоторых старых системах этот бит сохраняет текстовое изображение программы на устройстве подкачки, поэтому при запуске он загружается быстрее; это называется липким битом.

terdon
источник
@ScottSeverance, пожалуйста, не меняйте код на кавычки только ради изменений. Да, я знаю, что я цитировал, но блок кода дает лучшее форматирование и учитывает заголовок и отступ. То, как вы это отредактировали, все на одной линии.
Тердон
1
Я изменил его, потому что, когда он отформатирован как код, я не могу прочитать его на своем телефоне без постоянной горизонтальной прокрутки. Там действительно нет никакой пользы для форматирования цитаты в виде кода. Если вам не нравится, когда заголовок находится на одной строке, есть способы исправить это, не нарушая отображения пользователей на телефонах.
Скотт Северанс
@ ScottSeverance ах, честно говоря, я не понял, что это вызвало проблемы на телефонах. Хорошо, тогда я помещу это в блок цитаты. Я был просто раздражен, потому что ваше редактирование (без объяснения причин) выглядит хуже в обычных браузерах, и вы не проверяли, правильно ли он отображается. И вы только что отредактировали снова, и это прекрасно, спасибо!
Тердон
1
Мое правильное решение. Mysql одарен, и apparmor не нравится, когда /tmpего перемещают в другое место без изменения настроек. Аудиты говорят, что дело не в отказе в доступе к файловой системе, а в защите оборудования.
Антти Хаапала