IIS での PHP アプリケーション用の MySQL のインストールおよび構成

公開日: 2008 年 2 月 14 日 (作業者: ruslany (英語))

更新日: 2009 年 10 月 7 日 (作業者: ruslany (英語))

概要

一般的な PHP アプリケーションの大半は、バックエンド データ ストレージとして MySQL を使用しています。このため、ホスト プロバイダーはホスト パッケージに MySQL データベース サポートを組み込む必要があります。このセクションでは、Windows Server® 2008 上で MySQL を共有ホスト環境で使用できるようにセットアップおよび構成する方法の基本的な一連の手順について説明します。MySQL の詳細情報については、MySQL マニュアル (英語) を参照してください。

この記事には、次の内容が含まれています。

  • Windows Server 2008 への MySQL のインストール
  • MySQL インスタンスの構成
  • Windows Server 2008 での MySQL のセキュリティ保護
  • ユーザーおよびデータベースのプロビジョニング

Windows Server 2008 への MySQL のインストール

MySQL サーバーは、IIS 7 と同じサーバーにインストールするのではなく、専用のサーバー コンピューターにインストールすることをお勧めします。データベース サーバーと Web サーバーを分離することによって、インストール全体のセキュリティが高まり、管理が容易になります。また、データベース サーバーと Web サーバーのプロセス間でリソースの競合が発生することを回避できます。

MySQL のバイナリおよびインストール パッケージは、公式の MySQL Web サイト (英語)からダウンロードできます。このガイドでは、MySQL Community Server Version 5.0.45 を使用しています。MySQL をインストールするには、インストーラー パッケージを使用するか、バイナリを手動でサーバー ファイル システムにコピーします。Windows に MySQL をインストールする方法に関する一連の手順の詳細については、「MySQL インストール ウイザードを使用する (英語)」または「非インストール Zip アーカイブからの MySQL インストール (英語)」を参照してください。

MySQL インスタンスの構成

MySQL インストーラーが完了すると、MySQL Server Configuration Wizard (MySQL サーバー構成ウィザード) を起動するオプションが表示されます。

メモ: データベース サーバーへのネットワーク アクセスを有効にする場合、構成ウィザードを実行する前に、Windows ファイアウォールの TCP ポートを開く必要があります。

MySQL では、TCP ポート 3306 を既定で使用します。このポート番号は、構成ウィザードを使用して変更するか、my.ini ファイルで手動で変更することができます。

既定の MySQL TCP ポートのファイアウォール規則を作成するには、Windows コマンド ライン プロンプトから次のコマンドを実行します。

C:\>netsh advfirewall firewall add rule name="MySQL Server" action=allow protocol=TCP dir=in localport=3306

ファイアウォール ポートが開いたら、MySQL サーバー構成ウィザードを実行して、使用する環境に最も適合する構成オプションを選択します。

以下では、共有ホスト環境用に MySQL を構成する際に設定できる構成オプションの一部を説明します。構成ウィザードのすべての設定の詳細については、「MySQL サーバー構成ウィザード (英語)」を参照してください。

サーバーの種類

サーバーの種類として、使用するサーバーのセットアップの種類に応じて、[Server Machine (サーバー マシン)] または [Dedicated MySQL Server Machine (専用 MySQL サーバー マシン)] を選択します。通常は、データベース サーバーのセットアップは別のコンピューターで行い、ここでは [Dedicated MySQL Server Machine] オプションを選択することをお勧めします。

データベースの用途

データベースの用途として、サーバーで使用するデータベース ストレージ エンジンの種類を指定します。

  • MyISAM – SELECT 処理のパフォーマンス向上のため最適化されている。メモリ使用量とディスク使用率の点でオーバーヘッドが少ない。トランザクションはサポートしていない。
  • InnoDB – ACID トランザクションに完全対応。ディスク領域とメモリーの使用量が大きい。

上記のデータベース エンジンの詳細な比較については、MySQL ストレージ エンジン アーキテクチャ (英語) を参照してください。一般的な推奨事項として、サーバー上の Web アプリケーションで複数のステートメントを含むトランザクション、高度な分離レベルおよび行レベルのロック、外部キー制約が必要な場合、または ACID を満たすことが必須の場合は、InnoDB を使用してください。それ以外の場合は、MyISAM を使用します。

InnoDB データ ファイルの場所

InnoDB ストレージ エンジンの場合、データベース データ ファイルの場所を変更することができます。通常、これが推奨されるのは、RAID ストレージ システムといった、大容量/高性能ストレージ デバイスをシステムで使用できる場合です。

MyISAM ストレージ エンジンでは、このオプションは使用できません。

同時接続数

必要な同時接続数を設定するオプションを選択します。

メモ: 接続動作はメモリを消費します。そのため、選択した同時接続数が多すぎる場合、サーバーでは過剰な接続数を処理できない場合があります。

my.ini ファイルの変更

My.ini ファイルは、%ProgramFiles%\MySQL\MySQL Server 5.0\ にあります。このファイルには、MySQL サービスの起動変数が含まれています。このファイルの設定を変更して、サーバーのパフォーマンスを微調整します。同じフォルダーには、他の複数の .ini ファイルがあり、次の 2 つのファイルが含まれています。

  • my-large.ini – 512 MB の RAM が搭載された専用サーバー上で MySQL サービスを実行するための推奨構成設定が含まれています。
  • my-huge.ini – 1 ~ 2 GB の RAM が搭載された専用サーバー上で MySQL サービスを実行するための推奨構成設定が含まれています。

