Репликация mySQL — параметры и команды (рус.) maina (26.12.2007, 00:37)

Добавить пост в: Google slashdot YahooMyWeb Digg Technorati Delicious Забобрить эту страницу! Добавить на Newsland.ru Добавить на СМИ2 Добавить на RUmarkz Добавить на Ваау! Добавить на rucity.com Добавить в закладки МоёМесто.ru
Параметры репликации для master и slave серверов + команды для управления и мониторинга репликаций mysql.

Источник: http://www.botik.ru/~rldp/mysql/mysqladm/replicat.htm

MASTER - сервер

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

ОпцияОписание
log-bin=filenameЗаписывать в двоичный файл регистрации модификаций filename. Обратите внимание, что, если Вы задаете этот параметр с расширением (например, log-bin=/mysql/logs/replication.log) версии до 3.23.24 не будут работать корректно, если Вы делаете FLUSH LOGS. Проблема была исправлена в версии 3.23.25. Если Вы используете этот вид имени файла регистрации, команды FLUSH LOGS будут игнорироваться. Чтобы очистить файл регистрации, выполните FLUSH MASTER на главной системе и FLUSH SLAVE на всех подчиненных. В версии 3.23.26 и в более поздних Вы должны использовать RESET MASTER и RESET SLAVE
log-bin-index=filenameПоскольку пользователь мог бы выдавать команду FLUSH LOGS Вы должны знать, который файл регистрации является в настоящее время активным. Эта информация сохранена в двоичном индексном файле регистрации. Значение по умолчанию `hostname`.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=some_database.
binlog-ignore-db=database_name Сообщает главной системе, что модификации, где текущая база данных является database_name, НЕ должны быть сохранены в двоичном файле регистрации. Обратите внимание, что, если Вы используете эту опцию, Вы должны гарантировать, что делаете модификации только в текущей базе данных. Например: binlog-ignore-db=some_database
slave-compressed = 1 разрешить сжимать поток

SLAVE - сервер

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

ОпцияОписание
master-host=host Имя хоста или IP-адрес главной системы. Если не задано, подчиненный не будет работать вообще. Например: master-host=joker.botik.ru.
master-user=username Пользователь под именем которого надо связываться с главной системой. Пользователь должен иметь привилегию FILE. Если не задано, принимается пользователь test. Например: master-user=alexmv.
master-password=password Пароль для пользователя из предыдущего параметра. По умолчанию принимается пустой пароль. Например: master-password=pupsik.
master-port=portnumber Порт для связи с главной системой. Если не задан, принимается компилируемая установка MYSQL_PORT. Если Вы не меняли опции configure, это будет 3306. Например: master-port=3306.
master-connect-retry=seconds Число секунд, которые подчиненный будет бездействовать перед повторением попытки восстановить связь с главной системой в случае ее обрыва. Значение по умолчанию 60. Например: master-connect-retry=60.
master-sslВключить поддержку SSL. Например: master-ssl.
master-ssl-keyИмя файла с ключем SSL для главной системы. Например: master-ssl-key=SSL/master-key.pem.
master-ssl-certИмя файла с сертификатом SSL для главной системы. Например: master-ssl-key=SSL/master-cert.pem.
master-info-file=filenameРасположение файла, который хранит данные о ходе процесса репликации. Значение по умолчанию master.info в каталоге данных. Например: master-info-file=master.info.
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-ignore-db. Например: replicate-ignore-table=db_name.some_table.
replicate-wild-do-table=db_name.table_name Сообщает, чтобы подчиненная система ограничила репликацию таблицами, которые соответствуют определенному образцу подстановочных знаков. Чтобы определять больше, чем одну таблицу, используйте директиву несколько раз, по одному для каждой таблицы. Это будет работать для модификаций с перекрестной базой данных. Например: replicate-wild-do-table=foo%.bar% будет копировать только модификации к таблицам во всех базах данных, которые начинаются с foo и только для таблиц, имена которых начинаются с bar.
replicate-wild-ignore-table=db_name.table_name Противоположно предыдущей опции.
replicate-ignore-db=database_nameСообщает, чтобы подчиненная система не копировала определенную базу данных. Чтобы определять больше, чем одну базу, используйте директиву несколько раз, по одному для каждой. Эта опция не будет работать, если Вы используете перекрестные модификации базы данных. Если Вы нуждаетесь в перекрестных модификациях базы данных, следует удостовериться, что Вы имеете версию 3.23.28 или позже, и использовать replicate-wild-ignore-table=db_name.%. Например: replicate-ignore-db=some_db.
replicate-do-db=database_nameСообщает, чтобы подчиненная система ограничила репликацию определенной базой данных. Чтобы определять больше, чем одну базу, используйте директиву несколько раз, по одному для каждой. Эта опция не будет работать, если Вы используете перекрестные модификации базы данных, то есть под запретом оказываются запросы типа UPDATE some_db.some_table SET foo='bar' при выборе иной база или не выбрано никакой. Если Вы нуждаетесь в перекрестных модификациях базы данных, следует удостовериться, что Вы имеете версию 3.23.28 или позже, и использовать replicate-wild-do-table=db_name.%. Например: replicate-do-db=some_db.
log-slave-updatesСообщает, чтобы подчиненная система регистрировала модификации из подчиненного процесса в двоичном файле регистрации. По умолчанию Off.
replicate-rewrite-db=from_name->to_name Обновлять базу данных с именем, отличным от первоначального. Например: replicate-rewrite-db=master_db_name->slave_db_name.
skip-slave-startСообщает, чтобы подчиненная система не запускалась как подчиненная. Пользователь может запустить это позже с помощью SLAVE START.
slave_read_timeout=#Число секунд, которое надо ждать перед разрывом связи.

