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?

Дуже дякую.

Відповіді:


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
Nadjib Mami

6

Це здається, що у вас немає правильних дозволів /tmp, які повинні бути написані у всьому світі. Ви повинні мати можливість виправити це за допомогою цієї команди:

sudo chmod 1777 /tmp

Це встановить для дозволів 777(rwx для всіх), а також встановить клейкий біт, який рекомендується для /tmpdir. Як пояснено в man chmod:

ОБМЕЖЕННЯ ЗАСТАВКИ ЗА ВИДАЛЕННЯ АБО СТІКУВАННЯ

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


@ScottSeverance, будь ласка, не змінюйте код на лапки лише заради змін. Так, я знаю, що я цитував, але блок коду надає кращого форматування та поважає заголовок та відступ. Те, як ви це відредагували, все в одному рядку.
тердон

1
Я змінив його, оскільки, коли він відформатований як код, я не можу прочитати його на своєму телефоні без постійної горизонтальної прокрутки. Форматування цитати як коду дійсно не корисне. Якщо вам не подобається, що заголовок знаходиться в одному рядку, є способи виправити це, не порушуючи відображення користувачів на телефонах.
Скотт Северанс

@ScottSeverance ах, досить чесно, я не розумів, що це викликає проблеми на телефонах. Гаразд, тоді я вкладу це в блок цитат. Мене просто роздратувало, оскільки ваша редакція (без жодних пояснень) виглядає гірше у звичайних браузерах, і ви не перевірили, чи відображається вона правильно. І ви щойно відредагували, і це ідеально, дякую!
тердон

1
Шахта - правильне рішення. Mysql є захопленим, і apparmor не любить /tmpпереміщення в інше місце, не змінюючи конф. Під час перевірок говориться, що справа не в дозволі, який заборонено у файловій системі, а в охороні програми.
Антті Хаапала
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.