FreeBSD で MySQL を有効化

  • 投稿日:
  • by
OS インストール時に MySQL をインストールしたのですが、なぜか client しか入っていませんでした。server のインストールから利用可能な状態にするまでの設定を書きます。 まず、mysql-server をインストールします。また、あとで必要になるので、一緒に MySQL 接続用 Perl モジュール DBD::mysql も入れておきます。

package の場合:
# pkg_add -r mysql50-server
# pkg_add -r p5-DBD-mysql
ports の場合:
# cd /usr/ports/databases/mysql50-server/
# make
# make install

# cd /usr/ports/databases/p5-DBD-mysql/
# make
# make install
あらかじめ用意されている my-medium.cnf から、設定ファイル my.cnf を作成します。
# cp /usr/local/share/mysql/my-medium.cnf /usr/local/etc/my.cnf
デフォルトの設定だと使用される文字コードが Latin-1 になっているので、my.cnf を編集してこれを UTF-8 に変更します。
# vi /usr/local/etc/my.cnf
各セクションに追加する内容は以下の通りです。
[client]
default-character-set = utf8

[mysqld]
datadir = /var/db/mysql
default-character-set = utf8
character-set-server = utf8
skip-character-set-client-handshake

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8
datadir に関しては、設定しなくてもデフォルトで /var/db/mysql になります。明示的に指定しておきたかったので書くことにしました。

注目すべきは character-set-serverskip-character-set-client-handshake
MySQL では、サーバーとクライアントの間で文字コードが違っている場合、自動的に変換してくれます。ただし、仕様として、必ず一度 Unicode(ucs2) に変換してから目的の文字コードに変換します。この自動変換がうまくいかない場合に、文字化けという結果で度々私たちに余計な迷惑をかけてくれます。

自動変換は時として便利ではあるのですが、あらかじめサーバーとクライアントであらかじめ同じ文字コードを使うよう設定しておけば済む話なので、この変換をスキップさせる設定として skip-character-set-client-handshake を設定します。

なお、これが使えるのは MySQL 4.1.5 / 5.0.13 以降ですのでご注意を。

また、skip-character-set-client-handshake は、変数 character_set_server にセットされている文字コードを参照するらしい。で、character-set-server は、その変数 character_set_server のデフォルト値を設定するものらしい。ネットで探した情報だが、正直何のために参照するのかよく分からない... まぁ、必要そうなので、一応書いておくことにします。

ただし、注意点がひとつ。少なくとも現行バージョンの MySQL まででは、default-character-set と character-set-server の違いが見られないということです。
つまり、どちらの設定値もデフォルトの文字コードとして使用される。両方を書き、さらに双方の文字コードが違っている場合には、後に記述した設定が優先される、というか上書きされ、使用されることになる。

default-character-set と character-set-server の違いについてネットで調べたところ、どうやら、default-character-set でサーバーのキャラクタセットがすべて初期化されるが、その対象が character-set-server という話らしい。...うーん、よく分からない。

現時点での結論としては、両方書く必要性はないと思われる。両方設定してもいいけど、設定するなら後々混乱しないように文字コードは必ず一致させておくこと。

...っと、話が横道に逸れてしまいました。えと、設定が終わったら MySQL を初期化します。
# /usr/local/bin/mysql_install_db
次に、MySQL のデータファイルが保存されるディレクトリの所有者を設定します。
# chown -R mysql /var/db/mysql/
MySQL デーモンを起動します。
# /usr/local/etc/rc.d/mysql-server start
MySQL の root のパスワードを設定します。
# mysqladmin -u root -h localhost password 'XXXXXX'
サーバーを再起動しても自動的に MySQL サーバーが起動するように rc.conf に設定を追加します。(すでに追加されている場合には何もする必要はありません。)
# vi /etc/rc.conf
追加する内容は、以下の通りです。
mysql_enable="YES"
以上です。お疲れ様でした。

参考にしたサイト