waste of time

主にPHP

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=utf8character_set_server=utf8がどちらも指定されていた。
ちなみに、サーバの方はcharacter_set_server=utf8になったが、クライアントの方はdefault-character-set=utf8のままなので注意が必要です。

とりあえずこれで無事MySQLも動いた。

$ sudo service mysqld start

mysqld を起動中:            [  OK  ]