sql >> Databasteknik >  >> RDS >> Mysql

Vilket är det bästa sättet att dubbelriktat synkronisera dynamisk data i realtid med mysql

Det finns inte mycket prestanda att vinna på att replikera din databas på två masters. Däremot finns det en tjusig del av failover om du kodar din applikation korrekt.

Master-Master-installationen är i huvudsak densamma som Slave-Master-installationen men har både Slaves startat och en viktig ändring av dina konfigurationsfiler på varje box.

Master MySQL 1:

auto_increment_increment = 2
auto_increment_offset = 1 

Master MySQL 2:

auto_increment_increment = 2
auto_increment_offset = 2

Dessa två parametrar säkerställer att när två servrar slåss om en primärnyckel av någon anledning, duplicerar de inte och dödar replikeringen. Istället för att öka med 1, kommer alla automatiska inkrementfält som standard att öka med 2. På en ruta kommer den att börja offset från 1 och köra sekvensen 1 3 5 7 9 11 13 etc. På den andra rutan börjar den offset vid 2 och kör längs 2 4 6 8 10 12 etc. Från nuvarande testning verkar auto-inkrementet ta nästa lediga nummer, inte ett som har lämnat tidigare.
T.ex. Om server 1 infogar de tre första posterna (1 3 och 5) när server 2 infogar den 4:e, kommer den att få nyckeln 6 (inte 2, som lämnas oanvänd).

När du har ställt in det startar du båda som slavar.
För att sedan kontrollera att båda fungerar ok, anslut till båda datorerna och utför kommandot SHOW SLAVE STATUS och du bör notera att både Slave_IO_Running och Slave_SQL_Running ska båda säga "JA" på varje ruta.

Sedan, naturligtvis, skapa några poster i en tabell och se till att en ruta bara infogar udda numrerade primärnycklar och den andra bara ökar jämna numrerade.

Gör sedan alla tester för att säkerställa att du kan utföra alla standardapplikationer på varje box med den replikerande till den andra.

Det är relativt enkelt när det väl är igång.
Men som har nämnts avråder MySQL det och rekommenderar att du är uppmärksam på denna funktion när du skriver din applikationskod.

Redigera: Jag antar att det är teoretiskt möjligt att lägga till fler masters om du ser till att offseten är korrekta och så vidare. Du kan dock mer realistiskt lägga till några extra slavar.



  1. MySQL, ORDER BY insertion order, inga sorteringskolumner

  2. Vad är en relationsdatabas?

  3. PL/SQL otillräckliga privilegier inom en fråga manuellt möjligt

  4. Parallella transaktioner i mysql