вторник, 24 марта 2015 г.

Добавление Mysql-slave сервера в репликацию

На мастер сервере

В конфиге (/etc/my.cnf) прописываем, в секции [mysqld]:
log-bin
binlog_format=mixed
server-id = 1

Перезагружаем mysql:
service mysqld restart

Дальше подключаемся к mysql:
mysql -h <master-server> -b <database> -u <user> -p

Заводим пользователя под которым будет подключаться slave:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'<slave-server>' IDENTIFIED BY 'password';

Запрещаем запись в таблицы:
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;

Смотрим текущий файл и позицию binlog`а:
SHOW MASTER STATUS \G
Запоминаем их.

Заходим в другую консоль и делаем дамп базы:
mysqldump --databases <database> --opt  > <dump_filename>

Возвращаемся в предыдущую консоль и включаем обратно запись в базу:
SET GLOBAL read_only = OFF; 
Можно отключаться.

Копируем дамп на вторичный сервер:
scp <dump_filename> <slave-server>:<dump_filename>

На slave-сервере

В конфиге (/etc/my.cnf) прописываем, в секции [mysqld]:
log-bin 
server-id       = 2 
master-host     = <master-server> 
master-user     = repl 
master-password = password

Перезагружаем mysql:
service mysqld restart

Подключаемся к mysql:
mysql -h <slave-server> -b <database> -u <user> -p

Заводим пользователя для репликации:
GRANT REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY 'password';

В другой консоли восстанавливаем базу из дампа:
cat <dump_filename> | mysql -h <slave-server> -u <user> -p

Возвращаемся в консоль с подключенным mysql, и останавливаем slave:
SLAVE STOP;

Прописываем текущую позицию binlog`а подсмотренную на мастер-сервере:
CHANGE MASTER TO MASTER_HOST = "<master-server>", MASTER_USER = "repl", MASTER_PASSWORD = "password", MASTER_LOG_FILE = "<binlog_filename>", MASTER_LOG_POS = <binlog_position>;

Стартуем slave: SLAVE START;

И проверяем заработала ли репликация: SHOW SLAVE STATUS \G

Всё.

P.S. Копировать пользователей нужно отдельно.

Комментариев нет:

Отправить комментарий