msiはいろいろ勝手に設定してくれるんだけど、どこをどう設定されたかわからないから何となく嫌だ。ZIPから設定してみる。
環境:Windows XP/7 32/64 bit
OSに合わせて
「Windows (x86, 32-bit), ZIP Archive」
「Windows (x64, 64-bit), ZIP Archive」を選ぶ。
「Windows (x86, 32-bit)」は2つあるが、サイズの明らかに小さい方はソースコードなので、大きい方。
適当な場所に解凍。({MySQLフォルダ}と表す)
初期設定はC:\直下に配置されることを前提としてビルドされているらしい。
{MySQLフォルダ}\bin
my_○○.ini(設定項目の多さ別に設定例が複数用意されている) 普通はsmallでよい。コピーして「my.ini」にリネーム
以下を追加したり編集したり。
[client] password = <your_password> socket = {MySQLフォルダ}/tmp/mysql.sock default-character-set = utf8 [mysqld] socket = {MySQLフォルダ}/tmp/mysql.sock character_set_server=utf8 #skip-character-set-client-handshake [mysql] default-character-set=utf8
[client] socket = ...
socketはUNIXソケット接続をする際に必要だが、Windowsではどういう扱いになるのかよくわかっていない。適当でも問題ない、かも。
[mysqld] character-set-server=utf8
デフォルトの文字コードをutf8にする。
検索すると、「default-character-set」と指定しなさいというページが多くヒットするが、 MySQL5.5からは、mysqld(サーバ側)の文字コード指定は上記に変更されている。注意。 my.iniの内容を解釈できないときは、サーバ起動時に1067エラーが発生する。
デフォルト文字コード設定は、 DB毎、テーブル毎、接続毎に文字エンコーディングの設定をすれば必要ない。 現在はそういう逐次の設定が推奨されているので、利用時に心がけるなら無指定でもよい。
[mysqld] skip-character-set-client-handshake
検索すると指定している例が出てくるが、指定しない方がよい。
これはクライアントがどんな文字コード設定をもっていようが、 問答無用で character_set_* を (_system をのぞいて)サーバと同じ値に統一する命令で、 ほとんどの場合正しく動いて文字化けの防止に役立つが、 文字コードを偽装しつつMySQLの文字コード解釈の不備を突くといったセキュリティ上の問題もあるらしい。
サービスとして登録する前に、ちゃんと立ち上がるかテスト
コマンドプロンプト上で以下を実行
> mysqld --defaults-file={MySQLフォルダ}\my.ini --standalone --console
Vista以降で「Windows セキュリティの重要な警告」が出たら、「ブロックを解除する」
何かいろいろ出て、入力できない状態で止まったらそれを消さずに置いておく。
新しいコマンドプロンプトから、
> mysql -u root -p
「root」という名前のユーザで、パスワードを指定してMySQLサーバに接続。
root@localhostの初期設定はパスワードが空文字列なので、パスワード入力を求められたら無入力でエンター。
Welcome~~と出たら成功。待機時の文字が「mysql>」となる。試しに
SHOW databases;
とでも入力して、データベース一覧が見れるか確認。
mysql> exit
でログアウト。 通常状態に戻ったコマンドプロンプトから、次を実行。
> mysqladmin -u root -p shutdown
パスワード入力画面でエンターを入力すると、mysqlサーバを停止できる。 (最初に立ち上げた黒い画面のままのcmdが、待機状態に戻る)
上記の手順まででは、環境変数の設定を除きレジストリは全くいじられない。しかし、使うたびにサーバを開始・停止させていたのでは正直めんどくさい。
サービスに登録すると起動時に自動的に立ち上がるし、cmdも画面に残さなくてよい。
管理者権限のコマンドプロンプトから、以下を実行。
> mysqld --install MySQL --defaults-file={MySQLフォルダ}\my.ini
滅多に使わない&メモリが足りないという環境では、必ずしも必要ない。
その際は起動テストの「サーバ立ち上げ」「ログイン」「サーバ終了」のバッチファイルを作っておくと楽。