mysql-max (Win32)

 MySQLはWindows上で動作させることができる。機能的にUnix版とも変わりなく、Windows版は管理をGUIで行うことができ、NTサービスとして起動させることも可能である。phpMyAdminをインストールすることでWebからデータベースを操作することも可能である。
MySQLのインストールで意外と重要なのが、文字コードの設定である。デフォルトでは「Latin」になっており日本語が扱えないようになっているので、設定を正しく行わなくてはならない。Windows版なのでここでは文字コードをShift-JISにして説明するが、Shift-JISでデータベースを扱うときに問題となるのが、「予」や「能」などの、2バイト目が「\」のコードを扱ったときに予期しないエラーが出たり文字化けを起こしたりする可能性もある。stripslashes関数を使ったり、magic_quotes_gpcを設定したりして対処する必要がある。

MySQL
DefaultPort : 3306(MYSQL)

1)「mysql-max-3.23.49-win.zip」を解凍し、展開されたディレクトリ内のsetup.exeを実行する。インストール先はC:\MYSQLとした。

2)インストール完了後、MySQLサーバの設定を行う。インストールディレクトリ下の「bin/winmysqladmin.exe」を実行する。Quick Setupの画面が表示されたらCancelボタンを押し、タスクトレイの信号機アイコンを右クリックし、「show me」を選択する。

[mysqld]
port=3306
skip-locking
default-character-set=sjis
set-variable=key_buffer=16M
set-variable=thread_stack=128k
set-variable=flush_time=1800
basedir=C:/MYSQL/
datadir=C:/MYSQL/data/
[mysqldump]
quick
set-variable=max_allowed_packet=16M [mysql]
no-auto-rehash
default-character-set=sjis [WinMySQLAdmin]
Server=C:/MYSQL/bin/mysqld.exe

 記述したら、左下の「Save Modification」ボタンを押して設定を保存する。その後設定画面を右クリックして「Hide me」を選択し、タスクトレイに戻す。ここでの設定は「%SystemRoot%\my.ini」として保存される。
(なおMySQLのインストールディレクトリ以下に、設定ファイルの例があるのでそれを「my.ini」というファイル名でWindowsの%SystemRoot%へコピーしてもよい。)

4)タスクトレイの信号アイコンが赤色に点灯している場合は、アイコンを右クリックして「Win NT」→「Start the Service」を選択し、緑色に変化することを確認する。その後「Win NT」→「Stop the Service」を選択し、MySQLデーモンを停止させる。黄色から赤色に変化したら「Win NT」→「ShutDown this Tool」を選択して管理プログラムを終了。

5)Windowsのサービス画面で、MySqlが追加されていることを確認し、MySQLサービスを開始する。サービスの登録・削除は信号機アイコンを右クリックして、「Win NT」から「Install the Service」「Remove the Service」でそれぞれ行うことができる。

6)MySQLのインストールディレクトリ下の「bin」でコマンドプロンプトを起動し、以下のコマンドを実行する。MySQLの管理者(root)のパスワードを設定する。(必要に応じてbinにパスを通しておく)

C> cd \mysql\bin
C> mysqladmin -u root password ****
(****に設定したいパスワードを入力する)

7)mysqlコマンドを実行。-pオプションをつけるとパスワードをきいてくるので入力する。「STATUS」と入力すると現在の設定の状態が表示されるので、特に「Client characterset」と「Server characterset」がそれぞれ「sjis」に設定されているか確認する。

C> mysql -u root -p
mysql> STATUS

またセキュリティのため、データベースに登録されていないユーザと、パスワードが設定されていないユーザからのアクセスを排除するための設定を行う。

mysql> USE mysql;
mysql> DELETE from db WHERE User = "";
mysql> DELETE from user WHERE Password = "";
mysql> FLUSH PRIVILEGES;
mysql> exit;

MySQLのトランザクション機能

