Сегодня разбирался с настройкой репликации в mysql-5.6 версии, на данный момент меня все порадовало, нет идиотизма с запоминанием позиции, не нужно ничего останавливать или блокировать на запись и делать прочие шаманства.
В версии mysql-5.6 появилось несколько “плюшек”, которые помогают если нужно – жить проще и легче. Вся настройка репликации master-slave в моем случае сводится к банальным шагам:
1.Создаю юзера для репликации и прописываю в my.cnf мастер сервера настройки репликации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# mysql> grant replication slave on *.* to 'replicator'@'192.168.1.1' identified by 'password'; # mysql> flush privileges; [mysqld] server-id = 1 binlog-format=MIXED binlog-checksum=crc32 gtid-mode=on enforce-gtid-consistency=true log-slave-updates=true relay-log=/var/log/mysql/mysqld-relay-bin log_bin = /var/log/mysql/mysql-bin.log expire_logs_days=3 auto_increment_increment=2 auto_increment_offset=1 |
2. Передергиваю mysql и запускаю делаться дамп:
1 |
mysqldump --all-databases --single-transaction --triggers --routines |gzip -c| ssh admin@server.com 'cat >/home/admin/all-DB.sql.gz' |
Пока делается дамп, иду на сервак который будет slave и настраиваю его, по сути конфиг будет тот же что и на master, разница в server-id и auto_increment_offset
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server-id = 2 binlog-format=MIXED binlog-checksum=crc32 gtid-mode=on enforce-gtid-consistency=true log-slave-updates=true slave-skip-errors = 1062 relay-log=/var/log/mysql/mysqld-relay-bin log_bin = /var/log/mysql/mysql-bin.log expire_logs_days=3 auto_increment_increment=2 auto_increment_offset=2 |
После чего перезапускаю mysql на slave сервере.
3. После того как дамп завершится, на слейве запускаю ресториться дамп:
1 2 |
mysql -e 'SET GLOBAL log_bin_trust_function_creators = 1;' zcat /home/admin/all-DB.sql.gz|mysql -uroot -p |
4. После успешного восстановления дампа иду в mysql и прописываю настройки репликации для подключения к мастеру:
1 |
change master to master_host='192.168.1.1', master_auto_position=1, Master_User='replicator', master_password=’password'; |
5. Ну и стартуем слейвовый поток:
1 |
mysql> start slave; |
6. Проверяем что все хорошо и реплика побежала:
1 |
mysql -uroot -p -e 'show slave status \G;'|grep Slave |
В ответе должны увидеть такое:
В зависимости от размера базы и свежести дампа – начальная синхронизация данных может занять время.