web-dev-qa-db-ja.com

データディレクトリを再配置した後、mysqlが起動しない

私は、mysqlのデフォルトのインストールですべてのデータベースファイルを/var/lib/mysqlに配置するWebサーバーを持っています。 /varがマウントされているパーティションには2GBのスペースしかないので、スペースで問題が発生した後、mysqlのデータディレクトリを再配置することにしました。

私の素朴なアプローチは、/var/lib/mysqlディレクトリを完全に/web/dbs/mysqlにコピーし、/etc/mysql/my.cnfを変更して、

datadir = /web/dbs/mysql

しかし、再起動後、mysqlエラーログに次のエラーが表示され、サーバーが起動しません。

130130  9:59:23 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
130130  9:59:23 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130130  9:59:23  InnoDB: Initializing buffer pool, size = 8.0M
130130  9:59:23  InnoDB: Completed initialization of buffer pool
130130  9:59:23  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.

すべてのファイルとディレクトリはmysql:mysqlに属しています。テストのために、今のところ/web/dbs/mysqlのアクセス権をrwxrwxrwxに変更しました。

そして、はい、/web/dbs/mysql/mysql/plugin.frmは存在します。

ここで何が問題になるのでしょうか?何か不足していますか?利用可能なより詳細な出力ログはありますか?

更新:
その他の情報:
次のコマンドですべてを再試行しました:

  • サーバーをシャットダウンしましたstop mysql
  • 古いデータを削除しましたrm -r /web/dbs/mysql
  • cp -p -r /var/lib/mysql/ /web/dbs/を使用してコピーしました
  • My.cnfのdatadirをdatadir = /web/dbs/mysqlに設定します
  • サーバーを再起動しました。同じエラー

特権:

drwxr-xr-x  4 mysql mysql 34   2013-01-30 15:55 /web/dbs
drwx------ 19 mysql mysql 4096 2013-01-30 15:44 /web/dbs/mysql
drwx------  2 mysql mysql 4096 2012-10-11 11:25 /web/dbs/mysql/mysql
-rw-rw----  1 mysql mysql 8586 2012-08-14 19:15 /web/dbs/mysql/mysql/plugin.frm

Datadirをdatadir = /var/lib/mysqlにリセットすると、サーバーは問題なく起動します

以下を試しました:

root:/# su - mysql
mysql:~$ /usr/sbin/mysqld --verbose
130130 16:01:05 [Warning] Can't create test file /web/dbs/mysql/s15800994.lower-test
130130 16:01:05 [Warning] Can't create test file /web/dbs/mysql/s15800994.lower-test

mysql:~$ touch /web/dbs/mysql/s15800994.lower-test
mysql:~$ ls -l /web/dbs/mysql/s15800994.lower-test
-rw-r--r-- 1 mysql mysql 0 2013-01-30 16:01 /web/dbs/mysql/s15800994.lower-test

したがって、データディレクトリは正しく設定されます。 mysqlユーザーは書き込みアクセス権を持っていますが、mysqlプロセスはファイルを作成できません。

何が悪いのでしょうか?

6
king_nak

完全を期すための完全な回答としてコメントで得た解決策を追加しています...

Su/Sudoを使用したテストでは、mysqldがアクセス権エラーについて不平を言っているのに対し、mysqlユーザーは実際にフォルダーに正常に書き込むことができ、これがファイルシステムのアクセス権の問題ではないことを明らかにしました。 (同様の問題に直面した場合に役立つ最初のステップ)

Linuxの一部のディストリビューション(すべてではないにしても?)には、実行可能ファイルへのアクセスを許可するファイル/フォルダーを制限するAppArmorが付属しています。

この場合の解決策は、/etc/apparmor.d/usr.sbin.mysqldポリシーファイルに新しいパスを単に追加することでした。

12
USD Matt

ほとんどのrpmベースのlinuxでselinuxが表示されるため、seLinuxのAppArmor検索がない場合。無効にしてください。

#setenforce 0
#getenforce

Getenforceコマンドは、パーマシブになります。

1
Zelocox