mysqlのmy.cnfの設定で、書き込み権限はあるのにlog-bin項目をフルパスで設定してもエラーで起動しない場合の対処

どうも久しぶりですhirameです。

ゲームはさっぱり関係無いのでひっそりと更新します。

 

タイトルにもある通り、別のディスク等にログを書き込む際mysqlを動かしているユーザーの書き込み権限はあるのに、いざ設定して起動しようとするとエラーで起動しない場合の対処法を書いておきます。

mysqlのバージョン5.1(古い)ですが、他のバージョンで同様の問題が起きたときは同じ対処で動くと思われます。

ちなみにOSはCentOS6.4ですので、Windowsユーザーの方は回れ右してください。

 

 

まずは下記のコマンドを叩きます。

 

getenforce

 

これの結果が、

Enforcing

だったらselinuxが原因の可能性が高いです。

もしselinuxを切っても良い環境であれば、

 

setenforce 0

 

のコマンドを叩いてselinuxを一時停止し、再度mysqlを起動してください。

mysqlが問題なく起動したら、間違いなくselinuxが原因となります。

 

 

 

 

 

【setenforce 0】は一時的にselinuxを止めるためのコマンドなので、サーバを再起動するとselinuxも起動します。

恒久的に止めたい場合の設定はグーグル先生に尋ねると腐るほど出てきますが一応ここでも書いておきます。

まずは下記コマンドを叩きます。

 

vi /etc/selinux/config

 

で、下記のように設定します。

SELINUX=disabled

これでサーバの再起動をしてもselinuxは起動しません。

なお間違えてSELINUXTYPEをdisabledに設定するとカーネルパニックを起こして起動しなくなるので気を付けましょうマジで(新サーバ立ち上げ時にやった)

 

 

 

 

様々な事情でselinuxを切れない場合の対処法。

selinuxではプロセスごとに権限のようなもの(以降ドメイン表記)が割り当てられ、ファイルやディレクトリにドメインが設定されていると、プロセスがアクセスできるようになります。その辺の詳細は先生に聞いてください。

今回はログを置きたい場所に対してドメインを設定します。

まずはsemanageコマンドが存在しているかどうかを確認してください。

無かったら下記コマンドでインストールします。

 

yum -y install policycoreutils-python

 

上記のパッケージにsemanageコマンドが含まれます。

次に、mysqlが割り当てられているドメイン名を確認します。下記コマンドを叩いてください。

 

ll -Z /var/lib

 

パスはDBのデータが入っている一つ上の階層が分かりやすい気がします(適当)

データを置いてあるパスがデフォルト以外場合、もちろんそちらに変更しましょう。

すると下記のような結果が出るはずです。

drwxr-xr-x. root    root    system_u:object_r:rpm_var_lib_t:s0 alternatives
drwx——. root    root    system_u:object_r:var_lib_t:s0   authconfig
drwxr-xr-x. root    root    system_u:object_r:system_dbusd_var_lib_t:s0 dbus
drwxr-xr-x. root    root    system_u:object_r:dhcpc_state_t:s0 dhclient
drwxr-xr-x. root    root    system_u:object_r:fprintd_var_lib_t:s0 fprint
drwxr-xr-x. root    root    system_u:object_r:games_data_t:s0 games
-rw-r–r–. root    root    system_u:object_r:logrotate_var_lib_t:s0 logrotate.status
drwxr-xr-x. root    root    system_u:object_r:var_lib_t:s0   misc
drwxr-x—. root    slocate system_u:object_r:locate_var_lib_t:s0 mlocate
drwxr-xr-x. mysql   mysql   system_u:object_r:mysqld_db_t:s0 mysql
drwxr-xr-x. ntp     ntp     system_u:object_r:ntp_drift_t:s0 ntp

 

以下略

mysqlは【mysqld_db_t】というドメインが割り当てられているようです。

次に、ログを保存するディレクトリにドメインの設定を行います。ログを置くパスは仮に/disk01/mysql/logとします。

 

semanage fcontext -a -t mysqld_db_t “/disk01/mysql(/.*)?”

restorecon -R /disk01/mysql/

 

コマンド内にlogディレクトリは入れていませんが、/disk01/mysql/以下のディレクトリが対象となっています。

念のためls -Zコマンドでドメインが設定されていることを確認しましょう。

これでmysqlが起動するはずです。

 

 

 

 

次の更新は良い報告が出来ればいいな(投げやり)

それでは!!

 

 

参考URL:

http://dpsnet.ddo.jp/MEMO/itpro014.htm

http://morphmorph.com/archives/103


Posted in: サーバ, 技術

Comments are closed.