# Главная
# О библиотеке

# Выбор дистрибутива
преимущества Linux/UNIX | основные дистрибутивы | серверный Linux | BSD | LiveCDs | прочее

# Установка и удаление программ
общие вопросы | каталоги софта | специальные случаи

# Настройка и работа
установка, загрузчики | настройка Linux | консоль | файловые системы | процессы | шеллы, русификация, коммандеры | виртуальные машины, эмуляторы

# X Window и оконные менеджеры
настройка X Window | GNOME | KDE | IceWM и др.

# Работа с текстами
редакторы | офис | шрифты, кодировки и русификация | преобразования текстовых файлов | LaTeX, SGML и др. | словари

# Графика
GIMP | фото | обработка изображений | форматы графических файлов

# Сети, администрирование
общие вопросы | Dialup & PPP | брандмауэры | маршрутизация | работа в Windows-сетях | веб-серверы | Apache | прокси-серверы | сетевая печать | прочее

# Программирование
GCC & GNU make | программирование в UNIX | графические библиотеки | Tcl | Perl | PHP | Java & C# | СУБД | CVS | прочее

# Ядро
# Мультимедиа
# Интернет
# Почта
# Безопасность
# Железо
# Разное

# Linux HowTo (как сделать)
# Книги и руководства
# Материалы на английском языке


MySQL The World's Most Popular Open Source Database # Online shop | Site map |  
CompanyProductsSupport & ConsultingTraining & CertificationDownloadsDocumentation
  BooksArticlesMailing ListsPresentationsOther Sites  
Search the MySQL manual:
MySQL Manual
  • 4 Администрирование баз данных
    • 4.10 Репликация в MySQL
      • 4.10.1 Введение
      • 4.10.2 Как реализована репликация: обзор
      • 4.10.3 Как настроить репликацию
      • 4.10.4 Возможности репликации и известные проблемы
      • 4.10.5 Опции репликации в файле `my.cnf'
      • 4.10.6 SQL-команды, относящиеся к репликации
      • 4.10.7 Часто задаваемые вопросы по репликации
      • 4.10.8 Поиск неисправностей репликации

Buy this Reference Manual in softcover from Barnes & Noble!

MySQL Reference Manual
Previous / Next / Up / Table of Contents

4.10.5 Опции репликации в файле `my.cnf'

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

Не следует забывать о том, что ветвь 4.0 все еще находится в стадии альфа-разработки, поэтому некоторые функции могут работать не так гладко, как хотелось бы. Новые возможности, появившиеся в 4.0, рекомендуется использовать так, чтобы в случае возникновения проблемы не нарушилась работа приложения.

Как на головном, так и на подчиненном серверах нужно использовать опцию server-id. Она устанавливает уникальный идентификатор репликации. Нужно выбрать уникальное значение из диапазона от 1 до 2^32-1 для каждого головного и подчиненного сервера, например: server-id=3

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

