“MySQL başlatılırken mysql / plugin.frm dosyası bulunamıyor”


17

MySQL sunucumu başlattığımda şu hatayı alıyorum:

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

Ben çalıştırdığınız mysql_upgradeyeniden inşa etmek ve yeniden inşa için çalışır. Bunu yapmadan önce MySQL'i kaldırdım ve kurdum. Ancak, yeniden başlatmaya çalıştığımda aynı hatayı alıyorum. Tüm dosyalar ve dizinler mysqlkullanıcı tarafından oluşturulduğundan, bir izin sorunu olmadığından eminim .

Bu hatayı nasıl düzeltebileceğinizi söyleyebilir misiniz?


selinux da bu soruna neden olabilir.
Ross

Yanıtlar:


16

Standart olmayan bir yerde mysql veri dizininiz varsa ve sisteminiz belirginse, /etc/apparmor.d/usr.sbin.mysqldveri dizininizin beyaz listeye eklenmiş olduğundan emin olun. Yapılandırma şöyle görünmelidir:

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

Yapılandırmada herhangi bir değişiklik yaptıktan sonra Apparmor arka plan programının yeniden başlatılması gerekir.


1
apparmorbizi zaman zaman uyandırmak için geri döner, sadece onu unutmayız ...
Ring Ø

1
Vaov! bu cevabı aramak için çok zaman. Teşekkürler!
Diego Andrés Díaz Espinoza

Benim durumumda da özel bir temp dir kullanıyorum ve bazı satırları taklit etmem gerektiğini buldum /etc/apparmor.d/abstractions/user-tmp. Ben koyduğunuzda owner /mysql-tmp/** rwkl, /mysql-tmp/ r,içine /etc/apparmor.d/local/usr.sbin.mysqldo Ubuntu 14.04 benim için çalışmaya başladı.
amacleod

12

Bunun izinlerle ilgili olmadığından emin misiniz? errno: 13 :

$ perror 13
OS error code  13:  Permission denied

Denenecek ilk şey , örneğin MySQL'i mysql kullanıcısıyla çalıştırıyorsanız, MySQL'in datadir'inin sahipliğini değiştirmektir :

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

Kontrol edilecek başka bir şey, mysqld işlem sahibinin (büyük olasılıkla mysql ) tmpdir olarak tanımlanan hedef için gerekli ayrıcalıklara sahip olup olmadığıdır . Yukarıdakilerin herhangi bir nedenle işe yaramazsa, nerede ve neden izin verilmediğini görmek için mysqld sürecini izlemeye çalışın :

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

MySQL 5.1'den 5.7'ye yükseltme yaparken de aynı sorunla karşılaştım. Mysql kullanıcısının / var / lib / mysql dizininin sahipliğini kaybettiği anlaşılıyor .
Rob

1

Dimitre'ye katılıyorum. Bu sorun çoğunlukla yetersiz izinlerden kaynaklanmaktadır. MySql kök klasörünün sahipliğini mysql olarak değiştirin.

chown -R mysql:mysql [mysql root folder]

Yine de Mysql komut dosyalarının iznini özel kullanıcınıza değiştirmek isteyebilirsiniz.

chown my_mysql:my_mysql [mysqld etc]

Bu benim için çalıştı.


1

Benim durumumda, ibdata1klasörüm de dahil olmak üzere MySQL veri dizinini başka bir bölümlemeye yerleştirmem gerekiyordu çünkü ibdata1çok hızlı büyüyüp bellek sorunu oluştu. Bunun için, my.cnf dosyasını aşağıdaki gibi değiştirmek zorunda kaldım.

my.cnf şuydu:

datadir         =  /var/lib/mysql

my.cnf şimdi:

datadir         = /home/ubuntu/data/mysql

Denedim,

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

ama yine de aynı hatayı aldım. Sonra /etc/apparmor.d/usr.sbin.mysqlddosyayı değiştirmeye çalıştım . Benim için iyi çalıştı.

İçindeki yeni klasörümüzü beyaz listeye almalıyız usr.sbin.mysqld.

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

Yukarıdaki satırlar yerine şunu ekleyin:

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

Ardından MySQL sunucusunu yeniden başlatın.


1

SELinux çalıştırıyorsanız, aşağıdakiler de yardımcı olabilir ...

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

Benim restorecon -R /var/lib/mysqliçin, dizin için SELinux ayarlarının doğru bir şekilde geri yüklenmesine yardımcı oldu.
Sebi

0

5.5'ten 5.6'ya yükselttikten sonra bu sorunu yaşadım.

Garip bir şekilde, mysqlkullanıcı kaldırılmış ve yeniden oluşturulmuş gibi görünüyordu , bu da tüm mysql dosyalarının esas olarak izinlerini 'kaybetmesine' neden oldu ...

Ben mysql dir giderek bu öğrendim (Ben taşındı gibi benim durumda varsayılan dir değildi) ve sahibi sadece bir uuid ve guid numarası olduğunu gördüm ... Yani, ben sadece chown mysql:mysqltüm koştu dirs ve dosyalar ve voila


-1

Bu basit chownbenim için de işe yaradı, artık çökme süreci yok:

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

Neyse ki, apparmor ile oynamak karmaşık ve düzenlemek zorlaşıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.