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

Привожу пример настройки репликации на другой сервер, с учетом того что ранее на этих серверах подобное не делалось.

Итак, для настройки полной репликации вашего MySQL-сервера, необходимо на короткое время остановить главный SQL сервер.

Удостоверьтесь, что на главном и подчиненном(ых) серверах установлена свежая версия MySQL. Используйте версию не ниже 3.23.29. В предыдущих релизах применялся другой формат двоичного журнала и содержались ошибки, которые были исправлены в более новых релизах.

Установите на главном сервере отдельного пользователя для репликации с привилегией FILE (в версиях MySQL ниже 4.0.2) или REPLICATION SLAVE в более новых версиях MySQL. У этого пользователя должно быть также разрешение подсоединяться со всех подчиненных серверов. Если пользователь будет выполнять только репликацию (рекомендую), то ему не нужно предоставлять какие-либо дополнительные привилегии. Например, чтобы создать пользователя с именем replic, который может иметь доступ к головному серверу с любого хоста, можно использовать такую команду:

mysql> GRANT FILE ON *.* TO replic@"%" IDENTIFIED BY '<password>'; # главный < 4.0.2
 
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@"%" IDENTIFIED BY '<password>'; # главный >= 4.0.2

Если вы планируете использовать LOAD TABLE FROM MASTER или LOAD DATA FROM MASTER (доступные с версии 4.0.0), вам также надо выделить привилегии RELOAD и SUPER на главном сервере для вышеуказанного пользователя.

Если вы используете MyISAM-таблицы, сохраните содержимое и заблокируйте модифицирующие запросы командой FLUSH TABLES WITH READ LOCK.

mysql> FLUSH TABLES WITH READ LOCK;

только после этого — снимите образ данных на вашем главном сервере.

Легче всего это сделать создав при помощи tar архив всей своей директории данных. Точное местоположение директории данных зависит от вашей инсталляции. К примеру:

# tar -cvf /backup_disk/mysql-snapshot.tar /db_disk/mysql

Пользователи Windows для создания архива каталога данных могут использовать WinZIP или другую удобную для них программу.

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

mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+-------------------------------+
| File          | Position | Binlog_do_db | Binlog_ignore_db              |
+---------------+----------+--------------+-------------------------------+
| mysql-bin.002 | 72       | test,bar     | foo,manual,sasha_likes_to_run |
+---------------+----------+--------------+-------------------------------+
1 row in set (0.06 sec)

Столбец File дает имя журнала, Position дает информацию о смещении в журнале (позиции). В этом примере имя журнала — mysql-bin.002 и смещение — 72. Запишите эти значения — они вам понадобятся чуть позже, когда будете настраивать подчиненный сервер.

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

mysql> UNLOCK TABLES;

Если вы используете таблицы InnoDB, то в идеале было бы хорошо, чтобы вы использовали ПО InnoDB Hot Backup. Она берет целостный снимок без установки каких-либо блокировок на головном сервере, и сохраняет имя журнала и позицию непосредственно в снимке, что позволит в дальнейшем использовать эту информацию на подчиненном сервере. Более подробная информация об этой программе доступна на http://www.innodb.com/hotbackup.html.

Без использования этой утилиты, наиболее быстрый способ получить снимок таблиц InnoDB — это остановить головной сервер и скопировать файлы данных, журналы, и файлы определений формата таблицы (.frm). Для сохранения текущего имени файла журнала и смещения, вам следует выполнить следующее перед остановкой сервера:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

Затем сохранить имя журнала и смещение из вывода команды SHOW MASTER STATUS. После этого остановите сервер без снятия блокировок с таблиц. Это нужно сделать именно так, чтобы быть уверенным, что сервер остановится именно с тем снимком, который мы сделали:

# mysqladmin -uroot shutdown

Если головной сервер был ранее запущен без опции log-bin, то значения имени файла журнала и позиции будут пустыми в выводе SHOW MASTER STATUS. В этом случае, сохраните пустую строку (») как имя файла журнала и 4 как позицию.

В /etc/my.cnf на головном сервере добавьте к разделу [mysqld] записи log-bin и server-id=уникальный номер и перезапустите сервер. Очень важно, чтобы номер подчиненного сервера отличался от номера главного сервера. Можно считать, что server-id играет роль IP-адреса — он уникально идентифицирует сервер среди участников репликации.

[mysqld]
log-bin
server-id=1

Добавьте в my.cnf на подчиненном сервере(ах) следующий фрагмент:

server-id=<некоторое уникальное число между 2 и 2^32-1>

заменяя значения в <> значениями, соответствующими вашей системе. Значения server-id должны быть различными на каждом сервере, участвующем в репликации. Если значение server-id не определено, оно будет установлено в 1, если также не определено значение master-host, оно будет установлено в 2. Обратите внимание, что если значение server-id опущено, то головной сервер будет отказывать в соединении всем подчиненным серверам, а подчиненный сервер — отказывать в соединении головному серверу. Таким образом, опускать установку значения server-id можно лишь в случае резервного копирования с использованием двоичного журнала.

Когда подчиненный сервер будет работать, заставьте его забыть старую конфигурацию репликации, если он использовался в репликации раньше:

mysql> RESET SLAVE;

Скопируйте данные снимка в директорию данных на подчиненном сервере (ах). Удостоверьтесь в правильности привилегий для файлов и каталогов. Пользователь, от имени которого запускается MySQL, должен иметь возможность читать и записывать данные в них так же, как и на головном сервере.

Перезапустите подчиненный(ые) сервер(ы).

Когда подчиненные сервера запустятся, выполните:

mysql> CHANGE MASTER TO MASTER_HOST='<имя хоста главного сервера>',
 
 MASTER_USER='<имя пользователя репликации>',
 MASTER_PASSWORD='<пароль репликации>',
 MASTER_LOG_FILE='<записанное вами имя журнала>',
 MASTER_LOG_POS=<записанная вами позиция>;

заменяя значения в <> значениями, соответствующими вашей системе.

Запустите поток подчиненного сервера:

mysql> SLAVE START;

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

Если не установлен идентификатор server-id для подчиненного сервера, в журнальный файл регистрации ошибок будет внесена следующая ошибка:

Warning: one should set server_id to a non-0 value if master_host is set.
The server will not act as a slave.

(Предупреждение: если задан master_host, следует установить server_id в ненулевое значение. Сервер не будет работать как подчиненный сервер.)

Если не установлен идентификатор главного сервера, подчиненные серверы не смогут подключиться к головному серверу.

Если подчиненный сервер по какой-либо причине не может выполнять репликацию, соответствующие сообщения об ошибках можно найти в журнале регистрации ошибок на подчиненном сервере.

После того как подчиненный сервер начнет выполнять репликацию, в той же директории, где находится журнал регистрации ошибок, появится файл master.info. Файл master.info используется подчиненным сервером для отслеживания того, какие записи двоичных журналов главного сервера обработаны. Не удаляйте и не редактируйте этот файл, если не уверены в том, что это необходимо. Даже если такая уверенность есть, все равно лучше использовать команду CHANGE MASTER TO.

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

Надеюсь данная информация была кому-то полезна.

Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:

http://noted.org.ua/?p=1767


Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)

Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455

На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел

Add your comment now

You must be logged in to post a comment.