Назад | Перейти на главную страницу

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

Задний план: У меня есть два сервера 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

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

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

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

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

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

@Mike говорит, что он заставил создание базы данных работать и копировать просто отлично. Я совершенно в этом не сомневаюсь. Я немного подозреваю, что 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 для созданной базы данных. Фактически, самый последний отчет об ошибке показывает, что лучше всего использовать репликацию на основе операторов, независимо от того, что говорится в документации о параметрах уровня базы данных и уровня таблицы.

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

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