如何连接到Drupal中的多个数据库

时间:2011-02-06 12:21:43

标签: drupal drupal-6

我希望在网站上通过高流量在大约5个drupal多站点上部署openpublish,并且想要使用多个数据库服务器,但是应该共享一些表。 如何通过在“用户”,“会话”和“角色”表上进行共享来连接到Drupal中的多个数据库。

3 个答案:

答案 0 :(得分:3)

要允许多个数据库连接,请将$db_url转换为数组。

<?php
$db_url['default'] = 'mysql://drupal:drupal@localhost/drupal';
$db_url['mydb'] = 'mysql://user:pwd@localhost/anotherdb';
$db_url['db3'] = 'mysql://user:pwd@localhost/yetanotherdb';
?>

要查询其他数据库,只需通过引用密钥名称将其设置为活动数据库。

<?php
db_set_active('mydb');

db_query('SELECT * FROM table_in_anotherdb');

//Switch back to the default connection when finished.
db_set_active('default');
?>

但请确保所有数据库都是同类型的。

答案 1 :(得分:1)

documentation on sharing tables表示您必须使用单个数据库来共享表,但我已在同一服务器上使用多个数据库。我通过将数据库名称放在前缀之前然后添加一个点来完成此操作。因此,如果您的默认数据库名为'drupal',而您的第二个数据库名为'second_drupal',则前缀在settings.php中将如下所示:

$db_prefix = array(
  "default" => "slave1_", // the prefix for tables that are not shared.
  "users" => "second_drupal.master_",
...

(请注意,您将默认数据库称为什么并不重要,因为它是默认数据库,您不需要在$db_prefix变量中按名称引用它,只要它设置正确即可在settings.php文件中。)

http://thedrupalblog.com/setting-multi-site-drupal-6-installation-shared-databases-and-single-sign有一些说明,但我认为它仍然假设一个数据库服务器。

答案 2 :(得分:0)

总和我想从drupal中的其他数据库中检索数据然后,我在template.php文件中的选定主题文件夹中创建了一个函数

    connect_to_database($un, $pass, $db, $insert)

它需要数据库用户名,密码,数据库名称的四个参数,最后一个是查询

function connect_to_database($username,$password,$database,$query){
  $database_info = array(
      'host' => 'hosname',
      'database' => $database,
      'username' => $username,
      'password' => $password,
      'driver' => 'mysql'
  ); 
  Database::addConnectionInfo('coreapp', 'default', $database_info);
  db_set_active('newcon'); 
  $q = db_query($query);
  db_set_active('default');
  return $q; 
 }