【问题标题】:How to use 1 database connection for read and another for write WordPress MySQL?如何使用 1 个数据库连接读取和另一个用于写入 WordPress MySQL?
【发布时间】:2012-12-14 08:09:27
【问题描述】:

我正在使用 Amazon RDS 实例来托管我所有 6 个 WordPress 网站的 MySQL 数据库。在最大站点的流量达到峰值的那一刻,RDS 实例的 CPU 利用率为 100% 超过一个小时。

我正在考虑通过读取活动来分配数据库服务器的负载。我网站的大部分流量来自未登录的用户。因此,我想将这些未登录的用户连接到只读副本 RDS 实例,为什么其余的连接到源 RDS 实例,即我正在使用的当前数据库连接。

我如何做到这一点?

【问题讨论】:

    标签: mysql wordpress amazon-rds


    【解决方案1】:

    扩展 Wordpress 随着您网站上的流量增加,您也会在服务器上体验到更多的负载。为了跟上您的速度,您有两种可能性:scale up - 增加盒子的大小 - 这 - 特别是在 AWS - 除了其他缺点(例如双向扩展的停机时间)之外,显然还有限制。

    scale out: 分流,让多台机器完成工作。 只需在您的流量增加超过阈值时添加一台机器,并在您的流量处于较低水平时移除电源。

    可以在您的网络服务器或数据库服务器上进行常规设置中的扩展。 AWS 在这两个方面都可以为您提供帮助。由于数据库是常见的瓶颈,而这个问题实际上希望解决这个问题,我现在将讨论数据库扩展。

    Amazon RDS(托管 MySQL SaaS)提供一键式解决方案来创建数据库的只读副本。在数据库世界中,只读副本称为复制从属。在您的主服务器上执行的每个修改查询都将在您的从机上自动重播。

    您可以根据需要创建任意数量的只读副本来为您的用户提供服务。 现在是复杂的部分。我们正在谈论 READ 副本。这意味着,您不能简单地在所有实例上随机平衡查询。只有主服务器负责写入查询。

    拆分查询类型和平均分配负载可以通过数据库代理(如 MySQL 代理)来实现,这需要额外的机器。您的应用程序将与此代理通信,并且本身不需要任何更改。

    虽然 Wordpress 不是为主从设置而设计的,并且本机不支持这一点,但我们都知道那里有很多博客流量很大。

    幸运的是有一个叫做 HyperDB 的解决方案

    http://wordpress.org/extend/plugins/hyperdb/

    这是一个 Wordpress 插件,可以

    • 读写服务器(复制)
    • 可配置的读写优先级
    • 本地和远程数据中心
    • 私人和公共网络
    • 不同数据库/主机上的不同表
    • 智能写后主读取
    • 故障主机故障转移
    • 用于分析的高级统计信息

    此插件将替换 Wordpress 中默认的数据库抽象层。 它由 Wordpress 团队开发并积极使用。

    只需下载并确保仔细按照安装说明进行操作。

    玩得开心!

    【讨论】:

      【解决方案2】:

      首先按照Amazon FAQ here 中的说明设置 RDS 只读副本。然后获取这台机器的客户端端点(参见常见问题解答中的下一个问题)。

      我不确定较新版本的 Wordpress 是否支持您正在使用的开箱即用功能,但有一种方法可以检查当前用户是否已登录 Wordpress。有一个method in Wordpress来检查用户是否登录。如果你在建立任何数据库连接之前提前调用这个函数,如果你遇到一个登录的用户,你可以改变你的数据库连接。

      【讨论】:

      • 谢谢,但这与我在这里想要实现的目标相去甚远。另外,在连接数据库之前,我们无法确定用户是否已登录
      • 不知道这个。另一个想法:Wordpress 肯定会使用会话 cookie 进行身份验证。您能否检查这是否存在(并且有效)并在之后更改数据库连接?
      猜你喜欢
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 2023-03-10
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多