Окт 30 2008

Настройка репликации MySQL

Настройку репликации начинаем с сервера-мастера, первым делом необходимо указать в /var/db/mysql/my.cnf(для версий MySQL<5.1) или в /usr/local/etc/my.cnf:

#Запись всех запросов в бинлог
log-bin
#Идентификатор сервера
#Идентификатор сервера я формирую из IP сервера
#убрав точки
server-id       = 8925234107

Теперь переходим к клиенту, у него в my.cnf необходимо указать server-id:

server-id       = 8925234110

Теперь мы делаем дамп данных на сервере — что бы поместить их на слейве, при этом, если вам нужна репликация только одной базы, то необходимо сдампить только ее, а в my.cnf на слейве добавить(в нашем примере база hilik):

replicate-do-db=hilik

Если вдобавок нужно исключить ряд таблиц из репликации впишем в my.cnf такие записи(исключаем из репликации таблицу node_stat), каждую таблицу и запись надо описать отдельной записью:

replicate-wild-ignore-table=hilik.node_stat

После тога как внесены все изменения, рестарутем mysql сервер на будущем мастере и слейве.
Теперь приступаем к дампу данных. В первую очередь, в случае, если у нас происходит активная работа с mysql, необходимо засечь приблизительно время, когда мы начали дампить данные, это нужно, что бы потом можно было отметить по бинлогу позицию с которой начинать реплицировать данные, а приблизительно, потому что, все равно надо будет взять позицию минут на 5-10 раньше начала дампа. Приступаем к дампу:
1. Дампим все данные(будет полная репликация):

mysqldump -A -uroot -p >dump.sql

2. Дампим базу hilik:

mysqldump -uroot -p hilik >dump.sql

После того как данные сдамплены копируем дамп на слейв и вставляем их:

mysql -uroot -p <dump .sql

или если мы дампили одну базу hilik, то:

mysql -uroot -p hilik<dump .sql


Теперь можно приступать к точке с которой нужно начинать репликацию. На сервере мастере, заходим в /var/db/mysql/, в этом каталоге у нас появился как минимум один файл такого вида:

sh-bin.000001

так файл называется потому, что hostname у сервера на котором стоит mysql, sh.hilik.org.ua, соответсвенно имена бинлогов в вашем случае будут именоваться в соотвествии с хостнеймом вашего сервера. Определившись с именем бинлога приступаем к определению позиции репликации. Делается это с помощью утилиты mysqlbinlog. В том случае если, бинлог мы только включили и он единственный, вопросов никаких не возникает:

mysqlbinlog sh-bin.000001|less

при выполнении этой команды появятся подобные строки:

#081030 13:19:22 server id -1  end_log_pos 562  Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1225365562/*!*/;
UPDATE phpbb_config SET
                        config_value = '375aXXXMMMed4ef6NNN2d272'
                        WHERE config_name = 'rand_seed'
/*!*/;
# at 562
#081030 13:19:22 server id -1  end_log_pos 873  Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1225365562/*!*/;
INSERT INTO phpbb_sessions
                        (session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in, session_admin)
                        VALUES ('b49fb2BBBBXXXX322c8fZZZZ', -1, 100536667, 1765369961, '58UUUUU', 0, 0, 0)
/*!*/;

Из преведенного на экране нас интересует только дата, время и запись сходная с «at 562». В нашем случае 562 определяет позицию в бин-лог файле, запроса который выполнялся 30-го октября 2008 в 13:19:22, так мы можем определиться с какой позиции стартовать репликацию.
На мастере выполняем:

mysql -uroot -p

И в появившейся командной строке:

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'89.252.34.110' IDENTIFIED BY 'slave-333';

При выполнении приведенной строки, следует заменить на свои параметры:
1. ‘slave’@’89.252.34.110’ — slave здесь имя пользователя для авторизации на репликацию, 89.252.34.110 — ip адрес сервера слейва
2. slave-333 — пароль для авторизации на репликацию
Теперь переходим непосредственно к слейву.
Запускаем mysql:

mysql -uroot -p

И в появившейся командной строке делаем:

CHANGE MASTER TO MASTER_HOST='89.252.34.107', MASTER_USER='slave', MASTER_PASSWORD='slave-333', MASTER_LOG_FILE='sh-bin.000001', MASTER_LOG_POS=562;

Здесь необходимо указать вместо:
1. MASTER_HOST=’89.252.34.107′ — указать ip своего мастера
2. MASTER_USER=’slave’ — указать пользователя для репликации
3. MASTER_PASSWORD=’slave-333′ — указать пароль для репликации
4. MASTER_LOG_FILE=’sh-bin.000001′ — указать имя бинлога в котором находится начальная точка, с которой должна стартовать репликация
5. MASTER_LOG_POS=562 — позиция в мастер бинлог файле.
После этого можно в консоли mysql сделать:

SLAVE START;

и проверить состояние слейва:

SHOW SLAVE STATUS;

если мы увидели подобное:

| Waiting for master to send event | 89.252.34.107 | slave   |        3306 |            60 | sh-bin.000001 |            10710 | sh1-relay-bin.000001 |      10724 | sh-bin.000001       | Yes              | Yes

Значит репликация у нас установилась.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By Evgeniy Chepurnoy, 19.05.2009 @ 14:48

    При задании параметра —master-data для mysqldump не надо будет возится с выковыриванием позиции в бинлоге на момент дампа — она будет автоматически добавлена в дамп файл в виде
    CHANGE MASTER TO MASTER_LOG_FILE=’sh-bin.000001′, MASTER_LOG_POS=562;
    после чего в дамп файле останется только прописать MASTE_HOST, MASTER_USER, MASTER_PASSWORD и спокойно заливать его в сервер.

  • By hilik, 20.05.2009 @ 17:33

    Спасибо. При следующем переносе обязательно попробую такой способ.

Other Links to this Post


Украинская Баннерная Сеть