Je développe une application à exécuter sur le PC client (Win) qui est configurée avec une instance de serveur MySQL 5.1 qui agira comme esclave en lecture seule du maître distant. Le maître distant possède des dizaines de schémas, mais je n'en ai besoin que d'un par client, je fournis donc le paramètre replication-do-db dans my.ini pour répliquer uniquement le schéma dont le client a besoin. La réplication fonctionne, mais lorsque nos clients pénètrent dans des régions du monde où l'accès à Internet n'est disponible que via la technologie sans fil 3G, qui se charge par l'utilisation des données, ils dépassent rapidement les limites de leur plan de données et rencontrent des problèmes coûteux.
Si je comprends bien, MySQL écrit toutes les transactions pour tous les schémas dans un seul fichier binlog, ce qui signifie que chaque client doit télécharger toutes les transactions effectuées sur chaque schéma du maître, puis une fois téléchargé, appliquer le filtre de base de données par réplication - paramètres do-db dans le fichier my.ini du client.
Pour minimiser cette inefficacité, j'ai utilisé le paramètre slave_compressed_protocol = 1 , qui semble réduire les données transmises de 50%, mais qui fait que nos clients dépassent rapidement leur limite de données pour augmenter la facture 3G.
Je ne peux pas imaginer que je suis le seul à y faire face, donc je suis sûr que j'obtiendrai une tonne de réponses sur la façon d'y parvenir en définissant x = y. Cependant, je ne trouve aucune documentation sur un tel paramètre, ni une approche recommandée à adopter.
Jusqu'à présent, voici ma pensée pour une solution possible, veuillez fournir des commentaires ou des itinéraires alternatifs:
- Configurer un esclave "proxy" pour chaque schéma (sur une boîte différente, ou même boîte avec une instance / un port MySQL différent)
- Configurez l'esclave proxy pour répliquer-faire-db uniquement la seule base de données que les clients souhaitent répliquer.
- Configurez l'instance MySQL du client en tant qu'esclaves de l'esclave proxy approprié.
Cela devrait avoir pour conséquence que le client extrait uniquement les données binlog de son schéma. L'inconvénient (pour autant que je sache) est qu'il augmente considérablement la complexité de notre configuration, ce qui la rend probablement plus fragile.
Pensées? Cette approche fonctionnera-t-elle même?
Remarque, nous exécutons le serveur MySQL 5.0 sur RedHat, mais nous pourrions mettre à niveau vers 5.5 s'il produit une solution.