LAMP開発者のためのWindows Azure講座

第5回 Azure上でのMySQLの起動[その2]

この記事を読むのに必要な時間:およそ 5 分

Windows AzureにデプロイするためのPHPとMySQLの設定

続いて,パッケージを作成して,Windows Azure上にデプロイしてみます。第3回でデプロイしたように,メニューから「Create Windows Azure Service Package for Windows Azure PHP Project」を選択してパッケージを作成しますが,このままAzureにデプロイしても正しく動作しません。デプロイする前に,いくつか設定が必要です。

1つは,php.iniの変更です。PHPはローカル環境で動作しており,Azure上で動作するphpと参照するディレクトリなどが異なります。Eclipse PDTではあらかじめ組み込まれたPHP(5.3.4)のほか,個別にインストールしたPHPを利用できます。

今回は,第2回でインストールしたVC9 x86 Non Thread SafeのPHP(5.3.8)を利用していますが,このphp.iniを用いて,Azure上のphpMyAdminを動作させようとすると,以下のようなエラーで,ログイン画面そのものが表示されません。

図13 PHP設定ファイルがエラー

図13 PHP設定ファイルがエラー

これは,Windows Azure上では,WindowsフォルダはC:ではなくD:にあることから,php.iniで指定したsessionの保存先が読み込めないためです。

そこで,Eclipseのエディタでphp.iniを開き,session.save_pathに,C:ドライブが指定されている箇所をD:ドライブに設定します。

具体的には,910行目(行番号は環境やバージョンにより異なると思います)にあるC:\Windows\TempをD:\Windows\Tempとします。同じようにC:ドライブが指定されている箇所も書き換えておきます。

図14 php.iniの変更点

図14 php.iniの変更点

もう1つは,MySQLの設定です。さきほど,phpMyAdminからログインするサーバとして,localhost:20000を指定しましたが,Azure上にデプロイされたWebRoleやWorkerRoleには,それぞれ異なるプライベートIPアドレス(エンドポイント)が割り振られます。そのため,phpMyAdminのログイン画面から,localhost:20000を指定してもログインできないのです。

WebRoleで動作するphpMyAdminからWorkerRoleで動作するMySQLにアクセスするためには,localhostではなく,10.x.x.xのように,エンドポイントを個別に指定する必要があります。また,localhost以外のホストからログインできるユーザーを作成しておく必要があります。具体的には,以下のようにします。

まず,コンピュートエミュレータを終了させ,ローカル環境でMySQLサーバを立ち上げます。mysqlコマンドを使ってログインし,ユーザーとデータベースと作成します。ここではそれぞれsampledbuer,sampledbとします。このあたりは,Linux環境でのMySQLの操作と変わりません。具体的には,コマンドプロンプトを立ち上げて,以下のようにします。

cd C:\Program Files\MySQL\MySQL Server 5.5\bin
start mysqld.exe
mysql -u root -p
Enter password: 設定したパスワード

MySQLサーバにログインしたら,以下のようにします。

mysql> create database sampledb;    ←データベースの作成
mysql> grant all on *.* to sampledbuser identified by '********';    ←ユーザーの作成
mysql> flush privileges;    ←権限の反映

ユーザーを作成するときに,sampledbuser@localhostなどとすると,Azure上でログインできなくなるので注意が必要です。

データベースとユーザーの作成が終わったら,MySQLからログアウトし,タスクマネージャを使ってmysqld.exeを終了させます。

そのうえで,さきほどrootパスワードを設定したファイルをコピーしたのと同じように,C:\ProgramData\MySQL\MySQL Server 5.5\dataにあるファイルをSample_WorkerRole\mysql\dataにコピーします。実際には,前回から更新のあった,\data内のsampledbフォルダと\data\mysql内のuser.MYDとuser.MYIをコピーすれば大丈夫です。

また,ログインのために必要なWorkerRoleのエンドポイントとポートは,⁠MySQLIP」「MySQLPort」という変数に設定されますので,PHPプログラムからそれぞれ,$_SERVER["MySQLIP"],$_SERVER["MySQLPort"]として取得できます。

ここでは,WebRoleのindex.phpに下記を追加し,ログイン時に値がわかるようにしておきます。

<p>WorkerRoleIP: <?php echo $_SERVER["MySQLIP"]; ?></p>
<p>WorkerRolePort: <?php echo $_SERVER["MySQLPort"]; ?></p>

図15 index.phpを編集

図15 index.phpを編集

なお,index.phpに,phpinfo()を記述しておけば,これらの値もPHP Variableなどとして記載されていますので,それを参照してもいいでしょう。

以上で,デプロイのためのパッケージ作成の準備が整いました。

著者プロフィール

齋藤公二(さいとうこうじ)

インサイト合同会社

『月刊Computerwold』『CIO Magazine』(IDGジャパン)の記者,編集者などを経て,2011年11月インサイト合同会社設立。エンタープライズITを中心とした記事の執筆,編集のほか,OSSを利用した企業Webサイト,サービスサイトの制作を担当する。