Estoy desarrollando una aplicación para ejecutar en la PC del cliente (Win) que está configurada con una instancia del servidor MySQL 5.1 que actuará como esclavo de solo lectura para el maestro remoto. El maestro remoto tiene docenas de esquemas, pero solo necesito uno por cliente, por lo que proporciono la configuración replication-do-db en my.ini para replicar solo el esquema que el cliente necesita. La replicación funciona, pero cuando nuestros clientes ingresan a regiones del mundo donde el acceso a Internet solo está disponible a través de la conexión inalámbrica 3G, que cobra por el uso de datos, rápidamente exceden los límites de su plan de datos y se enfrentan a problemas costosos.
Según tengo entendido, MySQL escribe todas las transacciones para todos los esquemas en un solo archivo binlog, lo que significa que cada cliente tiene que descargar todas las transacciones que se realizan en cada esquema en el maestro, luego, una vez descargado, aplique el filtro de base de datos por replicación. Configuración de do-db en el archivo my.ini del cliente.
Para minimizar esta ineficiencia, he empleado la configuración slave_compressed_protocol = 1 , que parece reducir los datos transmitidos en un 50%, pero aún así hace que nuestros clientes superen rápidamente su límite de datos acumulando la factura 3G.
No puedo imaginar que soy el único que enfrenta esto, así que estoy seguro de que obtendré un montón de respuestas sobre cómo lograr esto estableciendo x = y. Sin embargo, no puedo encontrar ninguna documentación de tal configuración, ni un enfoque recomendado para tomar.
Hasta ahora, he pensado en una posible solución, por favor envíe sus comentarios o rutas alternativas:
- Configure un esclavo "proxy" para cada esquema (en un cuadro diferente, o el mismo cuadro con una instancia / puerto MySQL diferente)
- Configure el esclavo proxy para replicar-do-db solo la base de datos que los clientes desean replicar.
- Configure la instancia de MySQL del cliente como esclavos del esclavo proxy apropiado.
Esto debería dar como resultado que el cliente solo extraiga los datos de binlog para su esquema. La desventaja (por lo que puedo decir) es que aumenta dramáticamente la complejidad de nuestra configuración, probablemente haciéndola más frágil.
Pensamientos? ¿Funcionará este enfoque?
Tenga en cuenta que estamos ejecutando el servidor MySQL 5.0 en RedHat, pero podríamos actualizar a 5.5 si produce una solución.