Я использую несколько баз данных на MySQL 5.0.45 и пытаюсь синхронизировать мою устаревшую базу данных с пересмотренной схемой, чтобы я мог запускать обе базы данных бок о бок. Я делаю это, добавляя триггеры в новую базу данных, но у меня возникают проблемы с репликацией. Моя установка выглядит следующим образом.
Сервер "Мастер"
- База данных "legacydb", реплицируется на сервер "ведомый".
- База данных "newdb", имеет триггеры, которые обновляют "legacydb" и не реплицируются.
Сервер "Раб"
Мои обновления для "newdb" запускаются нормально и отключают мои триггеры. Они обновляют "legacydb" на "главном" сервере. Тем не менее, изменения не распространяются на рабов. Документы MySQL говорят, что для простоты репликация смотрит на текущий контекст базы данных (например, "SELECT DATABASE();"
), когда решает, какие запросы копировать, а не смотреть на продукт запроса. Мой триггер запускается из контекста базы данных "newdb", поэтому репликация игнорирует обновления.
Я попытался переместить оператор обновления в хранимую процедуру в "legacydb". Это прекрасно работает (то есть данные реплицируются на ведомый), когда я подключаюсь к «master» и вручную запускаю "USE newdb; CALL legacydb.do_update('Foobar', 1, 2, 3, 4);"
. Однако когда эта процедура вызывается из триггера, она не реплицируется.
До сих пор мои мысли о том, как это исправить, были следующими:
Принудительно установить триггер для установки новой текущей базы данных. Это было бы проще, но я не думаю, что это возможно. Это то, чего я надеялся достичь с помощью хранимой процедуры.
Реплицируйте обе базы данных и используйте триггеры как на главном, так и на ведомом устройствах. Это было бы возможно, но боль в настройке.
Принудительно, чтобы репликация приняла все изменения в "legacydb", независимо от текущего контекста базы данных.
Если репликация выполняется на слишком высоком уровне, она никогда не увидит никаких обновлений, запущенных моим триггером, и в этом случае никакое количество взломов не приведет к тому, что я хочу.
Любая помощь в достижении этого будет принята с благодарностью.