“Tidak dapat menemukan file mysql / plugin.frm” saat memulai MySQL

17

Ketika saya memulai server MySQL saya, saya mendapatkan kesalahan ini:

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

Saya telah berlari mysql_upgradeuntuk membangunnya kembali, dan itu berfungsi untuk membangun kembali. Sebelum saya melakukan itu, saya menghapus dan menginstal MySQL. Namun, ketika saya mencoba memulai kembali, saya mendapatkan kesalahan yang sama. Saya yakin ini bukan masalah izin, karena semua file dan direktori dibuat oleh mysqlpengguna.

Bisakah Anda memberi tahu saya cara memperbaiki kesalahan ini?

amacleod
sumber
selinux juga dapat menyebabkan masalah ini.
Ross

Jawaban:

16

Jika Anda memiliki direktori data mysql di lokasi non-standar dan sistem Anda memiliki apparmor, pastikan /etc/apparmor.d/usr.sbin.mysqlddirektori data Anda masuk daftar putih. Konfigurasi akan terlihat seperti:

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

Daemon Apparmor harus dimulai ulang setelah Anda melakukan perubahan apa pun untuk mengkonfigurasi.

xyzman
sumber
1
apparmordatang kembali untuk membangunkan kita dari waktu ke waktu, supaya kita tidak melupakannya ...
Ring Ø
1
Wow! banyak waktu mencari jawaban ini. Terima kasih!
Diego Andrés Díaz Espinoza
Dalam kasus saya, saya juga menggunakan dir temp kustom, dan saya menemukan saya perlu meniru beberapa baris dari /etc/apparmor.d/abstractions/user-tmp. Ketika saya meletakkan owner /mysql-tmp/** rwkl, /mysql-tmp/ r,ke /etc/apparmor.d/local/usr.sbin.mysqlditu mulai bekerja untuk saya pada Ubuntu 14.04.
amacleod
12

Apakah Anda yakin ini bukan tentang izin? errno: 13 :

$ perror 13
OS error code  13:  Permission denied

Hal pertama yang harus dicoba adalah mengubah kepemilikan datadir MySQL , misalnya, jika Anda menjalankan MySQL dengan pengguna mysql :

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

Hal lain yang perlu diperiksa adalah apakah pemilik proses mysqld (kemungkinan besar mysql ) memiliki hak istimewa yang diperlukan untuk tujuan yang didefinisikan sebagai tmpdir . Dan jika karena alasan apa pun di atas tidak berhasil, coba lacak proses mysqld untuk melihat di mana dan mengapa izin itu ditolak :

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log
Dimitre Radoulov
sumber
Saya mengalami masalah yang sama ketika meningkatkan dari MySQL 5.1 ke 5.7. Tampaknya pengguna mysql kehilangan kepemilikan pada direktori / var / lib / mysql .
Rob
1

Saya setuju dengan Dimitre. Masalah ini muncul sebagian besar karena izin yang tidak memadai. Ubah kepemilikan folder root MySql menjadi mysql.

chown -R mysql:mysql [mysql root folder]

Anda mungkin ingin mengubah izin skrip Mysql ke pengguna khusus Anda.

chown my_mysql:my_mysql [mysqld etc]

Ini berhasil untuk saya.

Muneeb Mirza
sumber
1

Dalam kasus saya, saya perlu menempatkan direktori data MySQL termasuk ibdata1folder ke partisi lain karena sayaibdata1 tumbuh terlalu cepat dan masalah memori terjadi. Untuk itu, saya harus mengubah file my.cnf seperti di bawah ini.

my.cnf tadinya:

datadir         =  /var/lib/mysql

my.cnf sekarang:

datadir         = /home/ubuntu/data/mysql

Saya mencoba,

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

tetapi masih mendapat kesalahan di atas yang sama. Kemudian saya mencoba mengubah /etc/apparmor.d/usr.sbin.mysqldfile. Itu bekerja dengan baik untuk saya.

Kita harus memasukkan daftar putih ke folder baru kita usr.sbin.mysqld.

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

Alih-alih menambahkan baris di atas,

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

Kemudian restart server MySQL.

Sithara
sumber
1

Jika Anda menjalankan SELinux berikut ini dapat membantu juga ...

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa
Mike Purcell
sumber
Bagi saya, melakukan restorecon -R /var/lib/mysqlmembantu memulihkan pengaturan SELinux dengan benar untuk direktori.
Sebi
0

Saya mengalami masalah ini setelah memutakhirkan dari 5,5 ke 5,6.

Anehnya, itu tampak seperti mysqlpengguna telah dihapus dan dibuat kembali, yang telah menyebabkan semua file mysql pada dasarnya 'kehilangan' izin mereka ...

Saya menemukan ini dengan pergi ke dir mysql (Yang dalam kasus saya bukan dir default, karena saya telah memindahkannya) dan melihat bahwa pemiliknya hanya nomor uuid dan panduan ... Jadi, saya hanya berlari chown mysql:mysqlpada semua dir dan file, dan voila

Hanya Beruntung Sungguh
sumber
-1

Sederhana ini juga chownberfungsi untuk saya, tidak ada lagi proses mogok:

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

Untungnya, bermain dengan apparmor menjadi rumit dan sulit diedit.

tomthumb99
sumber