有没有办法将多个SQL放在同一个事务中的不同服务器上?

时间:2010-06-21 13:19:45

标签: php mysql distributed-transactions cross-server

在我的系统中,我们会采取行动,为了报告,我们会将该操作记录在另一台服务器上(如果感兴趣,可以使用星型模式)。 显然,我需要动作更新/插入与日志记录在同一个事务中 那么,有没有办法在同一个交易中将两个不同的sqls包含到两个不同的服务器中? 现在我在代码级别(php)

管理它

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

单独使用MySQL是不可能的。虽然MySQL确实有Federated Storage Engine(即:远程访问其他MySQL服务器),但它不支持事务。这意味着您无法通过MySQL直接协调多服务器事务。 MySQL支持XA for InnoDB tables,因此您可以使用MySQL的外部事务管理器,但PHP不支持XA。通常,这被视为企业级功能,您可以使用JavaC#/.NET来实现。

答案 2 :(得分:0)

复杂的方式是:

  1. 在同一台服务器上创建相同的表。
  2. 使此服务器主服务器
  3. 将副本设置为此表
  4. 如果您希望日志表不是很大,您可以这样做:

    1. 第一个表名设置_tmp
    2. 在插入时更新slave log_tmp触发器并更新以将数据复制到日志表
    3. 一段时间后从master中的log_tmp中删除一些数据。