„Nie można znaleźć pliku mysql / plugin.frm” podczas uruchamiania MySQL

17

Kiedy uruchamiam mój serwer MySQL, pojawia się ten błąd:

/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

Uruchomiłem mysql_upgradego, aby go odbudować i działa, aby go odbudować. Zanim to zrobiłem, usunąłem i zainstalowałem MySQL. Jednak gdy próbowałem ponownie uruchomić, pojawia się ten sam błąd. Jestem pewien, że nie jest to problem z uprawnieniami, ponieważ wszystkie pliki i katalogi są tworzone przez mysqlużytkownika.

Czy możesz mi doradzić, jak naprawić ten błąd?

amacleod
źródło
selinux może również powodować ten problem.
Ross

Odpowiedzi:

16

Jeśli masz katalog danych mysql w niestandardowej lokalizacji, a twój system ma apparmor, upewnij się, że /etc/apparmor.d/usr.sbin.mysqldtwój katalog danych znajduje się na białej liście. Konfiguracja powinna wyglądać następująco:

/mysql/data/dir/ r, #trailing slash is mandatory
/mysql/data/dir/** rwk,

Demon Apparmor musi zostać zrestartowany po wprowadzeniu jakichkolwiek zmian w konfiguracji.

Xyzman
źródło
1
apparmorod czasu do czasu budzi nas, żebyśmy nie zapomnieli o nim ...
Pierścień Ø
1
Łał! dużo czasu szukam tej odpowiedzi. Dzięki!
Diego Andrés Díaz Espinoza
W moim przypadku używam również niestandardowego katalogu temp i stwierdziłem, że muszę imitować niektóre wiersze /etc/apparmor.d/abstractions/user-tmp. Kiedy kładę owner /mysql-tmp/** rwkl, /mysql-tmp/ r,na /etc/apparmor.d/local/usr.sbin.mysqldnim rozpoczął pracę dla mnie na Ubuntu 14.04.
amacleod
12

Czy na pewno nie chodzi o uprawnienia? errno: 13 :

$ perror 13
OS error code  13:  Permission denied

Pierwszą rzeczą, którą należy wypróbować, jest zmiana własności katalogu danych MySQL , na przykład, jeśli uruchamiasz MySQL z użytkownikiem mysql :

chown -R mysql:mysql /path/to/datadir

Inną sprawą do sprawdzenia jest to, czy właściciel procesu mysqld (najprawdopodobniej mysql ) ma niezbędne uprawnienia do miejsca docelowego zdefiniowanego jako tmpdir . A jeśli z jakiegokolwiek powodu powyższe nie działa, spróbuj prześledzić proces mysqld , aby zobaczyć, gdzie i dlaczego odmawia zgody :

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log
Dimitre Radoulov
źródło
Ten sam problem napotkałem podczas aktualizacji z MySQL 5.1 do 5.7. Wygląda na to, że użytkownik mysql utracił prawo własności do katalogu / var / lib / mysql .
Rob
1

Zgadzam się z Dimitre. Ten problem powstaje głównie z powodu niewystarczających uprawnień. Zmień własność folderu głównego MySql na mysql.

chown -R mysql:mysql [mysql root folder]

Możesz jednak zmienić uprawnienia do skryptów Mysql na niestandardowego użytkownika.

chown my_mysql:my_mysql [mysqld etc]

To zadziałało dla mnie.

Muneeb Mirza
źródło
1

W moim przypadku musiałem umieścić katalog danych MySQL wraz z ibdata1folderem w innym partycjonowaniu, ponieważ mój plik ibdata1rozwijał się zbyt szybko i wystąpił problem z pamięcią. W tym celu musiałem zmienić mój plik.cnf jak poniżej.

my.cnf był:

datadir         =  /var/lib/mysql

my.cnf teraz:

datadir         = /home/ubuntu/data/mysql

Próbowałem,

sudo chown -R mysql:mysql  /home/ubuntu/data/mysql

ale nadal pojawia się ten sam błąd powyżej. Potem próbowałem zmienić /etc/apparmor.d/usr.sbin.mysqldplik. To działało dla mnie dobrze.

Powinniśmy dodać nasz nowy folder do białej listy usr.sbin.mysqld.

 # /var/lib/mysql/ r,
 #/var/lib/mysql/** rwk,

Zamiast powyższych linii dodaj:

 /home/ubuntu/data/mysql/ r,
 /home/ubuntu/data/mysql/** rwk,

Następnie zrestartuj serwer MySQL.

Sithara
źródło
1

Jeśli korzystasz z SELinux, poniższe informacje mogą również pomóc ...

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa
Mike Purcell
źródło
Dla mnie zrobienie restorecon -R /var/lib/mysqlpomogło poprawnie przywrócić ustawienia SELinux dla katalogu.
Sebi
0

Miałem ten problem po aktualizacji z 5.5 do 5.6.

O dziwo wyglądało na to, że mysqlużytkownik został usunięty i ponownie utworzony, co spowodowało, że wszystkie pliki mysql zasadniczo „utraciły” swoje uprawnienia ...

Dowiedziałem się tego, przechodząc do katalogu mysql (który w moim przypadku nie był domyślnym katalogiem, ponieważ przeniosłem go) i zobaczyłem, że właściciel był tylko numerem uid i guid ... Więc po prostu uruchomiłem chown mysql:mysqlwszystkie reż. i pliki oraz voila

Po prostu szczęście naprawdę
źródło
-1

To proste chown działał również dla mnie, nie powodując już awarii:

sudo chown -R mysql:mysql  /var/lib/mysql

Na szczęście gra z apparmor staje się skomplikowana i trudna do edycji.

tomthumb99
źródło