Настраиваем репликацию Mysql по схеме master-slave

Суть данной репликации, в том что у вас есть постоянная копия всех баз Mysql. При любых изменения на местер сервере с Mysql, все операции (в том числе удаление), передаются в режиме реального времени на вторичный сервер. Кстати именно при такой схеме удобно делать бэкап БД, с вторичного сервера, обяснять почему думаю излишне.

Итак данную настройку я буду делать имея в наличии два сервера с установленной ОС CentOS 5.4 и Mysql 5.0.77.

Сервер-мастер – 10.0.0.1

Сервер-слейв – 10.0.0.2

База данных которую мы синхронизируем находится на мастере и называется testDB, на вторичном сервере ее нет.

Начнем с настройки мастера.

1.Создадим папку для лог-файла Mysql.

# mkdir /var/log/mysql
# chown mysql:mysql /var/log/mysql

2. Отредактируем конфигурационный файл Mysql, my.cnf.

# vi /etc/my.cnf

Добавим, следующии строки в поле [mysqld]

server-id=1 (Значение указывает на то что это мастер)
log_bin=/var/log/mysql/mysql-bin.log (Где лежат логи)
expire_logs_days=7 (Сколько времени хранить логи, после чего они будут ротированы)
binlog-do-db=testDB (Указваем базу которую хотим реплицировать)

3. Перезапускаем Mysql

# service mysqld restart

4. Залогиниваемся в Mysql и создаем пользователя для нашей репликации

# mysql -u root -p
mysql>STOP SLAVE;
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘repadmin’@'%’ IDENTIFIED BY ‘указываем пароль’;
mysql>FLUSH PRIVILEGES;
mysql>USE testDB; (выбираем бд testDB)
mysql>FLUSH TABLES WITH READ LOCK; (заблокируем базу)

5. Из Mysql не выходим, из шелла тоже не выходим, иначе база разблокируется. Открываем новое окно шелла. Теперь снимим дамп нашей БД.

# cd /tmp

Снимем дамп базы

# mysqldump -u root -p –opt testDB > testdb.sql

Скопируем полученный дамп на вторичный сервер

# scp testdb.sql root@10.0.0.2:/tmp

После того как скопировали, возращаемся к окну с Mysql.

Разблокируем базу.

mysql>UNLOCK TABLES;

Из Mysql опять не выходим, он нам еще пригодится.

Приступим к настройке вторичного сервера.

1. Отредактируем my.cnf

# vi /etc/my.cnf

[mysqld]
server-id=2 (Данное значение указывает на то что, это вторичный сервер)
master-host=10.0.0.1 (ip-адрес мастера)
master-user=repadmin (имя пользователя для репликации)
master-password=пароль пользователя
master-connect-retry=60
replicate-do-db=testDB

2. Перезапускаем Mysql

# service mysqld restart

3. Создадим пустую базу testDB и имортируем туда наш снятый ранее с мастера дамп нашей БД.

Подключимся к Mysql и создадим базу testDB

# mysql -u root -p
mysql>STOP SLAVE;
mysql>CREATE DATABASE testDB;
mysql>quit;

# cd /tmp
# mysql -u root -p testDB < testdb.sql

4. Возращаемся к Mysql на мастере. (вы ведь не отключились от Mysql?, если да то подключитесь снова)

Вводим команду

mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 92 | testDB | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
mysql>

В данном случае нам необходимо запомнить вот эти данные – mysql-bin.000001 | 92, ибо они нам еще пригодятся для настройки слейва ниже

5. Подключаемся к Mysql на слейве

# mysql -u root -p

Синхронизируем базы

mysql> CHANGE MASTER TO MASTER_HOST=’192.168.0.100′, MASTER_USER=’repadmin’, MASTER_PASSWORD=’пароль юзера repadmin’, MASTER_LOG_FILE=’mysql-bin.000001′, MASTER_LOG_POS=92;

Стартуем Mysql в режиме слейв

mysql> start slave;

Все репликация пошла, для проверки вводим команду

mysql> show slave status \G;

Обратите внимание на строки в таблице, которую вам выдаст Mysql

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Как вы поняли если все нормально, должно стоять YES, если NO, то репликация не началась.

При возникновении проблем попробуйте сбросить параметры слейва на Mysql, на вторичном сервере, командой reset slave;

Статья взята с itpad.ru


Понравилась статья? Поделись с остальными.

Комментарии закрыты.