web-dev-qa-db-ja.com

Drupalテーブルに個別のデータベースを使用する方法は?

これまでに読んだのは、マルチサイトを構成してさまざまなテーブルを使用し、そのマルチサイト構成内の他のサイトと任意のテーブルを共有できることです。

私の質問は、この設定を取得できるかどうかです:

  • データベースAにはサイトAのユーザーとサイトAのコンテンツがあります
  • データベースBにはサイトBのコンテンツのみが含まれます
  • サイトBはデータベースAのユーザーテーブルを使用します。
  • サイトBのコンテンツはデータベースBにあります。

結局、それはマルチサイトの質問ではないかもしれませんが、要するに...

Drupalサイトがそのテーブルのいくつかに2つの異なるデータベースを使用することは可能ですか?どうやって?

2
radj

サイトで使用するsettings.phpファイルでは、データベーステーブルごとに異なるプレフィックスを指定できます。

  $databases['default']['default'] = array(
    'driver' => 'mysql',
    'database' => 'databasename',
    'username' => 'username',
    'password' => 'password',
    'Host' => 'localhost',
    'prefix' => array(
      'default'   => 'main_',
      'users'     => 'shared_',
      'sessions'  => 'shared_',
      'role'      => 'shared_',
      'authmap'   => 'shared_',
    ),
    'collation' => 'utf8_general_ci',
  );

次のようなコードを使用して、さまざまなデータベースまたはスキーマを参照することもできます。

  $databases['default']['default'] = array(
    'driver' => 'mysql',
    'database' => 'databasename',
    'username' => 'username',
    'password' => 'password',
    'Host' => 'localhost',
    'prefix' => array(
      'default'   => 'main.',
      'users'     => 'shared.',
      'sessions'  => 'shared.',
      'role'      => 'shared.',
      'authmap'   => 'shared.',
    ),
    'collation' => 'utf8_general_ci',
  );

最後のスニペットと前のスニペットの違いは、接頭辞に使用される最後の文字がアンダースコアではなくドットであることです。これにより、データベースエンジンは、現在設定されているデータベース/スキーマではなく、別のデータベース/スキーマを選択します。
より明確にするために、データベースエンジンがローカルホストで実行されているMySQLであることを示したコードでは、変更点は、usersテーブルの場合、Drupalがdatabasenameデータベースの代わりにsharedデータベースを使用することです。

私の知る限り、これはDrupal 7以上で有効です。 Drupalに付属する default.settings.php ファイルにあるコメントでは、同じtrickは報告されません。6。

参照

default.settings.php ファイルに表示されるコメント。

7
kiamlaluno