Что мы можем сделать в репликации MySQL 5.0 для решения проблем пропускной способности? - PullRequest
9 голосов
/ 01 июня 2011

Я разрабатываю приложение для запуска на клиентском ПК (Win), которое настроено с экземпляром MySQL server 5.1, который будет действовать как ведомый только для чтения подчиненный удаленный мастер. Удаленный мастер имеет десятки схем, но мне нужна только одна для каждого клиента, поэтому я предоставляю настройку replication-do-db в my.ini, чтобы реплицировать только ту схему, которая нужна клиенту. Репликация работает, но когда наши клиенты попадают в регионы мира, где доступ в Интернет доступен только через беспроводную связь 3G, которая взимает плату за использование данных, они быстро выходят за пределы своего тарифного плана и сталкиваются с дорогостоящими проблемами.

Насколько я понимаю, MySQL записывает все транзакции для всех схем в один файл binlog, что означает, что каждый клиент должен загрузить все транзакции, которые выполняются в каждой схеме на ведущем устройстве, а затем, после загрузки, применить фильтр базы данных. per replication-do-db в клиентском файле my.ini.

Чтобы свести к минимуму эту неэффективность, я использовал настройку slave_compressed_protocol = 1 , которая, по-видимому, сокращает передаваемые данные на 50%, но все же заставляет наших клиентов быстро превышать свою предельную стойку данных до счета 3G.

Я не могу себе представить, что я единственный, кто сталкивается с этим, поэтому я уверен, что получу массу ответов о том, как этого добиться, установив x = y. Тем не менее, я не могу найти ни документацию такого параметра, ни рекомендуемый подход.

Пока что я подумаю над возможным решением, пожалуйста, предоставьте отзыв или альтернативные маршруты:


  1. Настройка «прокси-сервера» для каждой схемы (на другом или на том же компьютере с другим экземпляром / портом MySQL)
  2. Настройте подчиненный прокси-сервер для репликации-do-db только одной базы данных, которую клиенты хотят реплицировать.
  3. Настройте клиентский экземпляр MySQL в качестве подчиненного для соответствующего прокси-подчиненного.

Это должно привести к тому, что клиент будет извлекать только данные binlog для своей схемы. Недостатком (насколько я могу судить) является то, что он значительно увеличивает сложность нашей установки, что, вероятно, делает ее более хрупкой.

Мысли? Будет ли этот подход даже работать?

Обратите внимание, что мы работаем с сервером MySQL 5.0 в RedHat, но мы можем обновить его до 5.5, если это даст решение.

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Я уже задавал этот вопрос в DBA Stack Exchange: https://dba.stackexchange.com/questions/3106/what-can-we-do-in-mysql-5-0-replication-to-address-bandwidth-concerns/3107#3107

Я не хочу совершать двойной провал в Stack Exchange.Модераторы, закройте это !!!

0 голосов
/ 12 августа 2011

Два предложения

1.) Попробуйте использовать опцию --replicate-do-table и укажите только те таблицы, которые вам нужны

2.) Попробуйте использовать --replicate-wild-do-table = name .. у вас должна быть возможность фильтровать все ваши таблицы таким образом, если ваши таблицы имеют уникальное имя

документы MySQL по репликации таблиц

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...