MySQL: запись на подчиненный узел - PullRequest
7 голосов
/ 05 октября 2009

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

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

Ответы [ 2 ]

6 голосов
/ 05 октября 2009

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

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

5 голосов
/ 11 мая 2013

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

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

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

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

Если вы используете репликацию master-slave, то, скорее всего, вы разработаете свое приложение для записи в master и чтения из slave или нескольких slave. Но когда вы используете репликацию мастер-мастер, вы собираетесь читать и записывать на любой из мастер-серверов. Итак, в этом случае проблема с автоинкрементными индексами возрастет. Когда обоим серверам нужно будет добавить запись (различную для каждого сервера одновременно) в одну и ту же таблицу. Каждый из них назначит им один и тот же индекс и постарается скопировать его в salve, что создаст коллизию. Простой трюк позволит избежать таких коллизий на сервере 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...