MySQLのトランザクション機能を利用するには、mysql-maxバイナリでなければ利用できない。MySQLの起動に関してもmaxで実行する必要がある。またトランザクション機能を使うことでMySQLの処理速度が落ちるのは拒めないので、安全性よりも速度を重視するなら使わないほうがよい。
WindowsでもInnoDBとBerkeleyDBの2種類の方式が利用できるので、好みの方を利用するとよい。

1)MySQLサービスが起動している場合は停止させる。その後MySQLのインストールディレクトリ下の「bin\winmysqladmin.exe」を起動し、タスクトレイの信号機アイコンを右クリックして「Show me」を選択。起動後「my.ini Setup」タブを開き、左の「mysqld file」から「mysqld-max」を選択する。Save Modificationを押してmy.iniを更新する。
 なおトランザクション機能にInnoDBを使う場合は、右のmy.iniテキストボックスに以下のような行を追加する。追加するセクションは[mysqld]で、各自の環境に合わせて設定する。以下の例では、MySQLのインストール先が「C:\MYSQL」の場合。

innodb_data_file_path = ibdata1:64M
innodb_data_home_dir = C:/MYSQL/data/innodb/
innodb_log_group_home_dir = C:/MYSQL/data/innodb/
innodb_log_arch_dir = C:/MYSQL/data/innodb/
set-variable = innodb_mirrored_log_groups=1
set-variable = innodb_log_files_in_group=3
set-variable = innodb_log_file_size=5M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
innodb_log_archive=0
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50

2)サービスとして登録してある場合、サービスを再登録する。admin画面を右クリックして「Hide me」を選択し、タスクトレイの信号機アイコンを右クリック、「Win NT」から「Remove the Service」を選択後、再び「Win NT」から「Install the Service」で登録する。登録後は「コントロールパネル」「管理ツール」「MySql」サービスのプロパティで、実行ファイルのパスが「mysql-max.exe」になっていることを確認する。

3)InnoDBを使う場合は、(1)で設定したInnoDBのデータを保存するディレクトリを作成する。この例では「C:\MYSQL\data\InnoDB」。その後MySQLサービスを起動し、このディレクトリ内にファイルがいくつか生成されることを確認する。BDBを利用する場合はそのままMySQLサービスを起動すればよい。

4)トランザクション機能を使うには、MySQLプロンプトからテーブルの型をトランザクション用に指定する必要がある。新しくテーブルを作る場合はCREATE TABLEで、既に存在しているテーブルを変更する場合はALTER TABLEでTYPEを指定して実行する。InnoDBなら「TYPE=InnoDB」を、BerkeleyDBなら「TYPE=BDB」をつける。

# mysql -u root -p
MYSQL> use db;
MYSQL> create table tbl (field1 text, field2 text) type=InnoDB;
(データベースdb内に、テーブルdbをInnoDBトランザクションを利用するよう指定して作成)

※なお、InnoDBトランザクション機能つきで作成したテーブルは、「data\db\」ディレクトリ以下に「tbl.frm」というファイルが生成されるが、「db.MYD」や「db.MYI」のようなファイルは生成されない。

5)トランザクションは、開始「BEGIN」、終了「COMMIT」、取消「ROLLBACK」の各文を利用する。

MYSQL> begin;
MYSQL> insert into tbl values ("data11", "data12");
MYSQL> commit;
(data11とdata12がtblに挿入される)
MYSQL> begin;
MYSQL> insert into tbl values ("data21", "data22");
MYSQL> rollback;
(data21とdata22はtblに挿入されない)
MYSQL> \q

※基本的にCOMMITをしないでプロンプトを出た場合はキャンセルされるので特にROLLBACK関数を呼ぶ必要はないが、BEGINを呼んだ後に再びBEGINを呼んだ場合はCOMMITされるので注意。 ※PHPスクリプトで利用する場合は、BEGIN、COMMIT、ROLLBACKさせたい部分にmysql_query()関数でクエリを送信すればよい。

TOP OF PAGE