Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zsynchronizować dane między dwiema tabelami w różnych bazach danych (MYSQL) działających na różnych serwerach?

Po pierwsze, dlaczego żaden z was nie odpowiada na pytanie tego gościa? Czasami musimy to zrobić ze względu na ograniczenia bezpieczeństwa / zgodność / starsze systemy.

Jest kilka opcji, które napiszę tutaj za pomocą pseudokodu. Nie jestem pewien, jak działa Twoja baza danych w czasie rzeczywistym, więc nie zadziała to we wszystkich przypadkach.

Wymagania

Aby to zadziałało, bazy danych będą musiały znajdować się w tej samej instancji serwera. Jeśli nie, musisz skonfigurować federacyjny aparat pamięci masowej, aby uzyskać dostęp do danych zdalnych. Jak stwierdziła inna osoba, replikacja MySQL może być nadal przydatna przynajmniej w przesyłaniu danych na ten sam serwer, co przyspiesza synchronizację bez konieczności konfigurowania pamięci sfederowanej.Odniesienie:https://dev.mysql.com/doc/refman/5.7/en/federated-storage-engine.html

Synchronizacja czasu

MySQL pozwoli Ci na tworzenie zdarzeń według określonego harmonogramu w celu wykonania Twojej pracy (zakładając, że nie masz żadnych zewnętrznych narzędzi do planowania zadań).

Mam nadzieję, że masz jakąś zmodyfikowaną datę, możesz wysyłać zapytania raz dziennie lub w krótszych odstępach czasu we wszystkich polach, w których modified_at>=DATE_SUB(TERAZ( ),PRZERWA ? GODZINA)

Jeśli możesz dodać kolumnę, możesz utworzyć taką o nazwie synced_at co byłoby trochę bardziej odporne na różnice w zegarach serwerów. Następnie możesz po prostu zapytać, gdzie synced_at JEST NULL lub synced_at <=modified_at

MySQL obsługuje PRZED i PO wyzwalacze INSERT / UPDATE / DELETE itp. Możesz ich użyć do wyzwalania logiki. Należy pamiętać, że każda transakcja spowoduje niewielki spadek wydajności, co może z łatwością przytłoczyć bardzo aktywne serwery produkcyjne.

Naprawdę nie ma dużej różnicy między PRZED i PO, z wyjątkiem tego, że jeśli użyjesz wyzwalaczy stylu PRZED, możesz rzucić stan sql, aby zapobiec wstawianiu do tabeli źródłowej, jeśli ważne jest, aby obie tabele były wysoce zsynchronizowane.

Logika synchronizacji

To jest pseudokod, ale...

# 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

Tak samo jak powyżej, tylko manipulujesz jednym rekordem na raz i odzwierciedlasz instrukcję wyzwalacza. Na przykład:INSERT TRIGGER w tabeli źródłowej powinien po prostu zapytać INSERT w tabeli docelowej.

Prosty, ale nie zalecany do niczego innego niż baza danych raportowania. Upuść całą tabelę i odbuduj ją z innych rekordów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hash schemat bazy danych MySQL

  2. Mysql:pole aktualizacji najnowszego rekordu

  3. Zapytanie o dołączenie do MySQL

  4. Paginacja na żądanie (zapisy stronicowania na żądanie użytkownika)

  5. Dlaczego mój float przechowuje w MYSQL jako .9999, gdy jest większy niż 1?