logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动
03/10/2025, by Ivan

定义数据库连接的主要方式是在 settings.php 中的 $database 数组。顾名思义,$database 允许定义多个数据库连接。它还支持定义多个目标。在第一段代码尝试对该数据库执行查询之前,数据库连接不会被打开(不会创建连接对象)。

连接键

$databases['default'] // 数据库连接。

连接键是给定数据库连接的唯一标识符。连接键必须在该站点中唯一,并且必须始终有一个默认连接作为 Drupal 的主数据库。在大多数站点中,这将是唯一定义的连接。

目标

$databases['default']['default'] // 数据库目标。

给定的连接键必须有一个或多个目标。目标是如果可用时可以使用的数据库。每个连接键的目标中都必须定义一个 "default"。如果请求的目标未定义,系统会自动回退到 "default"。

目标的主要用途是用于主 / 从(replication)。默认目标是主 SQL 服务器。然后可以定义一个或多个 "replica" 目标(请注意,在某些情况下,“replica”是唯一允许的备用目标,例如在 静态查询中)。标记为尝试使用从库服务器(如果存在)的查询,将尝试访问 "replica" 目标。如果可用,该连接将被打开(如果尚未建立),并且查询将在从库服务器上运行。如果不可用,则查询将在“主”服务器上运行。这提供了一种透明的备用机制,因此代码可以编写为在有从库时利用其优势,同时在没有从库时仍能正常运行而无需修改。

$databases 语法

$database 数组是一个至少三层嵌套的数组。第一层定义数据库键。第二层定义数据库目标。每个目标的值是该键 / 目标的连接信息。以下示例可以说明这一点。

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'localhost',
);

上述 $database 数组定义了一个连接键(“default”)和一个目标(“default”)。此连接使用本地主机上的 MySQL 数据库("driver" 键)"drupaldb",用户名为 "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',
);

这个定义提供了一个 "default" 服务器和两个 "replica" 服务器。注意 "replica" 键是一个数组。如果某个目标被定义为连接信息数组,那么在每次页面请求时,系统会从中随机选择一个服务器。也就是说,在一次页面请求中,所有的副本查询可能发送到 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',
);

此配置定义了一个 Drupal 主数据库和一个额外的 SQLite 数据库,标记为 "extra"。请注意,SQLite 的连接信息结构与 MySQL 不同。每个驱动程序可以有不同的配置方式。

请记住,无论定义了多少个连接,Drupal 在实际使用之前都不会打开与该数据库的连接。

必需的 PDO

由于 Drupal 数据库层现在需要 PHP 的 PDO 库,因此您需要包含该库的主机计划来运行 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),
);