Ich entwickle eine Anwendung zur Ausführung auf dem Client-PC (Win), der mit einer MySQL Server 5.1-Instanz konfiguriert ist, die als Nur-Lese-Slave für den Remote-Master fungiert. Der Remote-Master verfügt über Dutzende von Schemas. Ich benötige jedoch nur eines pro Client, sodass ich die Replication-Do- Db - Einstellung in my.ini angeben kann, 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-WLAN verfügbar ist und die durch die Datennutzung abgerechnet werden, überschreiten sie schnell ihre Grenzen für Datentarife und stoßen auf teure Probleme.
So wie ich es verstehe, schreibt MySQL alle Transaktionen für alle Schemata in eine einzige Binlog-Datei, was bedeutet, dass jeder Client alle Transaktionen herunterladen muss, die für jedes Schema auf dem Master ausgeführt werden, und dann nach dem Herunterladen den Datenbankfilter pro Replikation anwendet. do-db- Einstellungen in der Datei my.ini des Clients.
Um diese Ineffizienz zu minimieren, habe ich die Einstellung slave_compressed_protocol = 1 verwendet , die die übertragenen Daten um 50% zu reduzieren scheint, aber dennoch dazu führt, dass unsere Kunden ihr Datenlimit schnell überschreiten und die 3G-Rechnung in die Höhe treiben.
Ich kann mir nicht vorstellen, dass ich der einzige bin, der sich dem stellen muss. Ich bin mir also sicher, dass ich durch Setzen von x = y eine Menge Antworten bekommen werde, wie dies erreicht werden kann. Ich kann jedoch keine Dokumentation für eine solche Einstellung oder einen empfohlenen Ansatz finden.
Soweit ich über eine mögliche Lösung nachgedacht habe, geben Sie bitte Feedback oder alternative Routen:
- Richten Sie für jedes Schema einen "Proxy" -Slave ein (auf einer anderen Box oder auf derselben Box mit einer anderen MySQL-Instanz / einem anderen Port)
- Konfigurieren Sie den Proxy-Slave so, dass nur die Datenbank repliziert wird, die die Clients replizieren möchten.
- Konfigurieren Sie die MySQL-Instanz des Clients als Slaves für den entsprechenden Proxy-Slave.
Dies sollte dazu führen, dass der Client nur die Binlog-Daten für sein Schema abruft. Der Nachteil (soweit ich das beurteilen kann) ist, dass dadurch die Komplexität unseres Setups dramatisch zunimmt und es wahrscheinlich anfälliger wird.
Gedanken? Funktioniert dieser Ansatz überhaupt?
Beachten Sie, dass wir den MySQL 5.0-Server unter RedHat ausführen, jedoch ein Upgrade auf 5.5 durchführen können, wenn sich eine Lösung ergibt.