【问题标题】:Use multiple mysql connections in one query在一个查询中使用多个 mysql 连接
【发布时间】:2022-01-12 17:03:44
【问题描述】:

我需要从不同的数据库中选择两个表的联合,并且这些数据库由不同的用户和密码保护。目前我正在运行两个选择查询并将它们合并,但我希望找到一种方法来一次连接到两个数据库并在两个表上运行一个选择查询。也许像\DB::connection('mysql_1')->connection('mysql_2') 这样的任何可能的方式来做到这一点,请

【问题讨论】:

  • 你在这里问了几个不同的问题;我不确定其中哪些(如果 ANY)实际上是可能的。不过看看这篇文章:Querying multiple MySQL databases at once
  • 一个很好的解决方案,为了优化,将连接和绘制数据的 2 个文件拆分到数据库,然后将两个文件的数据调用到一个文件中(可能是您将用来修改或显示的文件)数据来自)。

标签: php mysql laravel eloquent


【解决方案1】:

一个给定的 MySQL 连接只知道一个 MySQL 实例。您不能在一个连接上同时连接到两个实例。最简单的解决方案是让您继续做您当前正在做的事情:查询两者,并在您的客户端应用程序中合并结果。

有像 Vitess 或 ProxySQL 这样的代理解决方案,但它们只是为您处理多个连接。您实际上并没有在同一个连接上使用两个 MySQL 实例,您只是将这项工作委托给代理。

有一个名为FEDERATED storage engine 的 MySQL 功能,它与您想要的很接近。基本上,您仍然只能连接到一个 MySQL 实例,但该 MySQL 实例可以逐个表地充当另一个 MySQL 实例的代理。也就是说,联合表并没有真正存储在您连接的主 MySQL 实例上。但是您可以像查看视图一样查询它,这些查询将传递给第二个 MySQL 实例。结果通过联合引擎传递到您的调用应用程序,就好像该表已存在于主 MySQL 实例上一样。现代版本的 MySQL 默认不启用 FEDERATED 引擎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2012-02-16
    • 2012-02-15
    相关资源
    最近更新 更多