PHP5.3.3からPHP5.5.17に上げたらMySQLが起動しなくなった
前エントリで苦労してPHP5.5系にアップデートしたのはいいんだけど、そのサーバで動いてたアプリケーションをPHPアップデート後に動かしてみたら以下の様なエラーが出た。
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in hoge.php on line 11 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
いろいろと原因をググった挙句
yum で間違って MySQL を 5.5系にアップグレードしたら MySQL が起動しなくなった話
まんまこれ。
PHP5.5系にアップデートしたと同時にMySQLも5.5系にアップデートされたわけですが、MySQL5.5では/etc/my.cnf
内の設定で廃止となったオプションがあり、この廃止オプションを使用していたため動かなかったようです。
廃止オプションについては以下のエントリにまとめられていますが、今回原因となったオプションは[mysql]内のdefault-character-set=utf8
ってやつでした。代わりにcharacter_set_server=utf8
を使用すれば良いようです。
[mysql]MySQL 5.5.3-m3 で廃止になった変数やオプションなどを整理しました
$ sudo vim /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #default-character-set=utf8 ← 実際はコメントアウトじゃなくて削除していいと思う。 character_set_server=utf8 ← 代わりにこれ追加 default-storage-engine=InnoDB innodb_file_per_table skip-character-set-client-handshake max_allowed_packet=100M [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
そもそも自分の環境だと何故かdefault-character-set=utf8
とcharacter_set_server=utf8
がどちらも指定されていた。
ちなみに、サーバの方はcharacter_set_server=utf8
になったが、クライアントの方はdefault-character-set=utf8
のままなので注意が必要です。
とりあえずこれで無事MySQLも動いた。
$ sudo service mysqld start mysqld を起動中: [ OK ]