Estou desenvolvendo um aplicativo para ser executado no PC cliente (Win) que está configurado com uma instância do servidor MySQL 5.1 que atuará como escravo somente leitura para o mestre remoto. O mestre remoto tem dezenas de esquemas, mas só preciso de um por cliente, então forneço a configuração de replicação-do-db em my.ini para replicar apenas o esquema que o cliente precisa. A replicação funciona, mas quando nossos clientes entram em regiões do mundo onde o acesso à internet só está disponível via 3G sem fio, que cobra pelo uso de dados, eles rapidamente excedem seus limites de plano de dados e se deparam com problemas caros.
Pelo que entendi, o MySQL grava todas as transações para todos os esquemas em um único arquivo binlog, o que significa que cada cliente precisa baixar todas as transações executadas em cada esquema no mestre e, depois de baixadas, aplicar o filtro de banco de dados por replicação . configurações do-db no arquivo my.ini do cliente.
Para minimizar essa ineficiência, empreguei a configuração slave_compressed_protocol = 1 , que parece reduzir os dados transmitidos em 50%, mas ainda faz com que nossos clientes ultrapassem rapidamente o limite de dados acumulando a conta 3G.
Não consigo imaginar que sou o único enfrentando isso, então tenho certeza de que obterei muitas respostas sobre como conseguir isso definindo x = y. No entanto, não consigo encontrar nenhuma documentação de tal configuração, nem uma abordagem recomendada a ser adotada.
Até agora, aqui está o meu pensamento para uma possível solução, por favor, forneça feedback ou rotas alternativas:
- Configure um escravo "proxy" para cada esquema (em uma caixa diferente ou na mesma caixa com uma instância/porta MySQL diferente)
- Configure o escravo proxy para replicar-do-db apenas o banco de dados que os clientes desejam replicar.
- Configure a instância MySQL do cliente como slaves para o proxy slave apropriado.
Isso deve fazer com que o cliente extraia apenas os dados do log binário para seu esquema. A desvantagem (tanto quanto posso dizer) é que aumenta drasticamente a complexidade de nossa configuração, provavelmente tornando-a mais frágil.
Pensamentos? Essa abordagem funcionará?
Observe que estamos executando o servidor MySQL 5.0 no RedHat, mas podemos atualizar para 5.5 se ele produzir uma solução.