Estou desenvolvendo um aplicativo para ser executado no PC cliente (Win) configurado com uma instância do servidor MySQL 5.1 que atuará como escravo somente leitura do mestre remoto. O mestre remoto tem dezenas de esquemas, mas eu só preciso de um por cliente, portanto, forneço a configuração replication-do-db em my.ini para replicar apenas o esquema que o cliente precisa. A replicação funciona, mas quando nossos clientes acessam regiões do mundo onde o acesso à Internet só está disponível via 3G sem fio, cobrado pelo uso de dados, eles rapidamente excedem os limites do plano de dados e enfrentam 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 deve fazer o download de todas as transações executadas em todos os esquemas do mestre e, depois de baixado, 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 excedam rapidamente seu limite de dados, acumulando a conta 3G.
Não consigo imaginar que sou o único a enfrentar isso, por isso tenho certeza de que receberei muitas respostas sobre como conseguir isso definindo x = y. No entanto, não consigo encontrar nenhuma documentação dessa configuração nem uma abordagem recomendada a seguir.
Até agora, aqui está o meu pensamento para uma possível solução, 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 escravos para o proxy slave apropriado.
Isso deve resultar no cliente puxando apenas os dados do binlog para seu esquema. A desvantagem (até onde eu sei) é 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 poderíamos atualizar para o 5.5 se ele produzir uma solução.