Nie można utworzyć pliku /var/lib/mysql/user.lower-test


12

Baza danych MySQL jest bezproblemowa od kilku miesięcy. Dzisiaj, kiedy sprawdziłem pakiety, które można aktualizować za pomocą Menedżera pakietów Synaptic, pojawiły się różne komponenty MySQL (-common, -client, -server itp.). Dlatego zdecydowałem się na aktualizację (zapomniałem zauważyć zainstalowaną wersję, ale myślę, że była to wersja 5.6.21) do wersji 5.6.25-1-ubuntu2.0. Następnie, kiedy przeszedłem do bazy danych, otrzymałem komunikat:

Error occured: Can't connect to MySQL server on '127.0.0.1' (111)

Potem odkryłem, że serwer nie działa. W pliku dziennika uważam, że komunikat: -

Can't create file /var/lib/mysql/user.lower-test

Spędziłem około godziny na wyszukiwaniu w sieci i chociaż problem został już wcześniej zgłoszony, nie widziałem go w kontekście problemu „po aktualizacji”, więc nie jestem pewien, czy mam następny krok.

Odpowiedzi:


6

Wydaje się, że problemy te powodują problemy z uprawnieniami lub zmieniają katalog danych mysql na inną lokalizację niż / var / lib / mysql.

Spróbuj uruchomić z sudo

Wygląda na to, że / var / lib / mysql jest własnością użytkownika mysql, a grupa jest również ustawiona na mysql.

$ sudo chown -R mysql /var/lib/mysql
$ sudo chgrp -R mysql /var/lib/mysql
$ sudo chmod 755 /var/lib/mysql

Czy sprawdziłeś, czy katalog / var / lib / mysql faktycznie istnieje i odpowiada twojemu katalogowi danych? Jeśli tak nie jest, prawdopodobnie musisz podać parametr datadir w sekcji mysqld

[mysqld]
datadir=/var/lib/mysql

Następnie możesz wybrać pomiędzy konfiguracją apparmor, aby MySQL mógł czytać \ wykonać \ modyfikować nowy katalog danych i podkatalogi lub, na własne ryzyko, możesz usunąć apparmor. Może być konieczne rootowanie, aby wykonać następujące czynności:

/etc/init.d/apparmor stop
/etc/init.d/apparmor teardown
update-rc.d -f apparmor remove
apt-get purge apparmor
reboot

Przeszedłem przez to wszystko, ale bezskutecznie. Po utworzeniu kopii zapasowych zdecydowałem się ponownie zainstalować i wszystko działa poza problemem, który miałem. Ale jest problemem w Linuksie, czy w MySQL ...
MichaelJohn

@MichaelJohn nie może nic powiedzieć. może to być uszkodzenie apparmor lub uszkodzenie pakietu mysql
Hitesh Mundra,

W systemie Ubuntu Xenial: apparmorjest instalowany automatycznie i włączany podczas instalacji mysql-server-5.6. Nawet jeśli wcześniej go dezaktywowałeś. Nie można usunąć apparmorpakietu, ponieważ jest on zależny od mysql-server-5.6. Możesz rozwiązać błąd „Nie można utworzyć pliku /var/lib/mysql/user.lower-test”, wykonującservice apparmor stop; service apparmor teardown; update-rc.d -f apparmor remove
Jeroen Vermeulen - MageHost

6

Wystąpił ten problem podczas próby uruchomienia wielu instancji MySQL, ale zamiast usunąć apparmor zaktualizowałem plik usr.sbin.mysqld:

vim /etc/apparmor.d/usr.sbin.mysqld

Na przykład tak wygląda mój plik, a kiedy dodałem foldery, które wymagają uprawnień do zapisu, wszystko działało tak, jak powinno.

/usr/sbin/mysqld {

  capability dac_override,
  capability sys_resource,
  capability setgid,
  capability setuid,

  network tcp,

  /etc/hosts.allow r,
  /etc/hosts.deny r,

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/*.cnf r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/lib/mysql1/ r,
  /var/lib/mysql1/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid rw,
  /var/run/mysqld/mysqld.sock w,
  /var/run/mysqld/mysqld1.pid rw,
  /var/run/mysqld/mysqld1.sock w,
  /run/mysqld/mysqld.pid rw,
  /run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,

}

1
To też działało dla mnie. Musiałem zrestartować serwer, aby to zadziałało - samo zatrzymywanie i restartowanie AppArmour nie działało.
MikeHoss,

3

Problem przydarzył mi się, gdy próbowałem przenieść / var / lib / mysql na inny dysk i zastąpić oryginalny katalog dowiązaniem symbolicznym.

Apparmor odmówi dostępu w tej konfiguracji patrz

dlaczego twórcy Apparmor nie uważają tego za błąd. Obejście polega na użyciu uchwytu bind. Widzieć

dla wyjaśnienia.

Więc

mount --bind /newmysqldatadir /var/lib/mysql
service mysql start

naprawiono problem dla mnie.


1

Miałem podobny problem. Ponownie zainstalowałem Ubuntu Server na moim komputerze, wykonałem pełną kopię zapasową pliku / etc / na dysku twardym, po ponownej instalacji zrobiłem kopię wszystkich ważnych plików z / drive / etc / do moich systemów / etc.

Robiąc to, stworzyłem bak dla pliku usr.sbin.mysqld o nazwie usr.sbin.mysqld.bak i trzymałem go w tym samym katalogu /etc/apparmor.d/.

Po dalszych poszukiwaniach znalazłem ten post na blogu: https://blogs.oracle.com/jsmyth/apparmor-and-mysql

Zainstalowałem apparmor-utils i próbowałem narzekać na / usr / sbin / mysqld i powiedziałem, że mam zdefiniowane 2 konfiguracje apparmor (oba moje pliki).

Wiem, że może to nie być problem, z którym się borykasz, ale dla jasności nie bądź tak głupi, jak ja, tworząc plik kopii zapasowej w tym samym katalogu katalogu apparmor sbin.


0

Sprawdź także, czy Twoja partycja nie jest pełna, co miało miejsce w moim przypadku.

Z nieznanego powodu przenoszenie danych na inną partycję również nie działało.

Więc dla szybkiej naprawy, zamiast zadzierać z llvm lub gparted, zmniejszyłem swój /swapfilerozmiar.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.