Was können wir in der MySQL 5.0-Replikation tun, um Bandbreitenprobleme zu beheben?

9

Ich entwickle eine Anwendung auf dem Client-PC (Win), die mit einer MySQL-Server 5.1-Instanz konfiguriert ist, die als schreibgeschützter Slave für den Remote-Master fungiert. Der Remote-Master hat Dutzende von Schemas, aber ich benötige nur einen pro Client. Daher stelle ich die Einstellung replication-do-db in my.ini bereit, um nur das Schema zu replizieren, das der Client benötigt. Die Replikation funktioniert, aber wenn unsere Kunden in Regionen der Welt gelangen, in denen der Internetzugang nur über 3G-Wireless verfügbar ist, die durch die Datennutzung belastet werden, überschreiten sie schnell ihre Datenplangrenzen und stoßen auf teure Probleme.

Wie ich es verstehe, schreibt MySQL alle Transaktionen für alle Schemas in eine einzige binlog-Datei, was bedeutet, dass jeder Client alle Transaktionen herunterladen muss, die auf jedem Schema auf dem Master ausgeführt werden, dann nach dem Download den Datenbankfilter anwenden pro replication-do-db -Einstellungen in der my.ini-Datei des Clients.

Um diese Ineffizienz zu minimieren, habe ich die slave_compressed_protocol = 1 Einstellung verwendet, die die übertragenen Daten um 50% reduziert, aber immer noch dazu führt, dass unsere Kunden ihre Datengrenze schneller als die 3G-Rechnung überschreiten .

Ich kann mir nicht vorstellen, dass ich der Einzige bin, der damit konfrontiert wird. Ich bin mir sicher, dass ich eine Menge Antworten bekommen werde, wie ich dies erreichen kann, indem ich x = y setze. Ich kann jedoch keine Dokumentation für eine solche Einstellung oder eine empfohlene Vorgehensweise finden.

So weit, hier ist mein Gedanke zu einer möglichen Lösung, bitte geben Sie Feedback oder alternative Routen:

  1. Richten Sie für jedes Schema einen "Proxy" -Slave ein (auf einer anderen Box oder derselben Box mit einer anderen MySQL-Instanz / einem anderen MySQL-Port)
  2. Konfigurieren Sie den Proxy-Slave für replicate-do-db nur für die eine Datenbank, die die Clients replizieren möchten.
  3. Konfigurieren Sie die MySQL-Instanz des Clients als Slave für den entsprechenden Proxy-Slave.

Dies sollte dazu führen, dass der Client nur die binlog-Daten für sein Schema extrahiert. Der Nachteil (soweit ich das beurteilen kann) ist, dass es die Komplexität unseres Setups dramatisch erhöht und es wahrscheinlich fragiler macht.

Gedanken? Wird dieser Ansatz überhaupt funktionieren?

Hinweis: Wir betreiben den MySQL 5.0-Server auf RedHat, aber wir könnten auf 5.5 aktualisieren, wenn es eine Lösung erzeugt.

    
Abram 01.06.2011, 18:39
quelle

2 Antworten

2

Ich habe diese Frage bereits im DBA Stack Exchange angesprochen: Ссылка

Ich möchte nicht im Stack Exchange verdoppeln. Moderatoren, bitte schließe das !!!

    
RolandoMySQLDBA 11.08.2011, 21:12
quelle
0

Zwei Vorschläge

1.) Verwenden Sie die Option --replicate-do-table und geben Sie nur die gewünschten Tabellen an

2.) Versuchen Sie es mit --replicate-wild-do-table = name. Sie sollten alle Ihre Tabellen auf diese Weise filtern können, wenn Ihre Tabellen einen eindeutigen Namen haben

MySQL-Dokumentation zur Tabellenreplikation

    
stimpy 11.08.2011 21:02
quelle

Tags und Links