Команды SQL, относящиеся к репликации

Реликация может контролироваться через интерфейс SQL.

КомандаОписание
SLAVE STARTЗапустить подчиненный (Slave) поток.
SLAVE STOPВыключить подчиненный (Slave) поток.
SET SQL_LOG_BIN=0Отключает регистрацию модификации, если пользователь имеет привилегию process.
SET SQL_LOG_BIN=1Заново запускает регистрацию модификации, если пользователь имеет привилегию process.
SET SQL_SLAVE_SKIP_COUNTER=nПропустить следующие n событий от главной системы. Работает только, если подчиненный не запущен, иначе выдает ошибку. Полезно при ремонте сбоев.
RESET MASTERУдаляет все двоичные файлы регистрации, перечисленные в индексном файле, очищая индексный файл binlog. В версиях до 3.23.26 называлась FLUSH MASTER
RESET SLAVEПодчиненный забывает позицию репликации в главных файлах регистрации. В версиях до 3.23.26 называлась FLUSH SLAVE
LOAD TABLE tblname FROM MASTERЗагрузить копию таблицы с главной системы на подчиненную
CHANGE MASTER TO master_def_listИзменяет параметры для значений, определенных в master_def_list и перезапускает подчиненный процесс. master_def_list представляет собой разделенный запятыми список master_def, где master_def один из элементов следующего перечня: MASTER_HOST, MASTER_USER, MASTER_PASSWORD, MASTER_PORT, MASTER_CONNECT_RETRY, MASTER_LOG_FILE, MASTER_LOG_POS. Например:
CHANGE MASTER TO
  MASTER_HOST='master2.mycompany.com',
  MASTER_USER='replication',
  MASTER_PASSWORD='bigs3cret',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master2-bin.001',
  MASTER_LOG_POS=4;
