有没有办法在同一个事务中将多个 SQL 发送到不同的服务器?
在我的系统中,我们执行操作,为了报告的目的,我们将该操作记录在另一台服务器上(如果感兴趣的话,星型模式)。 显然,我需要操作更新/插入与日志记录位于同一事务中。
那么,有没有办法在同一个事务中包含两个不同的sql到两个不同的服务器?
现在我在代码级别(php)进行管理
In my system we do action, and for reporting sake we log that action on another server (star schema if it interests).
Obviously I need the action updates/inserts be in the same transaction as the logging.
So, is there a way to include two different sqls to two different servers in the same transaction?
Right now I manage that in the code level (php)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
单独使用 MySQL 是不可能实现这一点的。虽然MySQL确实有一个联合存储引擎 (即:远程访问其他MySQL服务器)它不支持事务。这意味着您无法直接通过 MySQL 协调多服务器事务。 MySQL确实支持XA 用于 InnoDB 表,因此您可以在 MySQL 中使用外部事务管理器,但 PHP 不支持 XA。一般来说,这被认为是企业级功能,您可以使用 Java 或 C#/.NET。
This isn't possible with MySQL alone. While MySQL does have a Federated Storage Engine (ie: remote access to other MySQL servers) it doesn't support transactions. That means you can't coordinate a multi-server transaction directly through MySQL. MySQL does support XA for InnoDB tables, so you can use an external transaction manager with MySQL, but PHP doesn't have any support for XA. Generally this is considered an Enterprise-level feature, and you'd implement using Java or C#/.NET.
您可以使用分布式事务协调器。
< a href="http://support.microsoft.com/kb/301600" rel="nofollow noreferrer">配置 DTC。
You can use the distributed transaction coordinator.
Configuring DTC.
复杂的方法是:
如果您希望日志表不是很大,您可以这样做:
Complicated way is:
if you want that log table be not very big you can do: