Задний план: У меня есть два сервера 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 ), но периодически проблемы сохраняются.
ЗАКЛЮЧИТЕЛЬНОЕ ПРИМЕЧАНИЕ
Хм ... Вам также придется придумать способ обработки / различения автоматически увеличивающихся ключей и полей. Выглядит интересно ..http://mysql-mmm.org/
cmiiw Я думал, что вы сможете создать базу данных на master1 и master2 без изменения конфигурации или остановки ведомого устройства, но убедитесь, что репликация master - master запущена. поскольку вы не определяете, какую базу данных необходимо реплицировать, это означает, что вся база данных будет реплицирована, если вы не определите ее в my.cnf.