Mysql nie mógł zapisać do / tmp, a następnie nie uruchomił się ponownie

11

Uruchomiłem orthomclprogram, który używa mysql. Ten program wcześniej działał dobrze na tym samym komputerze. Tym razem miałem komunikat o błędzie.

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.

Próbowałem zrestartować mysqlserwer, serwer wyłączył się, ale nie udało się uruchomić.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.logi /var/log/mysql.errsą puste. Próbowałem kilka rzeczy, które znalazłem tutaj w tym czyszczenie i ponowne instalowanie mysql-serveri usuwanie ib_logfile*w /var/lib/mysql.

Inną rzeczą, której próbowałem, jest

sudo dpkg-reconfigure mysql-server-5.5

Komunikaty o błędach to:

/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

Oto kilka informacji z 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

Było wiele takich linii.

Czy ktoś mógłby mi pomóc dowiedzieć się, co jest nie tak z moim serwerem MySQL?

Wielkie dzięki.

użytkownik264649
źródło

Odpowiedzi:

15

Powodem tego jest to, że /tmpznaczy dowiązane do innej lokalizacji /home/tmp. Ale MySQL jest opancerzony przez AppArmor, co nie pozwala na swobodne pisanie /home/tmp. Aby naprawić sytuację, możesz odpowiednio edytować /etc/apparmor.d/abstractions/user-tmpi dodać /home/tmptam; dla mnie dodatkowe linie

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

wykonał lewę.

Antti Haapala
źródło
1
Doskonały! Rozwiązano problem od razu. Byłem pewien, że ma to coś wspólnego z dowiązaniem symbolicznym!
YonoRan
1
Musiałem ponownie uruchomić zbroję, aby zmiany zaczęły obowiązywać:sudo /etc/init.d/apparmor restart
Nadjib Mami,
6

Wygląda na to, że nie masz odpowiednich uprawnień /tmp, które powinny być dostępne do zapisu na całym świecie. Powinieneś być w stanie to naprawić za pomocą tego polecenia:

sudo chmod 1777 /tmp

To ustawi uprawnienia na 777(rwx dla wszystkich), a także ustawi lepki bit, który jest zalecany dla katalogu /tmp. Jak wyjaśniono w man chmod:

OGRANICZONA USUWANIE FLAGI LUB KLEJU

Flaga ograniczonego usuwania lub lepki bit to pojedynczy bit, którego interpretacja zależy od typu pliku. W przypadku katalogów uniemożliwia nieuprzywilejowanym użytkownikom usuwanie lub zmianę nazwy pliku w katalogu, chyba że jest on właścicielem pliku lub katalogu; nazywa się to flagą ograniczonego usuwania katalogu i jest powszechnie spotykane w światowych katalogach, takich jak / tmp. W przypadku zwykłych plików w niektórych starszych systemach bit zapisuje obraz tekstowy programu na urządzeniu wymiany, aby ładował się szybciej po uruchomieniu; nazywa się to lepkim bitem.

terdon
źródło
@ ScottSeverance, proszę, nie zmieniaj kodu na cytaty tylko ze względu na zmianę. Tak, wiem, że cytowałem, ale blok kodu zapewnia lepsze formatowanie i szanuje nagłówek i wcięcie. Jak go edytowałeś, wszystko jest w tej samej linii.
terdon
1
Zmieniłem go, ponieważ gdy jest sformatowany jako kod, nie mogę odczytać go na telefonie bez ciągłego przewijania w poziomie. Naprawdę nie ma korzyści z formatowania oferty jako kodu. Jeśli nie podoba ci się nagłówek znajdujący się w tej samej linii, istnieją sposoby, aby to naprawić bez przerywania wyświetlania użytkowników na telefonach.
Scott Severance
@ ScottSeverance ah, w porządku, nie zdawałem sobie sprawy, że to powoduje problemy na telefonach. OK, wstawię to do bloku cytatu. Byłem po prostu zirytowany, ponieważ twoja edycja (bez wyjaśnienia) wygląda gorzej w normalnych przeglądarkach i nie sprawdziłeś, czy renderuje się poprawnie. Właśnie edytowałeś i jest idealny, dzięki!
terdon
1
Moje jest poprawnym rozwiązaniem. MySQL jest uzbrojony, a apparmor nie lubi /tmpprzemieszczania się w inne miejsce bez zmiany konf. Z audytów wynika, że ​​nie chodzi o odmowę dostępu do systemu plików, ale o strażnika.
Antti Haapala