MySQL Master-Master Репликация ВСЕХ баз данных. Как?

16

Предыстория : у меня есть два сервера MySQL 5.1, настроенные в Master-Master-репликации на основе строк (RBR), следуя этому превосходному руководству . Я хочу, чтобы все базы данных были реплицированы, и я буду регулярно добавлять новые базы данных.

Цель : я хотел бы иметь возможность добавлять новые базы данных для репликации, просто добавляя БД на один из серверов; без остановки обоих ведомых устройств, изменения файлов конфигурации, перезапуска серверов MySQL и повторного запуска ведомых устройств.

Вопрос : Из того, что я прочитал, я думаю , что я могу сделать это, просто опуская любые binlog-do-db, binlog-ignore-db, replicate-do-dbи replicate-ignore-dbнастройки в конфигурации каждого сервера, но я не могу быть уверен. Документы MySQL о том, как оцениваются параметры репликации на уровне базы данных и на уровне таблицы , заставляют меня думать, что, возможно, не будет никакого способа сделать это вообще.

Соответствующие части моих /etc/mysql/my.cnfфайлов скопированы ниже. Я на правильном пути? То, что я хочу, даже возможно?

Мастер 1 :

[mysqld]
binlog-format = row
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host = <master2_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

Мастер 2 :

[mysqld]
binlog-format = row
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host = <master1_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M
Эндрю Энсли
источник
1
Создайте БД на машине, на которую вы направляете запись.
Мартин
какой у тебя полный конфиг? Я пытаюсь ответить на тезисы ниже, это не сработало :-(
zx1986

Ответы:

17

Вот как я это сделал для обоих мастеров

log-bin = mysqld-bin
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
log-slave-updates
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
relay-log=mysqld-relay-bin
Майк
источник
Можете ли вы добавить базы данных одному мастеру и автоматически скопировать их на другой?
Эндрю Энсли
да, они сделали .. я просто настроить, какие из них игнорировать
Майк
1
Два вопроса: мне просто нужно убедиться, что мы оба говорим одно и то же. # 1 Можете ли вы добавить базу данных к одному из двух мастеров, и она будет автоматически создана для другого, а затем все данные, вставленные в новую базу данных, будут реплицированы без изменения конфигурации или перезапуска серверов? # 2 Вы используете репликацию на основе операторов или строк? Мне нужны все изменения на всех реплицируемых базах данных; даже те, которые запускаются без оператора «use» заранее. Будут ли эти настройки хорошо работать с репликацией на основе строк?
Эндрю Энсли
3
да да да да да :)
Майк
1
Хорошо, я только что настроил свои серверы, используя эти настройки прошлой ночью. Я пропустил log-slave-updatesнастройку, потому что я не видел в этом необходимости. Все отлично работает Я могу добавлять и удалять базы данных, и изменения реплицируются. Спасибо! Награда присуждается.
Эндрю Энсли
4

Что касается создания баз данных, все еще есть сообщения об ошибках при использовании CREATE DATABASE с репликацией на основе строк.

Этот отчет закрыт, но ошибка снова появилась в MySQL 5.1.47.
Этот отчет основан на MySQL Cluster (механизм хранения NDB).
Этот отчет основан на репликации-wild-ignore-table, все еще реплицируемой.

При репликации на основе строк двоичные журналы растут с необычайной скоростью, что может резко увеличить сетевой трафик, просто отправляя двоичные данные журналов в релейные журналы ведомого устройства.

@ Майк говорит, что он получил создание базы данных, чтобы работать и копировать просто отлично. Я не сомневаюсь в этом вообще. Я немного обеспокоен тем, что MySQL (например, Oracle) не получил всех преимуществ от репликации на основе строк после создания экземпляра базы данных.

Вы можете переключиться на row_format MIXED, если вам все еще нужны записи на основе строк в двоичных журналах. Внутренне, двоичный формат журнала имеет тенденцию плавать между оператором и установленным так или иначе: (См. Http://bugs.mysql.com/bug.php?id=40146 ). Другие отчеты об ошибках закрываются с использованием смешанных и отстраняющихся от строк ( http://bugs.mysql.com/bug.php?id=39701 ), но проблемы по-прежнему периодически возникают.

ЗАКЛЮЧИТЕЛЬНОЕ ПРИМЕЧАНИЕ

Для вашего же удобства вернитесь к репликации на основе операторов и, таким образом, сделайте CREATE DATABASE (которая является оператором SQL) стабильной и согласованной для последующего SQL для созданной базы данных. Фактически, самый последний отчет об ошибках показывает, что лучше всего использовать репликацию на основе операторов, независимо от того, что в документации говорится об опциях на уровне базы данных и на уровне таблицы.

RolandoMySQLDBA
источник
Спасибо за всю эту информацию. Моя единственная проблема с репликацией на основе операторов состоит в том, что изменения, указывающие базу данных (т. Е. «INSERT INTO db1.table1 (col1) VALUES ('hi');»), не будут работать, если база данных не является текущей используемой базой данных. Я полагаю, что настало время перейти к репликации на основе операторов и очистить некоторый код ...
Эндрю Энсли
Оказывается, исправить код было не так сложно. Сейчас я использую репликацию на основе операторов. Спасибо за совет.
Эндрю Энсли
0

Хм ... Вам также нужно будет найти способ обработки / дифференцирования автоматически увеличиваемых ключей и полей. Это выглядит интересно .. http://mysql-mmm.org/

Нандини Ананд
источник
Это обрабатывается в настройках auto-increment-increment, и auto-increment-offsetв моих файлах конфигурации. Смотрите эту страницу: dev.mysql.com/doc/refman/5.1/en/…
Эндрю Энсли
Я думаю, что вы не поняли. @ Андрей говорит о добавлении новых баз данных, а не о добавлении новых серверов баз данных. Если @Andrew представляет новые серверы баз данных, то при перераспределении данных между 3 и более серверами БД могут возникнуть конфликты ключей, на которые будет отвечать ваш ответ. +1 за ваши усилия, но, пожалуйста, внимательно прочитайте все вопросы. Я был сожжен так же, как и я.
RolandoMySQLDBA
@all: Упс .. Извините. Я мог бы поклясться, что прочитал это полностью, но нет, должно быть, вместо этого снял ...
Нандини Ананд
-1

cmiiw Я думал, что вы сможете создать базу данных на master1 и master2 без изменения конфигурации или остановки ведомого, но убедитесь, что репликация master - master запущена. поскольку вы не определяете, какую базу данных нужно реплицировать, это означает, что вся база данных будет реплицироваться, если вы не определите ее в my.cnf.

chocripple
источник
Это именно то, что я спрашиваю здесь. Я пока не могу найти однозначного ответа на этот вопрос.
Эндрю Энсли