Вы должны определить только значения, которые должны быть изменены. Значения, которые Вы опускаете, останутся теми же самыми, за исключением того случая, когда Вы изменяете главный компьютер или порт. В этом случае подчиненный считает, что, так как Вы соединяетесь с другим главным компьютером или иным портом, главная система поменялась. Следовательно, старые значения файла регистрации и позиции больше неприменимы и будут автоматически сброшены к пустой строке и 0 соответственно (это значения начала). Обратите внимание, что, если Вы перезапускаете подчиненный сервер, то он будет помнить последний главный сервер. Если это не нужно, Вы должны удалить файл master.info прежде, чем выполнить перезапуск, и подчиненный будет читать данные на главный сервер из файла my.cnf или из командной строки.
SHOW MASTER STATUSОбеспечивает информацию состояния binlog главной системы.
SHOW SLAVE STATUSОбеспечивает информацию состояния существенных параметров подчиненной системы.
SHOW MASTER LOGS Вносит в список двоичные протоколы на главной системе. Доступно с версии 3.23.28. Вы должны использовать эту команду до PURGE MASTER LOGS TO.
PURGE MASTER LOGS TO lognameУдаляет все файлы регистрации репликаций, которые перечислены в индексе файла регистрации как находящиеся до определенного файла регистрации, и затем удаляет их из индекса файла регистрации так, чтобы данный файл регистрации теперь стал первым. Доступно с версии 3.23.28. Пример:
PURGE MASTER LOGS TO mysql-bin.010
Эта команда ничего не будет делать, если Вы имеете дело с активным подчиненным сервером, который в настоящее время читает один из файлов регистрации, которые Вы пробуете удалять. Команда безопасна для выполнения в то время, когда все подчиненные копируют данные. Сначала выясните, какие файлы обрабатывает каждый подчиненный командой SHOW SLAVE STATUS, затем выясните очередь протоколов на главной системе командой SHOW MASTER LOGS, найдите самый старый протокол на подчиненных, зарезервируйте все подготовленные к удалению протоколы, если считаете это необходимым, и удалите все старые протоколы.
FLUSH TABLES WITH READ LOCK 
gtar zcf /tmp/backup.tar.gz /var/lib/mysql (или разновидность данной команды) 
SHOW MASTER STATUS - удостоверьтесь в том что вывод этой команды сохранен - он пригодится позже 
UNLOCK TABLES 
Теги: mysql, репликация, master, slave, доки, документация.

Комментарии (в обратном порядке, новые в начале)

hate:
28.12.2007, 23:58
Да в целом то понятно... Че-та типа RAID'а тока для баз данных... :)

gcc:
28.12.2007, 23:26
maina
ага... вот именно вот это:
- Масштабирумость системы. Это отдельный разговор, его мы как нибудь затронем, но с помощью разных видов репликаций можно достигать почти горизонтальной масштабируемости, когда при N увеличении компьютеров в вашем кластере, скорость работы вашего сервиса увеличивается “почти” в N раз. Я говорю почти, потому что кроме самой базы данных, ещё много других “бутылочных горлышек” и связывающий канал между вашими серверами — тоже отдельная песня.
позволит ему понять для чего это :)

maina:
26.12.2007, 18:57
Репликация позволяет решать несколько очень важных задач — это повышение доступности и надёжности хранения данных. Итак, что даёт нам репликация?
 
- Резервное копирование в режиме online.
- Высокая надёжность хранения данных. Если один сервер по каким либо причинам повредился и данные потерялись, то у нас всегда будет зекрало базы.
- Высокая доступность системы. В случае, если один сервер перестал работать, мы может переключить наших клиентов на другой сервер, туда, куда призводилась репликация.
- Масштабирумость системы. Это отдельный разговор, его мы как нибудь затронем, но с помощью разных видов репликаций можно достигать почти горизонтальной масштабируемости, когда при N увеличении компьютеров в вашем кластере, скорость работы вашего сервиса увеличивается “почти” в N раз. Я говорю почти, потому что кроме самой базы данных, ещё много других “бутылочных горлышек” и связывающий канал между вашими серверами — тоже отдельная песня.

anzor:
26.12.2007, 18:24
Для меня это тёмный лес с буреломами.
Научиться управлять базами данных MySQL или просто понять суть, используя данную информацию тяжеловато. Гораздо легче воспользоваться видео-уроками, пару раз посмотрел и уже более твёрдое представление как настроить на сервере базу MySQL.
Вот к примеру видео-урок "Как работать с базами данных"
http://share.blog.wlan/?d=89529072447727197f0506
Можно смотреть и сразу повторять все действия самому.

Мориквэндо:
26.12.2007, 18:02
Я понимаю, что это
Параметры репликации для master и slave серверов + команды для управления и мониторинга репликаций mysql.
Но  для чего это?