Drupal 7 でのデータベース操作 - レッスン 2 - データベース設定
Drupal でデータベース接続を定義する主な仕組みは、settings.php の $databases 配列です。名前が示すとおり、$databases を使うと複数のデータベース接続を定義できます。また、複数のターゲットの定義もサポートします。接続は、あるコードが初めてデータベースクエリを実行するまで開かれません(つまり接続オブジェクトは作成されません)。
接続キー
接続キーは、データベース接続に割り当てられる一意の識別子です。サイト全体で一意でなければならず、主データベースには default を設定すべきです。ほとんどのサイトでは、接続は 1 つだけになります。
接続ターゲット
各接続は 1 つ以上のターゲットを定義できます。ターゲットは、利用可能な場合に代替データベースを使うための任意の仕組みを提供します。要求したターゲットが定義されていない場合、Drupal は静かに default ターゲットにフォールバックします。default は常に定義されていなければなりません。
ターゲットは、最も一般的にはマスター/スレーブレプリケーションに使われます。デフォルトでは、ターゲットはメインの SQL サーバーです。1 つ以上の slave ターゲットも定義できます。slave 用にフラグが立てられたクエリは、可能であれば追加の SQL サーバーを使おうとします。そうでない場合、Drupal は default(マスター)サーバーの使用にフォールバックします。
$databases の構文
$databases 配列は 3 レベルのネストした配列です。第 1 レベルは接続キーを定義します。第 2 レベルは接続ターゲットを定義します。各ターゲットの値は接続情報(ドライバー、認証情報など)です。例を示します:
'mysql',
'database' => 'drupaldb',
'username' => 'username',
'password' => 'secret',
'host' => 'localhost',
);
?>
この設定は、キー default とターゲット default を使って単一の接続を定義します。MySQL ドライバーを使い、指定された認証情報で localhost 上のデータベース drupaldb に接続します。これはほとんどの Drupal サイトの典型的な設定です。
マスター/スレーブ設定
'mysql',
'database' => 'drupaldb1',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver1',
);
$databases['default']['slave'][] = array(
'driver' => 'mysql',
'database' => 'drupaldb2',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver2',
);
$databases['default']['slave'][] = array(
'driver' => 'mysql',
'database' => 'drupaldb3',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver3',
);
?>
この設定は、1 つのマスター(default)サーバーと 2 つのスレーブサーバーを定義します。slave ターゲットが接続の配列であることに注意してください。各ページリクエストごとに、使用するスレーブが 1 つランダムに選ばれます。つまり、そのページのすべてのクエリが dbserver2 または dbserver3 に送られることがあります。
複数の接続
'mysql',
'database' => 'drupaldb1',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver1',
);
$databases['extra']['default'] = array(
'driver' => 'sqlite',
'database' => 'files/extradb.sqlite',
);
?>
この例は、主 MySQL データベースと、extra キーを使った追加の SQLite データベースを定義します。接続情報の構造はドライバーによって異なる場合があることに注意してください。たとえば SQLite は、データベースファイルへのパスのみを必要とします。定義された接続の数に関係なく、Drupal は実際に使われるまで接続を開きません。
Drupal 7 は PDO を必要とする
Drupal 7 は PHP の PDO(PHP Data Objects)ライブラリを必要とします。PDO をサポートするホスティングを使うか、Drupal を実行するためにサーバーに PDO 拡張機能をインストールしてください。