РОИ / лабораторная работа_3
.docЛабораторная работа №3
Настройка Master-Master репликации в MySQL
Исходные данные
-
Хост №1 (mysql1) - будущий master1 и slave2, СУБД MySQL 5.0, существующая база replica;
-
Хост №2 (mysql2) - будущий slave1 и master2, СУБД MySQL 5.0.
СУБД на обоих хостах запущены и работают.
Требуется
Настроить репликацию базы replica на хосте mysql1 на хост mysql2 в режиме master-master.
Порядок действий
На хосте mysql1
Переходим в каталог /usr/local/share/mysql
Переименовываем файл конфигурации my-huge.cnf в my.cnf с помощью команды
cp my-huge.cnf my.cnf
Копируем файл my.cnf в директорию var/db/mysql
В файле my.cnf:
-
Отключаем параметр skip-networking
-
Добавляем параметры:
server-id=1
log-bin=bin.log
Перезапускаем демона.
В каталоге usr/local/etc/rc.d
./mysql-server restart
В консоли MySQL создаём на master-хосте №1 пользователя с полномочиями на репликацию:
mysql –u root –p
пароль: pin05
Необходимо узнать номер журнала и смещение данных от начала файла. Для этого выполняем запрос:
mysql> CREATE database replica;
mysql> USE replica;
mysql> GRANT REPLICATION SLAVE ON *.* TO replica IDENTIFIED BY 'slave';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK; - блокируем запись в данную таблицу
mysql> SHOW MASTER STATUS;
+--------------+-----------+--------------------+------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------+-----------+--------------------+------------------------+
| bin.000002 | 98 | replica | mysql,test |
+--------------+-----------+--------------------+------------------------+
Запоминаем параметры File и Position.
Переходим на вторую панель: Alt+F2
Login:root
Password:syncmaster
Далее создаём дамп реплицируемой базы:
#mysqldump –u root –p replica > replica.dump
И переносим этот дамп на master-хост №2.
Скопируем файл replica.dump в директорию usr/home/strafe
Нажимаем F9, затем выбираем Right или Left, после “Shell link”. Набираем строку strafe@172.16.20.## (где ## - адрес мастера)
Пароль: awnstion
Внимание. Блокировка таблиц будет снята, если выйти из консоли MySQL. Для создания дампа базы и переноса его на master-хост №2 следует использовать другую пользовательскую сессию (ALT+F2).
Возвращаемся на первую панель Alt+F1. Выходим из mysql:
mysql> quit.
На хосте mysql2
Создаём базу replica и наполняем её из дампа с master-хоста №1:
mysqladmin –u root –p create replica
mysql –u root –p replica < replica.dump
Переходим в каталог /usr/local/share/mysql
Переименовываем файл конфигурации my-huge.cnf в my.cnf с помощью команды
cp my-huge.cnf my.cnf
Копируем файл my.cnf в директорию var/db/mysql
В файле конфигурации MySQL (/var/db/mysql/my.cnf):
-
Отключаем параметр skip-networking
-
Добавляем параметры:
log-bin=bin.log
server-id=2
master-host=172.16.20.##
master-user=replica
master-password=slave
master-connect-retry=60
Перезапускаем демона.
В каталоге usr/local/etc/rc.d
./mysql-server restart
Затем запускаем процесс репликации в консоли MySQL (используя параметры File и Position с master-хоста №1):
mysql –u root –p
mysql> use replica;
mysql> SLAVE STOP;
mysql> CHANGE MASTER TO
-> MASTER_HOST='172.16.20.##',
-> MASTER_USER='replica',
-> MASTER_PASSWORD='slave',
-> MASTER_LOG_FILE='bin.000002',
-> MASTER_LOG_POS=98;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
Убеждаемся в том, что параметры Slave_IO_Running и Slave_SQL_Running установлены в Yes.
На данном этапе, фактически была настроена Master-Slave репликация базы replica с хоста mysql1 на хост mysql2.
Перезапускаем демона.
В каталоге usr/local/etc/rc.d
./mysql-server restart
В консоли MySQL создаём на master-хосте №2 пользователя с полномочиями на репликацию:
mysql –u root –p
mysql> USE replica;
mysql> GRANT REPLICATION SLAVE ON *.* TO replica1 IDENTIFIED BY 'slave';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------ ------+----------+--------------------+-----------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------- -----+----------+--------------------+-----------------------+
| bin.000006 | 98 | replica | mysql,test |
+------- -----+----------+--------------------+-----------------------+
Запоминаем параметры File и Position.
Возвращаемся к хосту mysql1
В консоли MySQL разблокируем ранее блокированные таблицы:
mysql> UNLOCK TABLES;
В файл конфигурации MySQL (/var/db/mysql/my.cnf) добавляем параметры:
master-host=172.16.20.@@ (где @@ - адрес слейва)
master-user=replica1
master-password=slave
master-connect-retry=60
Перезапускаем демона.
В каталоге usr/local/etc/rc.d
./mysql-server restart
Затем запускаем процесс репликации в консоли MySQL (используя параметры File и Position с master-хоста №2):
mysql –u root –p
mysql> SLAVE STOP;
mysql> CHANGE MASTER TO
-> MASTER_HOST='172.16.20.@@',
-> MASTER_USER=replica1,
-> MASTER_PASSWORD='slave',
-> MASTER_LOG_FILE='bin.000006',
-> MASTER_LOG_POS=98;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
Убеждаемся в том, что параметры Slave_IO_Running и Slave_SQL_Running установлены в Yes.
Проверка
-
В БД replica создаем таблицу. В таблицу вносим 5 записей.
2. На хосте mysql2 переходим в базу данных replica посылаем запрос на выборку всех данных из таблицы (имя таблицы из шага1). Убедиться, что сама таблица и все пять записей были реплицированы.
3. На хосте mysql2 переходим в БД replica. В нашу таблицу вносим еще 5 записей.
4. На хосте mysql1 переходим в БД replica. Посылаем запрос на выборку всех данных из таблицы (имя таблицы из шага 3). Должны появиться все 10 записей.
Вопросы.
Определите преимущества и недостатки master-master репликации по сравнению с master-slave.