MySQLのパラメータを変更してMySQLを再起動する際に、起動時にエラーが発生しました。
その際の対処について記載しておきます。(焦った・・・)
1.今回の変更点
あるサーバの my.cnf で以下のメモリ設定を変更しました。
- thread_cache_size
- key_buffer_size
- sort_buffer_size
- read_buffer
- query_cache_size
2.エラー内容
その後に、MySQLを停止し、起動をかけました。すると、以下の状態になりました。
# /etc/init.d/mysql start Starting MySQL... ERROR! The server quit without updating PID file (pidファイルパス). #
PIDファイル周りで問題があったのか、今回設定したメモリ設定パラメータがまずかったのか・・・。
多少焦りつつも、とりあえずMySQLエラーログを参照してみました。
すると、以下のエラーが出ていました。
[Note] InnoDB: 1.2.10 started; log sequence number 16279201727 [ERROR] /usr/sbin/mysqld: unknown variable 'default-character-set=utf8' [ERROR] Aborting
今回の作業とは直接的には関係のない設定値「default-character-set」でエラーが出ている状態でした。
PIDうんぬんのエラーが出たのは、(設定がまずくて)MySQL起動できなかったよ、という内容みたいです。
とりあえず、確かに「default-character-set=utf8」は設定していたので無効にしました。すると、無事起動するようになりました。
3.調査と対応
まず、mysql でキャラクターセットを確認してみました。
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql>
当然と言えば当然ですが、UFT8ではなくなっています。
次に、エラーの原因をググってみました。
すると、MySQL 5.5 からは、default-character-set オプションは廃止になる位置付けになっていました。
ちなみに、今の稼働バージョンは「Server version: 5.6.10 MySQL Community Server (GPL)」です。なぜ、default-character-set をセットしたまま今まで動いていたのかは疑問です。
とりあえず、UTF8 にしたいので、以下の設定を my.cnf に入れました。
#default-character-set=utf8 character-set-server=utf8
その後、MySQLを再起動して、キャラクターセットを確認しました。
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql>
ちゃんと「UTF8」になっており、安心!