Настройка репликации в Mysql 5.6
После выхода mysql 5.6 с его GTID (global transaction identifier) репликация в mysql перестала быть кошмарным сном сисадмина и стала вполне рабочим инструментом. В инете есть некоторое количество информации по этому поводу, но вся она довольно разрозненная и не всегда доступна для понимания. По этому я решил сделать небольшую инструкцию-выжимку, больше для себя, но может и еще кому пригодится.
Настройка мастера
У меня довольно тепличные условия, и база пустая, дамп будем вливать после настройки
my.cnf
binlog-format=ROW
Бывает трех видов — STATEMENT, MIXED и ROW
В двух словах — statement пишет в бинлог по сути sql запросы. Преимущества — старый формат, оттестированный, лог небольшой, можно посмотреть запросы. Недостатки — проблемы с функциями и триггерами, запросы вида update user set a=1 order by rand (), а так же еще некоторые могут некорректно отрабатываться. ROW если совсем упрощенно — пишет в логи измененные бинарные данные. Преимущества — отлично логируются все виды запросов. Недостатки — огромный лог.Ну и mixed — промежуточный формат, который старается использовать statement, когда возможно, а когда нет — row. Говорят, что глючит на каких то очень сложных запросах. Именно его я и рискнул использовать
binlog-checksum=crc32
Новая фича mysql5.6, вроде как ускоряет работу бинлога
gtid-mode=on
Собственно и включает ту самую GTID mode репликацию
enforce-gtid-consistency=true
Запрещает все, что может поломать транзакции.
log-slave-updates=true
В родной документации написано: указывает подчиненному серверу, чтобы тот вел записи об обновлениях, происходящих на подчиненном сервере, в двоичном журнале. По умолчанию эта опция выключена. Ее следует включить, если требуется организовать подчиненные серверы в гирляндную цепь.
server-id = 1
Уникальный номер для каждого сервера
ну и не забываем указать что именно мы будем реплицировать —
replicate-do-db = mybase
replicate-do-table=mybase.mytable1
replicate-do-table=mybase.mytable2
После этого необходимо создать пользователя mysql с правами репликации. Например так GRANT replication slave ON *.* TO «replication»@'192.168.1.102' IDENTIFIED BY 'password';
На этом настройка мастера закончена. Вливаем дамп и в бой)
Настройка слейва
В простейшем варианте на слейв можно скопировать тот же конфиг, что и на мастере, единственное что — нужно сменить server_id, например на 2.
Перезапускаем слейв, и запускаем репликацию
change master to master_host='192.168.1.1», master_auto_position=1, Master_User=«replication», master_password=«password';
start slave;
и любуемся
show slave status \G