通过 HyperDB 插件实现 WordPress 数据库读写分离

  • A+
所属分类:WordPress技巧

WordPress 默认不可以设置数据库读写分离,本文将通过 HyperDB 插件实现 WordPress 数据库读写分离负载均衡的功能。

前言

HyperDB 是一个非常高级的数据库插件,它代替了一些 WordPress 内置数据库功能。主要区别是:

  • HyperDB 可以连接到任意数量的数据库服务器。
  • HyperDB 检查每个查询以确定合适的数据库。

它支持:

  • 设定读写服务器
  • 可配置的读写优先级
  • 本地和远程数据库
  • 私人和公共网络
  • 分离不同数据库主机上的不同表
  • 智能写后延迟读取
  • 数据库节点的故障转移
  • 用于配置的高级统计信息
  • WordPress 多站点支持

它基于 WordPress.com 上当前在生产中使用的代码,其中许多 MySQL 服务器跨越多个数据中心。

步骤

访问 https://wordpress.org/plugins/hyperdb/ 下载插件压缩包到本地解压,解压后得到 /hyperdb 文件夹,该文件夹内共有如下 3 个文件:

db-config.php (该文件是插件的配置文件)
db.php (该文件是插件的功能核心文件)
readme.txt (该文件是插件的介绍文档)

通过 HyperDB 插件实现 WordPress 数据库读写分离 - 御宅说
HyperDB 插件目录中的文件结构

1、认真阅读 readme.txt 文件中的相关介绍,可以让你对 HyperDB 插件有一个比较直观的了解,看不懂英文可以复制文件内容到百度翻译 https://fanyi.baidu.com/

2、仔细查看 db-config.php 文件的配置实例,以及各种实例的注释解说。下面给出本站的配置信息提供你参考。

  1. $wpdb->add_database(array(
  2. 'host' => DB_HOST, // 你的主要数据库地址:3306
  3. 'user' => DB_USER,
  4. 'password' => DB_PASSWORD,
  5. 'name' => DB_NAME,
  6. 'write' => 1, // 给主要数据可写入
  7. 'read' => !defined('DB_HOST_RPL1') ? 1 : 0, // 当次要数据库不可用时主要数据库才可读取,如果次要数据库可用则从次要数据库读取。
  8. ));
  9. if(defined('DB_HOST_RPL1')):
  10. $wpdb->add_database(array(
  11. 'host' => DB_HOST_RPL1, // 你的次要数据库地址:3306
  12. 'user' => DB_USER,
  13. 'password' => DB_PASSWORD,
  14. 'name' => DB_NAME,
  15. 'write' => 0, // 次要数据库不可写入
  16. 'read' => 1, // 次要数据库可读取
  17. ));
  18. endif;

你可以直接复制我的配置信息并加以修改后粘贴到你的 db-config.php 文件中保存,然后把这个文件放置在 wp-config.php 同级目录中(一般为 WordPress 网站根目录)。

3、复制 db.php 文件到 /wp-content/ 目录下,此时插件已经开始自动启用并工作了,如果需要关闭插件,只需将 db.php 文件移动到其他位置或删除文件即可。

最后

HyperDB 其实安装很简单,主要是很多人不会写插件的配置信息,但是只要你认真阅读插件文档多花点时间反复多看几遍相信你很快就能搞懂怎么用这个插件。

通过 HyperDB 插件实现 WordPress 数据库读写分离 - 御宅说
「宝塔面板」「软件商店」「MySQL主从复制」

注意:这个插件不会同步你的主要和次要数据库中的内容,你还需要在两个数据库之间进行 rsync 同步操作,如果你有宝塔面板,可以在宝塔面板软件商店中安装「MySQL 主从复制」。

其实除了 HyperDB 之外其实还有一款基于 HyperDB 二开的插件叫 LudicrousDB ,两款插件配置文件相互兼容,但是 LudicrousDB 在 HyperDB 的基础上额外增加了一些功能,具体详情可以去下面的 Github 地址查看。

LudicrousDB Github 地址 :https://github.com/stuttter/ludicrousdb

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin