17554


MySQL 5.6, CentoOS6.4を使用しているのですが、MySQLのデータディレクトリの移動が出来ません。

やったこと

  * mysqlサーバーを停止してから、デフォルトのデータフォルダから移動先のデータフォルダへファイル・ディレクトリを全てコピーし、chownで新ディレクトリの所有者をmysql:mysqlに変更

  * /etc/my.cnfを作成し、[client], [mysqld]のdatadir, pid-file, socketを移動先のフォルダにあわせて設定

症状

  * mysqlサーバーを起動するためにservice mysql startをコマンドラインで入力すると、下記のメッセージが表示される

Starting MySQL.The server quit without updating PID file
(/new_datadir/***.localhost.pid).

  * /new_datadir/***.localhost.errの内容は下記の通り

151012 16:40:34 mysqld_safe Starting mysqld daemon with databases from
/new_datadir  
151012 16:40:34 mysqld_safe mysqld from pid file
/new_datadir/***.localhost.pid ended

  * /etc/my.cnfを消去すると、mysqlサーバーはデフォルトのデータフォルダで問題なく起動する。

様々なサイトを調べたのですが、どうしても自力で解決できません。  
また、getenforceの返り値はPermissiveだったので、SELinux関係のトラブルではないと思います  
よろしくお願いします。

追記  
[このサイト](https://access.redhat.com/documentation/en-
US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-
Managing_Confined_Services-MySQL-
Configuration_Examples.html)にしたがって移動先のディレクトリとファイルのタイプを'unconfined_u:object_r:mysqld_db_t:s0'に変更しましたが、改善できませんでした。


CC BY-SA 3.0
2015-10-12T08:30:51.590
17552
2015-10-15T01:47:15.660
2015-10-13T07:53:44.950
12743
12743
question
mysql
MySQLでのデータディレクトリ変更


エラーログファイルに、mysqld_safe のログしか出ていないようです。mysqld のエラーがどこかに出力されているのではないかと思います。

mysqld --help --verbose で出力される log-error
の値がどのファイルになっているかを確認し、そのファイルの中にエラーが出力されていないか確認してみるのが良いと思います。

それでもわからなければ、mysqld_safe ではなく直接 mysqld を起動してみると何かわかるかもしれません。

もし例示されている /new_datadir/ が実際には複数のパス要素(/new/data/dir/
等)で構成されているとしたら、各ディレクトリのパーミッションを調べてみるのも良いと思います。`ls -ld / /new /new/data
/new/data/dir` のように。


CC BY-SA 3.0
2015-10-12T09:20:50.927
17554
2015-10-14T13:58:55.263
2015-10-14T13:58:55.263
3249
3249
17552
answer


/new_datadir/ 以下の `ls -l` の結果が書かれてないので当てずっぽうですが  
root が作成した pid ファイルが残ってませんか？


CC BY-SA 3.0
2015-10-13T03:42:47.723
17579
2015-10-13T03:42:47.723
5008
17552
answer


コメントだと解決法が埋もれてしまうというご指摘があったので、回答として解決法を投稿します。

移動先のデータディレクトリが複数のパス、例えば/new/data/dir、で構成されてる場合には、「/」「/new」「/new/data」「/new/data/dir」の全てにr権限が必要のようです。  
下記のように各ディレクトリにパーミッションを与えることで解決できます。

[code]

    chmod +r / /new /new/data /new/data/dir
    
[/code]

権限が変更されたことはls -ldで確認できます。

[code]

    ls -ld / /new /new/data /new/data/dir
    dr-xr-xr-x. 28 root  root  4096 Sep 24 11:43 /
    drwxr-xr-x.  4 root  root  4096 Oct 14 22:23 /new
    drwxr-xr-x. 27 User1  User1  4096 Oct 12 16:14 /new/data
    drwxr-xr-x.  5 mysql mysql 4096 Oct 15 10:42 /new/data/dir/
    
[/code]

これで起動できるようになりました。


CC BY-SA 3.0
2015-10-15T01:47:15.660
17661
2015-10-15T01:47:15.660
12743
17552
answer