sql >> Database >  >> RDS >> Mysql

Wat is de beste manier om dynamische gegevens in realtime bidirectioneel te synchroniseren met mysql

Er zijn niet veel prestaties te behalen door uw database op twee masters te repliceren. Er is echter een handig stukje failover als u uw toepassing correct codeert.

Master-Master-configuratie is in wezen hetzelfde als de Slave-Master-configuratie, maar heeft beide slaves gestart en een belangrijke wijziging in uw configuratiebestanden op elke box.

Beheers MySQL 1:

auto_increment_increment = 2
auto_increment_offset = 1 

Master MySQL 2:

auto_increment_increment = 2
auto_increment_offset = 2

Deze twee parameters zorgen ervoor dat wanneer twee servers om de een of andere reden vechten om een ​​primaire sleutel, ze de replicatie niet dupliceren en doden. In plaats van met 1 te verhogen, wordt elk veld voor automatisch ophogen standaard met 2 verhoogd. Op de ene box begint het offset vanaf 1 en voert de reeks 1 3 5 7 9 11 13 enz. uit. Op het tweede vak begint het offset bij 2 en loop langs 2 4 6 8 10 12 enz. Uit de huidige tests blijkt dat de automatische verhoging het volgende vrije nummer krijgt, niet het nummer dat eerder is overgegaan.
Bijv. Als server 1 de eerste 3 records (1 3 en 5) invoegt wanneer server 2 de 4e invoegt, krijgt deze de sleutel van 6 (niet 2, die ongebruikt blijft).

Als je dat eenmaal hebt ingesteld, start je ze allebei als slaves.
Vervolgens om te controleren of beide goed werken, maak je verbinding met beide machines en voer je het commando SHOW SLAVE STATUS uit en je moet er rekening mee houden dat zowel Slave_IO_Running en Slave_SQL_Running moeten beide "JA" zeggen op elk vakje.

Maak dan natuurlijk een paar records in een tabel en zorg ervoor dat het ene vak alleen oneven genummerde primaire sleutels invoegt en het andere alleen de even genummerde.

Voer vervolgens alle tests uit om er zeker van te zijn dat u alle standaardtoepassingen op elke doos kunt uitvoeren terwijl deze naar de andere repliceert.

Het is relatief eenvoudig als het eenmaal werkt.
Maar zoals gezegd, MySQL ontmoedigt het en adviseert u ervoor te zorgen dat u rekening houdt met deze functionaliteit bij het schrijven van uw applicatiecode.

Bewerken: Ik veronderstel dat het theoretisch mogelijk is om meer masters toe te voegen als je ervoor zorgt dat de offsets correct zijn enzovoort. Je zou echter, realistischer, wat extra slaven kunnen toevoegen.



  1. Is er een prestatievermindering als er te veel kolommen in een tabel zijn?

  2. Linq to Entities Group By (OUTER APPLY) oracle 11.2.0.3.0 ondersteunt niet van toepassing

  3. Krijg alle datum van de maand samen met gegevens uit de tabel

  4. SQLSTATE[42S22]:Kolom niet gevonden:1054 Onbekende kolom 'id' in 'where-clausule' (SQL:selecteer * uit `songs` waar `id` =5 limit 1)