Я разрабатываю приложение для запуска на клиентском ПК (Win), которое сконфигурировано с экземпляром MySQL server 5.1, который будет действовать как ведомый только для чтения подчиненный удаленный мастер. Удаленный мастер имеет десятки схем, но мне нужна только одна для каждого клиента, поэтому я предоставляю параметр replication-do-db в my.ini для репликации только той схемы, которая нужна клиенту. Репликация работает, но когда наши клиенты попадают в регионы мира, где доступ в Интернет доступен только через беспроводную связь 3G, которая взимает плату за использование данных, они быстро выходят за пределы своего тарифного плана и сталкиваются с дорогостоящими проблемами.
Насколько я понимаю, MySQL записывает все транзакции для всех схем в один файл binlog, что означает, что каждый клиент должен загрузить все транзакции, которые выполняются в каждой схеме на ведущем устройстве, а затем после загрузки применить фильтр базы данных для каждой репликации. Настройки do-db в клиентском файле my.ini.
Чтобы минимизировать эту неэффективность, я использовал настройку slave_compressed_protocol = 1 , которая, по-видимому, сокращает передаваемые данные на 50%, но все же заставляет наших клиентов быстро превышать свой предел данных, увеличивая счет 3G.
Я не могу себе представить, что я один сталкиваюсь с этим, поэтому я уверен, что получу массу ответов о том, как этого добиться, установив x = y. Тем не менее, я не могу найти ни документацию такого параметра, ни рекомендуемый подход.
Итак, вот моя мысль о возможном решении, пожалуйста, предоставьте обратную связь или альтернативные маршруты:
- Настройте «прокси-сервер» для каждой схемы (на другом или на том же компьютере с другим экземпляром / портом MySQL)
- Сконфигурируйте подчиненный прокси-сервер для репликации-do-db только одной базы данных, которую клиенты хотят реплицировать.
- Сконфигурируйте клиентский экземпляр MySQL как подчиненный для соответствующего прокси-подчиненного.
Это должно привести к тому, что клиент будет извлекать только данные binlog для своей схемы. Недостатком (насколько я могу судить) является то, что он значительно увеличивает сложность нашей установки, что, вероятно, делает ее более хрупкой.
Мысли? Будет ли этот подход даже работать?
Обратите внимание, что мы работаем на сервере MySQL 5.0 в RedHat, но мы можем обновить его до 5.5, если это даст решение.