Wednesday, July 16, 2014

MySQLの、Ubuntuの:: mysqldがアクセス権を持っていない

Original post: http://anothermysqldba.blogspot.com/2014/07/mysql-ubuntu-mysqld-does-not-have.html
だから、今日、私はいくつかのテーブルを回復できるよう、バックアップからMySQLデータベースを復元する必要があるために起こる。 私は、ポート3306を経由して実行されている彼の本番データベースを残しながら、私はポート3307を経由してバックアップを設定します。 

しかし、私はmysql_restoreディレクトリ内の3307ポートを介して別のバージョンを起動しようとしましたが、私はいくつかのエラーに遭遇した.... 


/usr/bin/mysqld_safe --defaults-file=/etc/my_3307.cnf 

[Warning] Can't create test file /var/lib/mysql_restore/localhost.lower-test 
[Warning] Can't create test file /var/lib/mysql_restore/localhost.lower-test 
Can't find file: './mysql/plugin.frm' (errno: 13) 

InnoDB: Completed initialization of buffer pool 
InnoDB: Operating system error number 13 in a file operation. 
InnoDB: The error means mysqld does not have the access rights to 
InnoDB: the directory. 
InnoDB: File name ./ibdata1 
InnoDB: File operation call: 'open'. 
InnoDB: Cannot continue operation. 

# perror 13 
OS error code 13: Permission denied 


だから私はまず、ディレクトリのアクセス権をチェックし、それが700に設定されており、MySQLを所有していたことを確実にした。 私はまた、データディレクトリ内のディレクトリは700に設定されており、MySQLを所有していたことを確実にした。 残りのファイルは、すべて600(-RW-RW ----)に設定されています。 念のため私はまた、ディスクがいっぱいではなかったことを確実にした。 

ように、エラー·ログには、アクセス許可の問題を示していますが、一目見ただけですべての権限が正しいことを確認します。 だから、それは何ですか? 

私はRHEL、または関連の枝にあった場合も、私は、SELinuxを考えるだろう。 それは何とかそれをブロックした。 
UbuntuのAppArmorは、この場合に検討する必要がありました。 


# cat /etc/apparmor.d/usr.sbin.mysqld 
... 
/var/lib/mysql/ r, 
/var/lib/mysql/** rwk, 
... 


デフォルトの「VAR / libに/ MySQLは「アドレス指定されていることに注意してください。 私が作成した復元ディレクトリは、しかしではなかった。 だからとAppArmorの再起動を追加することによって、私は、成功してMySQLを起動することができました。 


# vi /etc/apparmor.d/usr.sbin.mysqld 
... 
/var/lib/mysql/ r, 
/var/lib/mysql/** rwk, 
/var/lib/mysql_restore/ r, 
/var/lib/mysql_restore/** rwk, 
... 
/etc/init.d/apparmor {start|stop|restart|reload|force-reload|status|recache} 
/var/lib/mysql_restore# /etc/init.d/apparmor restart 
... 
/usr/bin/mysqld_safe --defaults-file=/etc/my_3307.cnf 
... 
# mysql -P 3307 --socket=/var/lib/mysql_restore/mysqld_3307.sock 



必要に応じて見直しのための追加のURL: