«Не удается найти файл mysql / plugin.frm» при запуске MySQL


17

Когда я запускаю свой сервер MySQL, я получаю эту ошибку:

/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.

Я побежал, mysql_upgradeчтобы восстановить его, и он работает, чтобы восстановить. Прежде чем я это сделал, я удалил и установил MySQL. Однако, когда я пытался перезапустить, я получаю ту же ошибку. Я уверен, что это не проблема с разрешениями, так как все файлы и каталоги создаются mysqlпользователем.

Не могли бы вы посоветовать мне, как исправить эту ошибку?


selinux также может вызвать эту проблему.
Росс

Ответы:


16

Если у вас есть каталог данных mysql в нестандартном месте, и ваша система имеет apparmor, убедитесь, что /etc/apparmor.d/usr.sbin.mysqld ваш каталог данных находится в белом списке. Конфигурация должна выглядеть так:

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

Демон Apparmor должен быть перезапущен после внесения каких-либо изменений в конфигурацию.


1
apparmorвремя от времени возвращается, чтобы разбудить нас, просто чтобы мы не забыли о нем ...
Кольцо Ø

1
Вот это да! много времени искал этот ответ. Благодарность!
Диего Андрес Диас Эспиноза

В моем случае я также использую пользовательский временный каталог, и я обнаружил, что мне нужно имитировать некоторые строки из /etc/apparmor.d/abstractions/user-tmp. Когда я положил owner /mysql-tmp/** rwkl, /mysql-tmp/ r,в /etc/apparmor.d/local/usr.sbin.mysqldнего начал работать для меня на Ubuntu 14.04.
amacleod

12

Вы уверены, что дело не в разрешениях? errno: 13 :

$ perror 13
OS error code  13:  Permission denied

Первое, что нужно попробовать, это изменить владельца datadir MySQL , например, если вы запускаете MySQL с пользователем mysql :

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

Еще одна вещь, которую нужно проверить, - есть ли у владельца процесса mysqld (наиболее вероятно, mysql ) необходимые привилегии для места назначения, определенного как tmpdir . И если по какой-либо причине вышеприведенное не сработает, попробуйте отследить процесс mysqld, чтобы узнать, где и почему ему отказано в разрешении :

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log

Я столкнулся с той же проблемой при обновлении с MySQL 5.1 до 5.7. Похоже, что пользователь mysql утратил право собственности на каталог / var / lib / mysql .
Роб

1

Я согласен с Димитром. Эта проблема возникает в основном из-за недостаточных разрешений. Измените владельца корневой папки MySql на mysql.

chown -R mysql:mysql [mysql root folder]

Возможно, вы захотите изменить разрешение сценариев Mysql для своего пользовательского пользователя.

chown my_mysql:my_mysql [mysqld etc]

Это сработало для меня.


1

В моем случае мне нужно было поместить каталог данных MySQL, включая ibdata1папку, в другой раздел, потому что мойibdata1 рос слишком быстро и возникла проблема с памятью. Для этого мне пришлось изменить мой файл .cnf, как показано ниже.

my.cnf был:

datadir         =  /var/lib/mysql

my.cnf сейчас:

datadir         = /home/ubuntu/data/mysql

Я старался,

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

но все равно получил ту же ошибку выше. Затем я попытался изменить /etc/apparmor.d/usr.sbin.mysqldфайл. Это хорошо сработало для меня.

Мы должны внести белый список в нашу новую папку usr.sbin.mysqld.

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

Вместо приведенных выше строк добавьте:

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

Затем перезапустите сервер MySQL.


1

Если вы используете SELinux, то может помочь следующее:

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa

Для меня это restorecon -R /var/lib/mysqlпомогло правильно восстановить настройки SELinux для каталога.
Себи

0

У меня была эта проблема после того, как я обновил с 5,5 до 5,6.

Странно, но выглядело так, как будто mysqlпользователь был удален и воссоздан, что привело к тому, что все файлы mysql по существу «потеряли» свои разрешения ...

Я узнал об этом, зайдя в каталог mysql (который в моем случае не был каталогом по умолчанию, поскольку я его переместил) и увидел, что владельцем был просто номер uuid и guid ... Итак, я просто запустил chown mysql:mysqlвсе каталоги и файлы, и вуаля


-1

Это простое chownсработало и у меня, без сбоев:

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

К счастью, игра с apparmor становится сложной и трудно редактируемой.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.