MySQLを動作させる準備
Windows Azure PlatformでMySQLを動作させるには、大きく2つの方法があります。1つは、WorkerRoleで動作させる方法です。WorkerRoleとは、Windows Azure上のIISが提供するWebアプリケーションをホストする環境のことです。前回PHPを動作させるために利用したWebRoleと似ていますが、WebRoleがHTTP/HTTPSリクエストを受け付けるのに対し、WorkerRoleは定期的なタスクの実行などバックグラウンドの処理に用いられるという違いがあります。また、前回少し触れたように、WorkerRoleで動作するMySQLのデータは、サービス(サーバ)を再起動すると初期状態にリセットされてしまいますので、ストレージに保存(同期)するなどの処理が必要になります。
もう1つは、Windows Azureドライブを利用する方法です。Windows Azureドライブとは仮想ディスクをAzureの仮想サーバにマウントしてNTFSのドライブとして利用できるようにするものです。仮想ディスクにMySQLをインストールし、サーバ起動時にマウントし自動的にMySQLが実行されるようにします。Windows Azureドライブのデータはサーバの再起動にともなってリセットはされません。
これら2つの方法について、数回に分けて導入手順を説明していきます。今回は、ローカルの開発環境にMySQLをインストールする手順と注意点について説明します。
ローカル環境へのMySQLのインストール
MySQLのダウンロードサイト にアクセスし、MySQL Community Serverをダウンロードします。
図1 MySQLのダウンロードサイト
ダウンロードのボタンからダウンロード画面に進み、GA(Generally Available)になった最新バージョン5.5.19の64bit版をダウンロードします。新規にダウンロードする際はユーザ登録が必要になります。
図2 64bit版を選択しダウンロードする
インストーラを起動して、許諾書に同意すると、図3の画面になりますので、今回はデフォルトの「Typical」を選択します(図4) 。
図3 インストーラを起動
図4 「 Typical」を選択
OKボタンを押すとインストールが開始されます。インストール中にMySQL Enterpriseの紹介が入り(図5) 、その後設定ウィザードを起動するかどうかの確認になりますので、そのまま「Finish」を押します(図6) 。
図5 MySQLの確認画面
図6 Finishを押して、設定ウィザードを開始
すると、図7のような画面が表示されるので、MySQLのメモリや接続数などを設定していきます。
図7 設定ウィザードの画面
はじめに、詳細設定か標準設定かをたずねられますので、デフォルトで選択されている詳細設定(Detailed Configuration)を選択します。続けて、表示される画面でもデフォルトのまま「Next」を押していきます。ここでの設定はmy.ini(my.cnfに相当)に書き込まれるものです。
図8 詳細設定か標準設定かの選択
図9 ディスクやCPUの使用量をどうするか
図10 ストレージエンジンに何を使うか
図11 インストール先の設定
図12 同時接続数の設定
図13 ネットワーク設定
変更を要するのは、文字コードとWindowsのサービス登録の設定です。文字コードの設定画面では、UTF8を利用するように2番目の「Best Support For Multilingualism」を選択します。
図14 UTF-8を選択
また、サービスとPATHの設定画面では、「 Install As Windows Service」と「Include Bin Directory in Windows PATH」のいずれのチェックも外しておきます。
図15 サービス登録をしない設定にする
サービスとして登録すると、Azureプロジェクトから呼び出されたmysqld.exeが起動しなかったり、ローカル環境の設定(my.ini)を引き継いで動作してしまったりするからです。
次の画面で、「 Execute」を押すと、設定は終了です。
図16 「 Execute」を押して設定を終了
デフォルトでインストールした場合、MySQLのインストールディレクトリは「C:\Program Files\MySQL\MySQL Server 5.5」となります。また、サービスとして登録しない場合は、rootパスワードの設定が省略されますので、コマンドライン上で、パスワードを設定しておきます。
コマンドプロンプトを起動し、C:\Program Files\MySQL\MySQL Server 5.5\binディレクトリに移動します。そのうえで、
mysqladmin --user=root password *****
とするか、以下のように、MySQLサーバ(デーモン)mysqld.exeを立ち上げて設定します。
start mysqld.exe
mysql -u root
mysql> set password for root@localhost=password('******');
EclipseでWorkerRoleプロジェクトを作成する
次に、MySQLをWorkerRoleで動作させるためのプロジェクトをEclipse PDTを使って作成してみましょう。
Eclipseを起動し、PHPのWebRoleを作成したときと同様に、「 Windows Azure」メニューから、「 Windows Azure PHP Project」を選択します。
図17 Windows Azure PHPプロジェクトを作成
プロジェクト名は、ここでは「Sample2」として「Next」を押します。
図18 プロジェクト名を入力してNext
すると、次のような、WebRoleを設定する画面が表示されます。下部に「Enable MySQL」という項目がありますので、チェックを入れます。Role名はここでは「WebRole」とします。
図19 Enable MySQLにチェックを入れる
そのまま「Next」を押すと、WorkerRoleを設定する画面が表示されます。
図20 WorkerRoleの設定画面
Role名を「WorkerRole」とし、MySQL Runtimeの場所に「C:\Program Files\MySQL\MySQL Server 5.5」を設定します。データベースサイズを1000MBとし、Rootパスワードに先ほど設定したパスワードを入力します。続けてNextを押すと、設定した各ロールの確認画面が表示されますので、「 Finish」を押してプロジェクトを作成します。
図21 ロールの確認画面
しばらくすると、以下のような構成で、プロジェクトが作成されます。WebRoleとWorkerRoleが作成されているのが確認できます。
図22 WebRoleとWorkerRoleを含んだプロジェクト
MySQLとphpMyAdminをプロジェクトに追加
続いて、WorkerRoleにMySQLを、WebRoleにMySQLを管理するツールである「phpMyAdmin」をそれぞれ追加していきます。
まず、Eclipse上で「Sample2_WorkerRole」を右クリックし、「 mysql」フォルダを追加します。
図23 mysqlフォルダを追加
次に、MySQLをインストールした「C:\Program Files\MySQL\MySQL Server 5.5」をExplorerで開きます。配下には、bin、data、include、lib、shareなどのフォルダがありますので、各フォルダをEclise内の「Sample2_WorkerRole」にドラッグ&ドロップするなどしてインポートします(Explorerを使ってワークスペースに設定している「C:\inetpub\wwwroot」内にコピーし、Eclise上でF5キーを押して再読み込みするかたちでもかまいません) 。いずれにしても、次のようなフォルダ構成にします。
図24 mysql配下にbinなどをインポートして追加
なお、MySQLのデータディレクトリ(my.iniでのdatadir)は、デフォルトで「C:\ProgramData\MySQL\MySQL Server 5.5\data」になっています。
ローカルで追加したrootパスワードやデータベース、テーブルなどのデータをAzureにデプロイするには、C:\ProgramData\MySQL\MySQL Server 5.5\data配下のファイルを「Sample2_WorkerRole\mysql\data」にコピーする必要があります。
次に、WebRoleにphpMyAdminを追加します。
phpMyAdminのサイト にアクセスし、「phpMyAdmin-3.4.9-all-languages.zip」をダウンロードします。
図25 phpMyAdminをダウンロード
ファイルを展開したら、フォルダ名をphpMyAdminに変更して、先ほどと同じように、Sample_WebRole配下にインポートします。
図26 WebRole配下にphpMyAdminをインポート
次に、phpMyAdminフォルダにある設定ファイルのサンプル「config.sample.inc.php」をコピーして「config.inc.php」を作成します。config.inc.phpを開いて、下記の「任意の文字列」の部分に、cookie認証に用いる文字列(salt)を入れておきます。
$cfg['blowfish_secret'] = '任意の文字列'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
また、ログイン時にサーバ名とポートを指定できるように、phpMyAdminのlibrariesフォルダにあるconfig.default.phpのAllowArbitraryServerをfalseからtrueに変更しておきます。
$cfg['AllowArbitraryServer'] = true;
ローカルでの動作とエラー確認
必要なファイルのダウンロードと構成は以上です。しかし、この状態のままではまともに動きません。php.iniやmy.ini、Eclipseでの設定などが必要になります。また、デプロイの際には、ServiceConfiguration.cscfgやServiceDefinition.cscfgの設定を変える作業も必要になります。
特にやっかいなのは、Eclipse PDTが提供している機能だけでは、MySQLなどの動作をこまかく設定できなかったり、パッケージを作成するときに自動で生成されるファイルに手直しが必要になったりすることです。
実際、Windows Azureメニューから「Run Windows Azure PHP Project in Development Fabric」を実行してみると、Eclipseのコンソールに(図27)のようなエラーが出力されます。
図27 エラー表示
Error : CloudServices41 : The entrypoint WorkerRole1.dll is not a valid assembly. Please provide a relative path to the binary that implements the entrypoint.
また、Azure環境のエミュレータ「コンピュートエミュレータ」( ログや動作状況を確認できる)で確認すると、WebRole、WorkerRoleの各ロールは稼動しているものの、WorkerRoleがエラーを出し続けていることがわかります(図28) 。
図28 エミュレータ画面
次回は、設定ファイルの確認やエラーへの対処などを行ったうえで、実際にWindows Azureにデプロイして、WorkerRoleでMySQLを動作することを確認してみたいと思います。