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