サーバーの構成に応じて、上記のファイルの推奨設定をいくつか使用します。

MySQL と連携するように PHP を構成する

PHP と MySQL を連携させるには、php.ini ファイルに次の変更を加える必要があります。

  • extension_dir に、PHP で読み込み可能な拡張子がすべて格納されているフォルダー (多くの場合、ext フォルダー) を指定します (例: extension_dir='.\ext')。
  • 対応する行のコメントを解除して、MySQL の動的な拡張を有効にします (例: extension=mysql.dll)。

Windows Server 2008 での MySQL サーバーのセキュリティ保護

次のガイドラインでは、Windows Server 2008 上で MySQL サーバーのセキュリティを強化する方法について説明します。

MySQL サービス アカウントを変更する

既定では、MySQL サービスは、高度な権限が付与されたローカル システム アカウントとして実行されるようにインストールされます。ただし、制限がより強化されたサービス アカウントで、このサービスを実行することをお勧めします。専用のアカウントを作成するか、Windows に組み込まれている "Local Service" アカウントを使用します。MySQL サービス アカウントを変更するには、次の手順に従います (Windows Server 管理者としてログインする必要があります)。

1. 次のコマンドを入力して、MySQL サービスを停止します。

C:\>net stop mysql

2. 新しいサービス アカウントのアクセス許可を MySQL インストール フォルダーに付与します。

C:\>icacls "c:\Program Files\MySQL\MySQL Server 5.0" /grant "NT AUTHORITY\LOCAL SERVICE":(OI)(CI)(M)

3. [スタート]、[管理ツール]、[サービス] の順に移動し、MySQL サービスのプロパティを開いて、厳しく制限されたサービス アカウントを使用するように MySQL サービスを構成します。[ログオン] タブを開き、[アカウント] テキスト ボックスに「Local Service」と入力します。[パスワード] フィールドおよび [パスワードの確認入力] フィールドは空白のままにします。

4. 次のコマンドを入力して、MySQL サービスを開始します。

C:\>net start mysql

匿名データベース アカウント (存在する場合) を削除する

1.  次のコマンドを入力して、MySQL コマンド プロンプトを開きます。

mysql  –u root  –p

2.  MySQL サーバーにログオンしたら、次のコマンドを実行します。

mysql> use mysql;
Database changed
mysql> DELETE FROM user WHERE user = '';
Query OK, 2 rows affected (0.03 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.05 sec)

root アカウントをローカルホストからのみログインするように制限する

1.  次のコマンドを入力して、MySQL コマンド プロンプトを開きます。

mysql  –u root  –p

2.  MySQL サーバーにログオンしたら、次の順序でコマンドを使用します。

mysql> use mysql;
Database changed
mysql> DELETE FROM user WHERE user = 'root' AND host = '%';
Query OK, 2 rows affected (0.03 sec) 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.05 sec)

root ユーザーの名前を変更する

1.  次のコマンドを入力して、MySQL コマンド プロンプトを開きます。

mysql  –u root  –p

2.  MySQL にログオンしたら、次の順序でコマンドを使用します。

mysql> USE mysql;
Database changed
mysql> UPDATE user SET user='johndoe' WHERE user='root';
Query OK, 1 row affected (0.19 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.23 sec)

ユーザーおよびデータベースのプロビジョニング

MySQL サーバー上で新しいユーザーおよびデータベースをプロビジョニングする方法を次の例に示します。

ユーザー プロビジョニング

新しいユーザーを MySQL サーバー データベースにプロビジョニングするには、次の手順に従います。

1.  次のコマンドを入力して、MySQL コマンド プロンプトを開きます。

Mysql  –u root  –p

2.  MySQL サーバーにログオンしたら、次のコマンドを実行します。

mysql>CREATE USER 'some_username'  IDENTIFIED BY 'some_password';
Query OK, 0 rows affected (0.00 sec)

メモ: 既定では、新しく作成されたユーザーには MySQL の権限はありません。

データベース プロビジョニング

新しいデータベースを作成し、このデータベースへのアクセス許可をユーザーに付与するには、次の手順に従います。

1.  次のコマンドを入力して、MySQL コマンド プロンプトを開きます。

Mysql  –u root  –p

2.  MySQL サーバーにログオンしたら、次のコマンドを実行します。

mysql>CREATE DATABASE IF NOT EXISTS some_database_name;
Query OK, 1 row affected (0.00 sec)

このデータベースへのアクセス許可を特定のユーザーに付与するには、次のコマンドを実行します。

mysql>   GRANT ALTER,
      -> ALTER ROUTINE,
      -> CREATE,
      -> CREATE ROUTINE,
      -> CREATE TEMPORARY TABLES,
      -> CREATE VIEW,
      -> DELETE,
      -> DROP,
      -> EXECUTE,
      -> INDEX,
      -> INSERT,
      -> LOCK TABLES,
      -> SELECT,
      -> UPDATE,
      -> SHOW VIEW
      ON some_database_name.* TO 'some_username';

関連コンテンツ

記事