MySQL: запись на подчиненный узел

Допустим, у меня есть база данных автомобилей. У меня есть марки и модели (FK to Makes). Я планирую, чтобы пользователи отслеживали свои автомобили. у каждого автомобиля есть FK для модели. Теперь у меня много пользователей, и я хочу разделить свою базу данных, чтобы распределить нагрузку. Таблицы Makes и Models не так сильно меняются, но они должны быть общими для всех сегментов. Моя идея состоит в том, чтобы использовать репликацию MySQL из главной базы данных марок и моделей в каждую подчиненную базу данных. У меня вопрос: могу ли я безопасно писать в ведомые базы данных, если я не пишу в эти таблицы на ведущем?

И если говорить об этом, можно ли как-то гарантировать, что в одной подчиненной базе данных будут самые последние данные? Например, кто-то только что добавил марку «Таурус», а затем хочет добавить свою машину. Могу ли я убедиться, что используемая подчиненная база данных имеет самые последние основные данные?


person Brian Henk    schedule 04.10.2009    source источник


Ответы (2)


Да вообще можно смело писать в таблицу на слейвах то, что не пишется на мастере. Если вы делаете такие вещи, как вставка auto_increment строк на ведомых устройствах и на ведущем устройстве независимо друг от друга, у вас, конечно, будут проблемы. На самом деле вы должны настроить эту таблицу так, чтобы она была полностью исключена из репликации.

Для проверки того, есть ли у вас самые последние данные, SHOW SLAVE STATUS включает поле Seconds_Behind_Master, в котором сообщается, обновлено ли ведомое устройство. Очевидно, вы хотите, чтобы он был равен нулю. Конечно, чтобы быть уверенным, что вставленные и реплицированные данные присутствуют, вам нужно подождать секунду и затем увидеть, что Seconds_Behind_Master равно нулю.

person chaos    schedule 04.10.2009
comment
знаете ли вы, есть ли блокирующая команда для синхронизации с мастером? - person Brian Henk; 05.10.2009
comment
Нет. (Игнорируя LOAD DATA FROM MASTER, который не делает то, что вы хотите, и все равно не работает.) - person chaos; 05.10.2009
comment
Существует ли какой-либо механизм сквозной записи: ведомое устройство просто пересылает запрос на запись ведущему устройству? - person Velkan; 11.05.2017
comment
@Velkan: Не то, чтобы я знал об этом, но я не в курсе. Вы, вероятно, должны задать это как вопрос, а не комментарий. - person chaos; 11.05.2017

Это было хорошее решение, которое я нашел во время поиска

Я включил основной пункт как доступный здесь:

http://erlycoder.com/43/mysql-master-slave-and-master-master-replication-step-by-step-configuration-instructions-

Репликация master-master MySQL и автоинкрементные индексы

Если вы используете репликацию master-slave, то, скорее всего, вы разработаете свое приложение таким образом, чтобы писать на master и читать с slave или нескольких slave. Но когда вы используете репликацию мастер-мастер, вы собираетесь читать и писать на любой из мастер-серверов. А значит, в этом случае встанет проблема с автоинкрементными индексами. Когда оба сервера должны будут добавить запись (разную для каждого сервера одновременно) в одну и ту же таблицу. Каждый из них назначит им один и тот же индекс и попытается реплицировать в подчиненный, это создаст коллизию. Простой трюк позволит избежать подобных коллизий на сервере MySQL.

На Master 1/Slave 2 добавьте в /etc/my.cnf:

auto_increment_increment= 2
auto_increment_offset   = 1

На Master 2/Slave 1 добавьте в /etc/my.cnf:

auto_increment_increment= 2
auto_increment_offset   = 2
person user1935729    schedule 10.05.2013