MySQLの起動時に「mysql / plugin.frmファイルが見つかりません」


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,

configに変更を加えた後、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

最初に試すことは、たとえばmysqlでMySQLを実行する場合、MySQLのdatadirの所有権を変更することです。

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

もう1つ確認すべきことは、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

私の場合、ibdata1フォルダが含まれているMySQLデータディレクトリを別のパーティションに配置する必要ibdata1がありました。これは、自分の成長が速すぎてメモリの問題が発生したためです。そのために、my.cnfファイルを次のように変更する必要がありました。

my.cnf:

datadir         =  /var/lib/mysql

my.cnf now:

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すべての上dirsとファイル、および出来上がり


-1

これchownも私にとってはうまくいきましたが、クラッシュプロセスはもうありません:

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

ありがたいことに、apparmorで遊ぶことは複雑で編集が難しくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.