В предыдущей статье был описан процесс настройки репликации на более низкий версиях MySQL. С версии 5.7, процесс немножко изменился.
1) Открываем на каждом сервере фай my.cnf (посмотреть где он, можно при помощи команды :
|
root@zeus:~ # ps -aux | grep mysql mysql 92401 0,0 0,0 17104 2436 - Is 5:24 0:00,04 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/local/etc/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --pid-file=/var/db/mysql/zeus.pid --use mysql 93865 0,0 4,4 2078892 369796 - S 5:24 6:09,86 /usr/local/libexec/mysqld --defaults-extra-file=/usr/local/etc/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --plugin-dir=/usr/local/lib/mysql/plugin --user= root 58846 0,0 0,0 18844 2144 1 S+ 9:21 0:00,00 grep mysql |
И изменяем/добавляем следующие строчки:
|
bind-address = 0.0.0.0 #слушаем все ИП log_bin = mysql-bin.log #куда пишем бинарный логи binlog_do_db = radme_rep #база для бинарных логов slave-skip-errors = 1062 #пропускаем ошибки дубликатов ID если вдруг будут. Дубликаты исключаем разными автоинскрементами expire_logs_days = 5 #сколько дней храним бинарный логи expire-logs-days = 5 #встречается и такой синтаксис auto-increment-increment = 3 #автоинскремент для счетчиков. На разных серверах нужен разный. Обычно если два, то на первом 2, на втором 3 auto-increment-offset = 1 #сдвиг автоинскремента. Можно тоже разный на серверах. Цель - чтоб ID в таблицах были уникальные на каждом сервере binlog-ignore-db = mysql #игнорируем для репликации binlog-ignore-db = sys #игнорируем для репликации binlog-ignore-db = performance_schema #игнорируем для репликации binlog-ignore-db = information_schema #игнорируем для репликации server-id=2 #разный для каждого сервера |
На каждом сервере найдем файл auto.cnf (на FreeBSD он /var/db/mysql/auto.cnf), и и убедимся, что server-uuid разный. Если вдруг одинаковые — поменяем (36 символов!, лучше если менять то конечные числа и с опаской!)
Перезапустим MySql
|
service mysql-server restart |
2) На каждом сервере создадим пользователя, от которого будет происходить репликация
|
create user 'replicator'@'%' identified by 'password'; grant replication slave on *.* to 'replicator'@'%'; |
3) На каждом сервере выполним, команду, чтоб увидеть текущий статус репликации
|
root@localhost [(none)]> SHOW MASTER STATUS; +------------------+----------+---------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+---------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------+ | mysql-bin.000008 | 3019073 | radme_rep,radme_rep | mysql,sys,performance_schema,information_schema,mysql,sys,performance_schema,information_schema | c2cc8aab-dfaa-11e7-a13b-90e2baa24e6c:1-4443 | +------------------+----------+---------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------+ 1 row in set (0.01 sec) |
На каждом сервере создаем задание мастер репликацию друг на друга, и запускаем собственно репликацию:
Сервер 1
|
CHANGE MASTER TO MASTER_HOST='10.20.0.41', MASTER_USER='replicator', MASTER_PORT=3306, MASTER_PASSWORD='password', MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master1'; START SLAVE FOR CHANNEL "master1"; |
Сервер 2
|
CHANGE MASTER TO MASTER_HOST='10.20.0.41', MASTER_USER='replicator', MASTER_PORT=3306, MASTER_PASSWORD='password', MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master2'; START SLAVE FOR CHANNEL "master2"; |
Смотрим как идет репликация:
Если нужно приостановить репликацию:
|
STOP SLAVE FOR CHANNEL "master2"; |
Если нужно удалить репликацию:
|
RESET SLAVE; RESET MASTER; RESET SLAVE ALL; |