"Impossibile trovare il file mysql / plugin.frm" all'avvio di MySQL


17

Quando avvio il mio server MySQL, ottengo questo errore:

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

Ho corso mysql_upgradeper ricostruirlo e funziona per ricostruire. Prima di farlo, ho rimosso e installato MySQL. Tuttavia, quando ho provato a riavviare, ho lo stesso errore. Sono sicuro che non è un problema di autorizzazione, poiché tutti i file e le directory sono creati mysqldall'utente.

Potresti consigliarmi su come correggere questo errore?


selinux può anche causare questo problema.
Ross,

Risposte:


16

Se la directory dei dati mysql è in una posizione non standard e il sistema dispone di apparmor, assicurarsi che /etc/apparmor.d/usr.sbin.mysqldla directory dei dati sia autorizzata. La configurazione dovrebbe apparire come:

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

Il demone Apparmor deve essere riavviato dopo aver apportato modifiche alla configurazione.


1
apparmortorna a svegliarci di tanto in tanto, solo per non dimenticarci di lui ...
Anello Ø

1
Wow! molto tempo alla ricerca di questa risposta. Grazie!
Diego Andrés Díaz Espinoza,

Nel mio caso uso anche una directory temporanea personalizzata e ho scoperto che dovevo imitare alcune righe /etc/apparmor.d/abstractions/user-tmp. Quando ho messo owner /mysql-tmp/** rwkl, /mysql-tmp/ r,in /etc/apparmor.d/local/usr.sbin.mysqldesso iniziato a lavorare per me su Ubuntu 14.04.
amacleod

12

Sei sicuro che non si tratti di autorizzazioni? errno: 13 :

$ perror 13
OS error code  13:  Permission denied

La prima cosa da provare è cambiare la proprietà del datadir di MySQL , ad esempio, se si esegue MySQL con mysql utente :

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

Un'altra cosa da verificare è se il proprietario del processo mysqld (molto probabilmente mysql ) ha i privilegi necessari per la destinazione definita come tmpdir . E se per qualsiasi motivo quanto sopra non funziona, prova a tracciare il processo mysqld per vedere dove e perché viene negata l'autorizzazione :

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

Ho riscontrato lo stesso problema durante l'aggiornamento da MySQL 5.1 a 5.7. Sembra che l'utente mysql abbia perso la proprietà della directory / var / lib / mysql .
Rob,

1

Sono d'accordo con Dimitre. Questo problema sorge principalmente a causa di autorizzazioni insufficienti. Cambia la proprietà della cartella principale di MySql in mysql.

chown -R mysql:mysql [mysql root folder]

Tuttavia, potresti voler modificare l'autorizzazione degli script Mysql per il tuo utente personalizzato.

chown my_mysql:my_mysql [mysqld etc]

Questo ha funzionato per me.


1

Nel mio caso, avevo bisogno di posizionare la directory di dati MySQL inclusa la ibdata1cartella in un altro partizionamento perché il mio ibdata1stava crescendo troppo velocemente e si verificava un problema di memoria. Per questo, ho dovuto modificare il file my.cnf come di seguito.

my.cnf era:

datadir         =  /var/lib/mysql

my.cnf ora:

datadir         = /home/ubuntu/data/mysql

Provai,

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

ma ho ancora avuto lo stesso errore sopra. Quindi ho provato a cambiare il /etc/apparmor.d/usr.sbin.mysqldfile. Ha funzionato bene nel mio caso.

Dovremmo inserire nella nostra whitelist la nostra nuova cartella usr.sbin.mysqld.

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

Invece delle righe precedenti aggiungi,

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

Quindi riavviare il server MySQL.


1

Se stai eseguendo SELinux, potrebbe essere utile anche il seguente ...

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

Per me, fare ha restorecon -R /var/lib/mysqlaiutato a ripristinare correttamente le impostazioni SELinux per la directory.
Sebi,

0

Ho avuto questo problema dopo aver aggiornato da 5.5 a 5.6.

Stranamente, sembrava che l' mysqlutente fosse stato rimosso e ricreato, il che aveva causato a tutti i file mysql di "perdere" i loro permessi ...

L'ho scoperto andando nella directory mysql (che nel mio caso non era la directory predefinita, come l'ho spostata) e ho visto che il proprietario era solo un numero uuid e guid ... Quindi, ho appena corso chown mysql:mysqlsu tutto il dirs e file e voilà


-1

Questo semplice ha chownfunzionato anche per me, non più il processo di crash:

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

Per fortuna, giocare con Apparmor diventa complicato e difficile da modificare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.