データベース設定
データベース接続を定義するための主要な手段は、settings.phpの$databases配列です。名前が示すように、$databasesでは複数のデータベース接続を定義できます。また、複数のターゲットの定義もサポートしています。データベースへの接続は、最初のコードがそのデータベースに対してクエリを実行しようとするまで開かれません(接続オブジェクトは作成されません)。
接続キー
$databases['default'] // The database connection.
接続キーは、特定のデータベース接続の一意の識別子です。接続キーはサイト内で一意である必要があり、Drupalのメインデータベースとなるデフォルト接続が常に存在する必要があります。ほとんどのサイトでは、これが定義された唯一の接続になります。
ターゲット
$databases['default']['default'] // The database target.
各接続キーには1つ以上のターゲットが必要です。ターゲットは、利用可能な場合に使用できるデータベースです。「default」ターゲットは、各接続キーに対して常に定義する必要があります。要求されたターゲットが定義されていない場合、システムは自動的に「default」にフォールバックします。
ターゲットの主な用途は、プライマリ/レプリカレプリケーション用です。デフォルトターゲットはプライマリSQLサーバーです。次に、1つ以上の「replica」ターゲットを定義できます(状況によっては、「replica」が唯一の有効な代替ターゲットであることに注意してください。たとえば、静的クエリなど)。レプリカサーバーが利用可能な場合にそれを使用しようとマークされたクエリは、「replica」ターゲットへのアクセスを試みます。利用可能な場合、この接続が開かれ(まだ確立されていない場合)、クエリはレプリカサーバーで実行されます。利用できない場合、クエリは代わりに「primary」(メイン)サーバーで実行されます。これにより透過的なフォールバックが提供されるため、レプリカサーバーが利用可能な場合はその利点を活用するようにコードを記述でき、サーバーがなくても変更なしで動作します。
$databases構文
$databases配列は、少なくとも3レベルのネストされた配列です。最初のレベルはデータベースキーを定義します。2番目はデータベースターゲットを定義します。各ターゲットの値は、そのキー/ターゲットの接続情報です。いくつかの例でこれを明確にしましょう。
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'drupaldb',
'username' => 'username',
'password' => 'secret',
'host' => 'localhost',
);
上記の$databases配列は、1つのターゲット(「default」)を持つ1つの接続キー(「default」)を定義します。この接続は、ローカルホスト上にある「drupaldb」という名前のMySQLデータベース(「driver」キー)を、ユーザー名「username」とパスワード「secret」で使用します。上記の例は、単一のSQLサーバーを使用した典型的なDrupalインストールであり、大多数のサイトで十分です。
プライマリ/レプリカ構成では、次のように定義できます:
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'drupaldb1',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver1',
);
$databases['default']['replica'][] = array(
'driver' => 'mysql',
'database' => 'drupaldb2',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver2',
);
$databases['default']['replica'][] = array(
'driver' => 'mysql',
'database' => 'drupaldb3',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver3',
);
この定義は、1つの「default」サーバーと2つの「replica」サーバーを提供します。「replica」キーが配列であることに注意してください。ターゲットが接続情報の配列として定義されている場合、ページリクエストごとに、そのターゲットに対して定義されたサーバーの1つがランダムに選択されます。つまり、あるページのリクエストでは、すべてのレプリカクエリがdbserver2に送信され、次のリクエストでは、すべてdbserver3に送信される可能性があります。
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'drupaldb1',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver1',
);
$databases['extra']['default'] = array(
'driver' => 'sqlite',
'database' => 'files/extradb.sqlite',
);
この構成は、1つのメインのDrupalデータベースと、SQLiteを使用する「extra」というラベルの付いた1つの追加データベースを定義します。SQLiteの接続情報はMySQLのものとは構造が異なることに注意してください。各ドライバーは、ドライバーに適したさまざまな構成を持つことができます。
いくつ接続を定義しても、Drupalはそのデータベースへの接続が実際に使用されるまで開かないことを覚えておいてください。
必須のPDO
PHPのPDOライブラリがDrupalのデータベース層に必須になったため、Drupalを実行するにはそれを含むホスティングプランが必要になります。
PDOオプション
PDOオプションとドライバー固有のPDOオプションは、データベース配列の「pdo」キーを使用して指定できます。例:
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'drupaldb',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver1',
'pdo' => array(PDO::ATTR_TIMEOUT => 2.0, PDO::MYSQL_ATTR_COMPRESS => 1),
);