Есть ли способ поместить несколько SQL для разных серверов в одной транзакции? - PullRequest
0 голосов
/ 21 июня 2010

В моей системе мы выполняем действие, и для отчетности мы записываем это действие на другом сервере (звездообразная схема, если это интересно).Очевидно, мне нужно, чтобы действие update / insert было в той же транзакции, что и запись в журнал.
Итак, есть ли способ включить два разных sqls в два разных сервера в одной транзакции?
Прямо сейчас я управляю этим вуровень кода (php)

Ответы [ 3 ]

0 голосов
/ 21 июня 2010

Это невозможно только с MySQL.В то время как MySQL имеет Federated Storage Engine (т.е. удаленный доступ к другим серверам MySQL), он не поддерживает транзакции.Это означает, что вы не можете координировать многосерверную транзакцию напрямую через MySQL.MySQL поддерживает XA для таблиц InnoDB , поэтому вы можете использовать внешний менеджер транзакций с MySQL, но PHP не поддерживает XA.Обычно это считается функцией уровня предприятия, и вы реализуете ее с использованием Java или C # /. NET .

0 голосов
/ 21 июня 2010

Сложный способ:

  1. создать ту же таблицу на том же сервере.
  2. Сделать этот мастер-сервер
  3. Установить реплику этой таблицы

если вы хотите, чтобы таблица журнала была не очень большой, вы можете сделать:

имя первой таблицы установлено _tmp создать на ведомом триггере log_tmp при вставке и обновить, чтобы скопировать данные в таблицу журнала через некоторое время удалить из log_tmp в мастер некоторые данные.
0 голосов
/ 21 июня 2010

Можно использовать координатор распределенных транзакций .

Настройка кода неисправности.

...