"Неможливо знайти файл 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зростав занадто швидко і виникала проблема з пам'яттю. Для цього мені довелося змінити файл my.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 для каталогу.
Sebi

0

У мене виникло це питання після оновлення з 5,5 до 5,6.

Як не дивно, схоже, що mysqlкористувача було видалено та створено заново, через що всі файли mysql по суті "втратили" свої дозволи ...

Я з’ясував це, зайшовши до mysql dir (Що в моєму випадку не було за замовчуванням dir, як я перемістив його) і побачив, що власник - просто uuid та guid номер ... Отже, я просто побіг chown mysql:mysqlна всі dirs і файли, і вуаля


-1

Цей простий chownдля мене також працював, більше не відбувається збій:

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

На щастя, гра з додатком стає складним і важко редагувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.