描述
HyperDB 是一个非常先进的数据库类,它取代了 WordPress 内置的一些数据库功能。其主要区别在于
* HyperDB 可以连接任意数量的数据库服务器、
* HyperDB 会检查每个查询,以确定合适的数据库。
它支持
- 读写服务器(复制)
- 可配置的读写优先级
- 本地和远程数据中心
- 专用和公用网络
- 不同数据库/主机上的不同表格
- 智能写后主读取
- 故障主机的故障切换
- 用于特征分析的高级统计
- WordPress多站点
它基于 WordPress.com 目前在生产过程中使用的代码,WordPress.com 有许多 MySQL 服务器,跨越多个数据中心。
安装
插件目录中没有任何内容。
-
在
db-config.php
中输入配置。 -
在包含
wp-config.php
的目录中部署db-config.php
。这可能是 WordPress 根目录或更高一级的目录。在这种情况下,在wp-config.php
中定义DB_CONFIG_FILE
。 -
将
db.php
部署到/wp-content/
目录中。只需放置该文件即可激活它。要停用该文件,请将其从该位置移出或移动配置文件。
HyperDB 将忽略 WP_USE_MULTIPLE_DB
的任何值。
常见问题
-
我能用 HyperDB 做哪些 WPDB 做不了的事情?
-
WordPress.com 是最复杂的 HyperDB 安装程序,管理着跨越数千个数据库的数百万个表。动态配置逻辑允许 HyperDB 通过查询中央数据库来计算表的位置。自定义脚本通过迁移表并更新其在中央数据库中的位置,不断平衡数据库服务器资源。
发挥想象力。你可以使用持久缓存创建动态配置,收集有关网络状态的情报。唯一不变的是配置文件的名称。剩下的,就像人们常说的那样,就是 PHP 了。
-
HyperDB 如何支持复制?
-
HyperDB 不提供复制服务。这需要通过配置 MySQL 服务器来实现复制。然后,可以配置 HyperDB 以适当使用这些服务器,例如,通过连接主服务器来执行写查询。
-
HyperDB 如何支持负载平衡?
-
HyperDB 会从配置的优先级组中随机选择数据库连接。最有利的连接会被首先尝试。因此,你可以根据网络拓扑结构、硬件能力或你发明的任何其他方案来优化配置。
-
HyperDB 如何支持故障转移?
-
故障转移描述了 HyperDB 如何处理连接失败。当 HyperDB 无法连接到一个数据库时,它会尝试连接到拥有相同数据的另一个数据库。如果没有设置复制,HyperDB 会尝试重新连接几次,然后再放弃。
-
HyperDB 如何支持分区?
-
HyperDB 允许将表格放置在任意数据库中。它可以使用你编写的回调来为给定的查询计算合适的数据库。因此,你可以根据自己的方案对网站数据进行分区,并相应配置 HyperDB。
-
只使用一个数据库服务器的 HyperDB 有什么优势吗?
-
没有测量过。HyperDB 在放弃连接前至少会再试一次,因此在网络服务器暂时无法连接到数据库服务器的情况下可能会有所帮助。
HyperDB 与 WPDB 的一个不同之处是,在进行查询之前,HyperDB 不会尝试连接数据库。因此,尽管数据库无法访问,但具有足够强大的持久缓存功能的网站仍可保持只读访问。
-
如果数据集的所有数据库服务器都宕机了怎么办?
-
由于 HyperDB 仅在进行查询时才会尝试连接,因此 WordPress 不会因为数据库错误而关闭网站,而是让代码决定下一步如何处理不成功的查询。如果你想做一些不同的事情,比如设置一个自定义错误页面或杀死网站,你需要在你的 db-config.php 中定义 “db_connection_error “回调。
评价
贡献者及开发者
「HyperDB」是开源软件。 以下人员对此插件做出了贡献。
贡献者更新日志
1.9
- 恢复重试与主站连接失败的行为;
- 解除将服务器标记为停机的逻辑 – 在 r2625068 中,将服务器标记为停机的密钥被错误地改为 “server_readonly_$host$port”,而不是 “server_state_$host$port”。
- 如果所有主设备都被标记为只读,则忽略只读标记并仍尝试连接;否则,如果我们临时设置了只读,可能会错误地中断主设备连接 2 分钟(APCu 缓存时间);
- 修正了一个 Bug,在该 Bug 中,服务器状态键中的 $dbhname 可能会延迟将服务器标记为停机或只读,方法是对所有可能的数据集和操作进行一次标记,而不是对主机+端口进行一次标记;
- 修正了一个 Bug,在该 Bug 中,即使因不同原因返回 ER_OPTION_PREVENTS_STATEMENT 错误,我们仍可将服务器标记为只读;现在我们要进行匹配,以确保返回的错误中确实包含 “只读”;
- 修正一个错误,如果同一数据集有重复的服务器,则正确跟踪唯一只读服务器或滞后从属服务器可能会失败;
- 修正了一个 Bug,在此 Bug 中,如果在打开连接后在服务器端将主文件设置为只读,则不会在 HyperDB 中将主文件标记为只读;
- 修复了一个错误,在该错误中,我们可能不再遵守每个数据集重试的最低配置次数;
- 还原 HyperDB 1.8 中添加的持久性未使用服务器逻辑,因为:当可用服务器耗尽时,它会导致连接失败;我们可能会使用优先级错误的服务器;看不到新添加到 HyperDB 的服务器。会触发这些行为的情况包括:超时时服务器端断开连接;在长时间运行的脚本中手动断开打开的连接;在同一远程 MySQL 服务器上的不同数据集之间切换;超过了配置的最大连接数,开始断开现有连接以容纳新连接;
- 通过添加本地缓存,确保只读和停机逻辑在没有 APCu 或 APCu 已严重碎片化的环境中仍能工作
- 更正 dbh 属性类型
- PHP 8.0对call_user_func_array()和db_connections属性的兼容性
1.8
- 支持后备主连接
- 添加对服务器只读标记的支持
- 修复
doo_action()
不可用时的问题 - 使用 APCu 来缓存服务器响应速度的结果
- 添加对
utf8mb4
服务器功能的支持
1.7
- 添加对信息模式和事务的支持
- 需要在 WordPress 4.2 中使用 wpdb::get_table_from_query()。
1.6
- 添加对 MYSQL_CLIENT_FLAGS 的支持,该支持已在 [21609] 中添加到 wpdb 中。
- 修复 PHP 7.3 通知
1.5
- 修复 WordPress 4.8.3 SQLi 漏洞
- 为 SQL 日志添加操作
- 对于 SELECT FOUND_ROWS(),从不使用 db_connect。
- 在断开数据库连接时进行更好的清理
1.4
- 为 HyperDB 故障提供额外日志记录,不保存 “空 “查询。
1.3
- 改进查询失败跟踪
1.2
- PHP7 兼容性
- 支持 MySQLi
- 允许 utf8mb4 字符集
1.1
- 扩展回调功能
- 已添加连接错误回调
- 添加了复制滞后检测支持
1.0
- 删除了对 WPMU 和 BackPress 的支持。
- 具有继承性的新类:hyperdb extends wpdb。
- 新的实例化方案:$wpdb = new hyperdb(); 然后包含配置。不再使用 $db_* 全局。
- 新的配置文件名称 (db-config.php) 和定位逻辑。(ABSPATH、dirname(ABSPATH) 或预定义)。
- 如果数据库配置未找到,已添加回退到 wpdb 的功能。
- 在配置中将服务器重命名为数据库,以减少歧义。
- 为 hyperdb 添加了配置接口函数:add_database、add_table 和 add_callback。
- 重构了 db_server 数组,以简化查找服务器的过程。
- 删除了对数据中心和分区的本地支持。读/写参数和数据集名称可实现相同的效果。
- 删除了 $db_tables 中的 preg 模式支持。改用回调。
- 删除了连接重试之间的延迟,避免在有其他服务器时立即重试同一服务器。
- 添加了连接统计信息。
- 已添加 save_query_callback,用于自定义调试日志。
- 改进了 SRTM 粒度。现在只在涉及已写入表时向主控器发送读取数据。
- 改进了连接重用逻辑,并添加了 mysql_ping,以便从 “服务器已消失 “中恢复。
- 已添加 min_tries,用于配置放弃前的最少连接尝试次数。
- 已添加 WPDB_PATH 常量。如果不想使用 ABSPATH,请定义此常量。WPINC .’/wp-db.php’。