数据库配置
定义数据库连接的主要方式是在 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), );