Sto sviluppando un'applicazione da eseguire sul PC client (Win) configurato con un'istanza del server MySQL 5.1 che fungerà da slave di sola lettura per il master remoto. Il master remoto ha dozzine di schemi, ma ne ho bisogno solo uno per client, quindi fornisco l' impostazione replication-do-db in my.ini per replicare solo lo schema di cui il client ha bisogno. La replica funziona, ma quando i nostri clienti entrano in regioni del mondo in cui l'accesso a Internet è disponibile solo tramite wireless 3G, che si carica in base all'utilizzo dei dati, superano rapidamente i limiti del loro piano dati e incontrano costosi problemi.
A quanto ho capito, MySQL scrive tutte le transazioni per tutti gli schemi in un singolo file binlog, il che significa che ogni client deve scaricare tutte le transazioni eseguite su ogni schema sul master, quindi una volta scaricato, applica il filtro del database per replica- impostazioni do-db nel file my.ini del client.
Per ridurre al minimo questa inefficienza, ho utilizzato l' impostazione slave_compressed_protocol = 1 , che sembra ridurre i dati trasmessi del 50%, ma fa sì che i nostri clienti superino rapidamente il limite di dati accumulando la bolletta 3G.
Non riesco a immaginare di essere l'unico ad affrontare questo, quindi sono sicuro che otterrò un sacco di risposte su come raggiungere questo obiettivo impostando x = y. Tuttavia, non riesco a trovare alcuna documentazione di tale impostazione, né un approccio raccomandato da adottare.
Finora, ecco il mio pensiero per una possibile soluzione, si prega di fornire feedback o percorsi alternativi:
- Configurare uno slave "proxy" per ogni schema (su una casella diversa o sulla stessa casella con un'istanza / porta MySQL diversa)
- Configurare lo slave proxy per replicare-do-db solo l'unico database che i client desiderano replicare.
- Configurare l'istanza MySQL del client come slave sullo slave proxy appropriato.
Ciò dovrebbe comportare il client che estrae solo i dati binlog per il loro schema. Il rovescio della medaglia (per quanto ne so) è che aumenta notevolmente la complessità del nostro setup, probabilmente rendendolo più fragile.
Pensieri? Questo approccio funzionerà anche?
Nota, stiamo eseguendo il server MySQL 5.0 su RedHat, ma potremmo aggiornare a 5.5 se produce una soluzione.