Първо, защо никой от вас не отговори на въпроса на този пич? Понякога се налага да правим това поради ограничения за сигурност/съответствие/наследени системи.
Има някои опции, които ще напиша тук с псевдокод. Не сте сигурни колко е в реално време вашата база данни, така че това няма да работи във всички случаи.
Изисквания
За да работи това, базите данни трябва да са в същия сървърен екземпляр. Ако не, ще трябва да настроите обединен двигател за съхранение за достъп до отдалечените данни. Както каза друг човек, MySQL репликацията все още може да бъде полезна поне за получаване на данните до същия сървър, което прави синхронизацията по-бърза, без да е необходимо да се настройва обединено съхранение. Справка:https://dev.mysql.com/doc/refman/5.7/en/federated-storage-engine.html
Време на синхронизиране
MySQL ще ви позволи да създавате събития по определен график, за да изпълнявате работата си (ако приемем, че нямате външни инструменти за планиране на задачи).
Надяваме се, че имате някаква променена дата, можете да правите заявки веднъж на ден или на по-кратки интервали във всички полета, където modified_at
>=DATE_SUB(СЕГА( ),ИНТЕРВАЛ ? ЧАС)
Ако можете да добавите колона, можете да създадете такава, наречена synced_at
което би било малко по-устойчиво на разликите в часовника на сървъра. След това можете просто да направите заявка къде synced_at
IS NULL или synced_at
<=modified_at
MySQL поддържа тригери BEFORE и AFTER на INSERT / UPDATE / DELETE и т.н.... можете да ги използвате, за да задействате вашата логика. Имайте предвид, че ще вземете малко наказание за производителност за всяка транзакция и това лесно може да претовари много активните производствени сървъри.
Наистина няма огромна разлика между BEFORE и AFTER, освен че ако използвате тригерите на стил BEFORE, можете да хвърлите sqlstate, за да предотвратите вмъкването в таблицата източник, ако е важно и двете таблици да бъдат силно синхронизирани.
Логика на синхронизиране
Това е псевдокод, но...
# new and updated records
INSERT ... ON DUPLICATE KEY UPDATE ...
SELECT FROM source_table
JOIN target_table.id
WHERE target_table.id IS NULL or modified_at > DATE_SUB(NOW(), INTERVAL ..)
# deleted records
# нови и актуализирани записи. код>
Същото като по-горе, само вие просто манипулирате един запис в даден момент и отразявате изявлението за задействане. Например:INSERT TRIGGER в таблицата източник трябва просто да отправи заявка INSERT към целевата таблица.
Просто, но не се препоръчва за нищо друго освен може би база данни за отчети. Изхвърлете цялата таблица и я създайте отново от другите записи.