CentOS6.4でMySQLのポートを変更するときにはまった
MySQLのポート変更は通常の手順で行くとWindowsもLinuxもあまり変わらないはずで
my.cnfを書き換えてファイアウォールの設定を行うだけ。
Linuxの場合大抵下記のように紹介されてる。
mysqlを終了しておく
# service mysql stop
/etc/my.cnfを書き換えする
# editra /etc/my.cnf # 下記追加か書き換え port=3307
ファイアウォールでポートを解放する。
# editra /etc/sysconfig/iptables # 下記追加 --dportの次の数字を解放したいポートに設定する -A INPUT -m state --state NEW -m tcp -p tcp --dport 3307 -j ACCEPT
ファイアウォールを再起動
# /etc/init.d/iptables restart
mysqlを開始する
# service mysql start
しかし、CentOS6.4環境では下記エラーが出てMySQLの起動が失敗する
Starting MySQL... ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).
MySQLのログを確認すると何やらTCP/IPのPortの権限がないとか書かれている
2013-06-23 18:35:09 5356 [ERROR] Can't start server: Bind on TCP/IP port: Permission denied 2013-06-23 18:35:09 5356 [ERROR] Do you already have another mysqld server running on port: 6000 ? 2013-06-23 18:35:09 5356 [ERROR] Aborting
色々調べても日本語のサイトじゃ情報収集できなく結局下記のオラクル社員のブログ?で情報発見した。
https://blogs.oracle.com/jsmyth/entry/selinux_and_mysql
CentOSにはSELinuxというセキュリティーポリシーのプログラムがあるらしく
こいつが色々と邪魔してた
結果からいくとこうすることで解決できた。
# setenforce 0 # service mysql start Starting MySQL.. SUCCESS! # netstat -nlp | grep 3307 tcp 0 0 :::3307 :::* LISTEN 5772/mysqld
正確に言うと邪魔しているのではなく余計なポートを使わせないようにしているみたいだけど
セキュリティ考えて標準ポートから変えたいんだよね
でもsetenforce 0して逆にセキュリティにあんまりよろしくないのかもしれない
あと同ページには/datadirの権限についてのエラーも書いてあるからもしかしたらデフォルトの設定ではエラー出るかも、まぁ、出たらこれ思い出してもう一度読み直そう
(英語ページ読むのって疲れるんだよねw)