Опция Описание
log-bin=filename Указывает местоположение двоичного журнала обновлений, в котором будут вестись записи. Обратите внимание: если передаваемый параметр имеет расширение (например log-bin=/mysql/logs/replication.log), то в случае вызова команды FLUSH LOGS версии MySQL ниже 3.23.24 не будут правильно работать во время репликации. Эта проблема устранена в версии 3.23.25. Теперь, если используется такой способ определения имени журнала, команда FLUSH LOGS для двоичных журналов будет игнорироваться. Для очистки журнала выполните команду FLUSH MASTER и не забудьте запустить команду FLUSH SLAVE на всех подчиненных серверах. В версии 3.23.26 или выше нужно использовать для этого команды RESET MASTER и RESET SLAVE
log-bin-index=filename Так как пользователь может выполнять команду FLUSH LOG, нужно знать, какой журнал является активным в настоящее время, а также какие журналы использовались ранее и в какой последовательности они сменялись. Эта информация сохранена в индексном файле двоичного журнала, имя которого по умолчанию `имя_хоста.index'. Имя и содержимое данного файла не следует изменять. Пример: log-bin-index=db.index
sql-bin-update-same Если включена данная опция, то при установке значения переменной SQL_LOG_BIN это же значение будет автоматически установлено и для переменной SQL_LOG_UPDATE, и наоборот.
binlog-do-db=database_name Указывает головному серверу, что он должен вести записи об обновлениях в двоичном журнале, если текущая база данных - database_name. Все другие базы данных игнорируются. Обратите внимание: при использовании этой опции вы должны быть уверены, что обновления будут производиться только в текущей базе данных. Пример: binlog-do-db=sales
binlog-ignore-db=database_name Указывает головному серверу, что если текущая база данных - database_name, то записи об обновлениях не должны вестись в двоичном журнале. Обратите внимание: при использовании этой опции вы должны быть уверены, что обновления будут производиться только в текущей базе данных. Пример: binlog-ignore-db=accounting

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

Опция Описание
master-host=host Имя хоста головного сервера или IP-адрес для репликации. Если значение этой опции не установлено, поток подчиненного сервера не будет запущен. Обратите внимание: установка master-host будет игнорироваться, если существует корректный файл `master.info'. Возможно, лучше было бы назвать эти опции как-нибудь иначе, что-то вроде bootstrap-master-host, но менять их имена уже поздно. Пример: master-host=db-master.mycompany.com
master-user=username Имя пользователя, которое подчиненный сервер будет использовать для аутентификации при подсоединении к головному серверу. Пользователь должен иметь привилегию FILE. Если пользователь головного сервера не установлен, будет использовано имя пользователя test. Если удастся считать значение из файла `master.info', то оно будет иметь больший приоритет. Пример: master-user=scott
master-password=password Пароль, который будет использоваться при подсоединении подчиненного сервера к головному серверу. Если этот пароль не установлен, будет использоваться пустой пароль. Если удастся считать значение из файла `master.info,' то оно будет иметь больший приоритет. Пример: master-password=tiger
master-port=portnumber Порт, который слушает головной сервер. Если не он не установлен, используется откомпилированная установка MYSQL_PORT. Это должно быть значение 3306, если оно не было изменено при помощи опций configure. Если удастся считать значение из файла `master.info', то оно будет иметь больший приоритет Пример: master-port=3306
master-connect-retry=seconds Время ожидания в секундах для потока подчиненного сервера перед повторением попытки установить связь с головным сервером в случае прекращения работы головного сервера или потери связи. По умолчанию - 60. Пример: master-connect-retry=60
master-ssl Доступна для версий выше 4.0.0. Включает SSL для репликации. Это относительно новая опция, поэтому применять ее следует осторожно. Пример: master-ssl
master-ssl-key Доступна для версий выше 4.0.0. Имя файла-ключа SSL на головном сервере. Используется только в том случае, если включена опция master-ssl. Пример: master-ssl-key=SSL/master-key.pem
master-ssl-cert Доступна для версий выше 4.0.0. Имя файла-сертификата SSL. Используется только в том случае, если включена опция master-ssl. Пример: master-ssl-key=SSL/master-cert.pem
master-info-file=filename Местоположение файла, в который записывается информация о том, где на головном сервере произошла остановка во время выполнения репликации. По умолчанию это файл `master.info' в директории данных. Изменять это местоположение нет необходимости. Пример: master-info-file=master.info
report-host Доступна для версий выше 4.0.0. Имя хоста или IP-адрес подчиненного сервера, который передается головному серверу во время регистрации подчиненного сервера. Может быть выведен командой SHOW SLAVE HOSTS. Не устанавливайте эту опцию, если не хотите, чтобы подчиненный сервер регистрировался на головном сервере. Обратите внимание: для того, чтобы головной сервер установил соединение с подчиненным сервером, ему недостаточно просто получить IP-адрес подчиненного сервера из соединения. Из-за NAT и других проблем маршрутизации IP-адрес может быть недопустимым для подсоединения головного сервера или других хостов к подчиненному серверу. Пример: report-host=slave1.mycompany.com
report-port Доступна для версий выше 4.0.0. Порт для соединения с подчиненным сервером, имя хоста или IP-адрес которого были переданы головному серверу при регистрации подчиненного сервера. Порт нужно устанавливать лишь в том случае, когда подчиненный сервер слушает порт, который задан не по умолчанию, или если имеется специальный тоннель от головного сервера или других клиентов к подчиненному серверу. Не используйте эту опцию, если не уверены в своих действиях.
replicate-do-table=db_name.table_name Сообщает подчиненному серверу, что он должен реплицировать только указанную таблицу. Для указания более чем одной таблицы директиву следует использовать несколько раз, по одному разу для каждой таблицы. В отличие от replicate-do-db, данную опцию можно применять для обновлений, в которых используется несколько баз данных. Пример: replicate-do-table=some_db.some_table
replicate-ignore-table=db_name.table_name Указывает подчиненному серверу, что указанная таблица не должна реплицироваться. Для указания более чем одной таблицы директиву следует задавать несколько раз, по одному разу для каждой таблицы. В отличие от replicate-do-db, данную опцию можно применять для обновлений, в которых используется несколько баз данных. Пример: replicate-ignore-table=db_name.some_table
replicate-wild-do-table=db_name.table_name Указывает подчиненному серверу, что реплицироваться должны только таблицы, удовлетворяющие указанному шаблону. Для указания более чем одной таблицы директиву следует задавать несколько раз, по одному разу для каждой таблицы. Данную опцию можно применять для обновлений, в которых используется несколько баз данных. Пример: при использовании replicate-wild-do-table=foo%.bar% будут реплицироваться обновления только таблиц с именами, начинающимися с ``bar'', которые находятся в базах данных, с именами, начинаются с ``foo''.
replicate-wild-ignore-table=db_name.table_name Указывает подчиненному серверу, что к таблицы, удовлетворяющие указанному шаблону, реплицироваться не должны. Для указания более чем одной подлежащей игнорированию таблицы директиву следует задавать несколько раз, по одному разу для каждой таблицы. Данную опцию можно применять для обновлений, в которых используется несколько баз данных. Например, при использовании replicate-wild-do-table=foo%.bar% не будут реплицироваться обновления всех таблиц, начинающихся на ``bar'', в базах данных, имена которых начинаются на ``foo''.
replicate-ignore-db=database_name Сообщает подчиненному серверу, что указанная база данных реплицироваться не должна. Чтобы указать более одной базы данных, директиву следует использовать несколько раз, по одному разу для каждой базы данных. Эта опция не будет работать при обновлениях, охватывающих несколько баз данных. Если же такие обновления необходимо произвести, убедитесь, что у вас установлена версия MySQL 3.23.28 или выше и используйте replicate-wild-ignore-table=db_name.%. Пример: replicate-ignore-db=some_db
replicate-do-db=database_name Сообщает подчиненному серверу, что реплицироваться должна только указанная база данных. Чтобы указать более одной базы данных, директиву следует использовать несколько раз, по одному разу для каждой базы данных. Эта опция не будет работать при обновлениях, охватывающих несколько баз данных. Если же такие обновления необходимо произвести, убедитесь, что у вас установлена версия MySQL 3.23.28 или выше и используйте replicate-wild-do-table=db_name.%. Пример: replicate-do-db=some_db
log-slave-updates Указывает подчиненному серверу, чтобы тот вел записи об обновлениях, происходящих на подчиненном сервере, в двоичном журнале. По умолчанию эта опция выключена. Ее следует включить, если требуется организовать подчиненные серверы в гирляндную цепь.
replicate-rewrite-db=from_name->to_name Обновления производятся не в подлинную базу данных, а в базу данных с именем, указанным в опции. Пример: replicate-rewrite-db=master_db_name->slave_db_name
slave-skip-errors= [err_code1,err_code2,... | all] Доступна только в версии 3.23.47 и выше. Сообщает потоку подчиненного сервера, что он должен продолжать репликацию, если запрос возвращает ошибку, указанную в списке. Обычно при возникновении ошибки выполнение реплицирование прекращается, чтобы пользователь мог вручную исправить несоответствия в данных. Не используйте данную опцию, если вы до конца не разобрались в причинах возникновения ошибок. Если не было допущено ошибок при установке репликации, нет ошибок в клиентских программах и нет никаких ошибок непосредственно в MySQL, то прекращения работы из-за ошибки происходить не должно. Неразборчивое применение данной опции может привести к тому, что подчиненный сервер окажется безнадежно не синхронизированным с головным сервером, и вы будете тщетно ломать себе голову над тем, каким образом это случилось. Код ошибок можно получить в сообщениях об ошибках в журнале ошибок и в выводе команды SHOW SLAVE STATUS. Полный список сообщений об ошибках можно найти в файле исходного дистрибутива `Docs/mysqld_error.txt'. Можно также (но не нужно) использовать значение all (хотя этого делать настоятельно не рекомендуется) - тогда будут игнорироваться все сообщения об ошибках и за процессом переброски данных наблюдения не будет. Само собой разумеется, при использовании этой опции целостность данных ставится под угрозу. В этом случае просьба не жаловаться, если данные на подчиненном сервере не будут соответствовать данным на головном сервере, - вас предупреждали. Пример: slave-skip-errors=1062,1053 или slave-skip-errors=all
skip-slave-start Указывает компьютеру, на котором установлен подчиненный сервер, что при его запуске не должен запускаться подчиненный сервер. Пользователь может запустить его позже при помощи команды SLAVE START.
slave_net_timeout=# Время ожидания (в секундах) дополнительных данных от головного сервера, после чего чтение будет прервано.

User Comments

Posted by kit chen on Monday September 16 2002, @1:42pm[Delete] [Edit]

If you're attempting to use both
replicate-do-db=from_name
and
replicate-rewrite-db=from_name->to_name
be aware that you need to actually say
replicate-do-db=to_name
because the rewrite rule apparently happens before
the do-db rule.

thanks to Therion on opn/freenode for
troubleshooting this with me.

Posted by Michael Babcock on Friday November 8 2002, @9:03am[Delete] [Edit]

I was about to post the same comment, but as it
applies to replicate-wild-do-table.

replicate-wild-do-table = LocalTableName.%
replicate-rewrite-db = RemoteTableName ->
LocalTableName

Posted by Ken Allan on Monday November 25 2002, @5:51pm[Delete] [Edit]

Be really careful with the use of the
replicate-wild-do-table=db_name.% configuration
option. In 4.0.4, this option caused updates to
any specified tables to not work for me.

I had read in the documentation that this was
needed for cross database updates, but it was
causing my same database updates to fail.

I had the following options set in my slave my.cnf:
server-id = 16
master-host = 64.xx.xx.xx
master-user = replicator
master-password = *****
replicate-wild-do-table = banner.%
replicate-do-db = banner
report-host = 64.xx.xx.xx

Also, worth mentioning is that there seems to be
some limit in the server-id's, initially i set my
server-id to 15001 and this caused replication to
fail silently to even start up. Changed it to 16,
and it works perfectly, all this despite the
alleged limit of 2^32-1.

Posted by Raul Deschamps on Thursday February 20 2003, @2:33pm[Delete] [Edit]

Hi
I'm not an american so... what does daisy-chain means?

Hope somebody can post the answer

Posted by Paul Becker on Sunday February 23 2003, @11:54am[Delete] [Edit]

"daisy-chain" means to connect one to another, then that one to yet another, and so on. For example, 1 connects to 2, 2 connects to 3, 3 connects to 4...

Paul

Add your own comment.

Top / Previous / Next / Up / Table of Contents
# MySQL.com home | Site map | Contact us | Press | Jobs | Privacy policy | Trademark info | © 1995-2003 MySQL AB. All rights reserved.