Лабораторная работа №2
-
Настройка Master-Slave репликации в MySQL
-
Исходные данные
-
-
Хост №1 (mysql1) - будущий master, ОС FreeBSD, СУБД MySQL 5.0, существующая база replica;
-
Хост №2 (mysql2) - будущий slave, ОС FreeBSD, СУБД MySQL 5.0.
СУБД на обоих хостах запущены и работают.
-
Задание
Настроить репликацию базы replica на хосте mysql1 на хост mysql2 в режиме master-slave.
-
Порядок действий
Первым делом необходимо включить “Бинарный журнал” на master-сервере. Это файл, в котором регистрируются все изменения данных. Однако, операторы update и delete, которые не затронули ни одной строки — регистрироваться в журнале не будут. Включение журнала немного понижает общую производительноть СУБД, но не сильно, примерно на 1%. Но, в случае падения сервера, этот журнал может быть использован для “автоматического восстановления после сбоя”. Для включения “Бинарного журнала” необходимо отредактировать конфигурационный файл сервера MySQL - my.cnf.
По умолчанию, при установке сервера MySQL из портов этот файл не участвует в конфигурации сервера (его нет в директории запуска). Примеры файла конфигурации присутствуют в директории документации /usr/local/share/mysql в нескольких видах: my-large.cnf, my-medium.cnf, my-small.cnf – соответственно для большей, средней и малой базы данных.
В соответствии с конкретным случаем размера базы данных выбирается файл, переименовывается в my.cnf и копируется в директорию запуска /var/db/mysql/. Одно только включение в работу этого файла уменьшает запрашиваемую память в 6 раз.
-
На хосте mysql1
Переходим в каталог /usr/local/share/mysql
Переименовываем файл my-large.cnf в файл my.cnf
В файле конфигурации MySQL my.cnf:
-
Отключаем параметр skip-networking
-
Добавляем параметры:
server-id=1
log-bin=bin.log
Этих параметров достаточно для того чтобы организовать репликацию всех баз данных, хранящихся на сервере MySQL. server-id является обязательным параметром, это идентификатор базы. Каждый сервер в схеме репликаци должен иметь уникальный номер. Master-хост должен иметь номер 1. На подчиненном (slave) сервере этот параметр будет равен 2. Параметр slave-compressed разрешает сжимать поток данных передаваемых по сети, что позволяет повысить скорость передачи данных.
Для экономии ресурсов сервера, в MySQL можно организовать выборочную репликацию баз данных. Параметр binlog-do-db позволяет указать серверу на основе какой базы данных необходимо формировать отчет ее изменений. Параметр binlog-ignore-db позволяет указать игнорируемые при репликации базы данных. Для выполнения нашего задания необходимы следующие строки:
binlog-do-db=replica
binlog-ignore-db=mysql
binlog-ignore-db=test
Копируем файл my.cnf в директорию /var/db/mysql
Перезапускаем демон mysqld.
#/usr/local/etc/rc.d/mysql-server restart
Проверяем работу организованного нами master-сервера.
В консоли MySQL вводим следующую команду:
#mysql -u root -p
Создаем базу данных replica:
mysql> create database replica;
Необходимо узнать номер журнала и смещение данных от начала файла. Для этого выполняем запрос:
mysql> USE replica;
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.
Для подключения подчиненных серверов создаём на master-хосте пользователя с полномочиями на репликацию:
mysql> GRANT SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD ON *.* TO replica IDENTIFIED BY 'repl_pass';
mysql> FLUSH PRIVILEGES;
Далее создаём дамп реплицируемой базы (для этого сначала перейдем на другую консоль ALT+F2 и авторизуемся там как root):
#mysqldump -u root -p replica > replica.dump
И переносим этот дамп на slave-хост:
Скопируем файл replica.dump в директорию usr/home/strafe
Нажимаем F9, затем выбираем Right или Left, после “Shell link”. Набираем строку strafe@172.16.20.## (где ## - адрес мастера)
Пароль: awnstion
Внимание. Блокировка таблиц будет снята, если выйти из консоли MySQL. Для создания дампа базы и переноса его на slave-хост следует использовать другую пользовательскую сессию (ALT+F2).
После выполнения всех операций на slave-хосте в консоле MySQL разблокируем таблицы:
mysql> UNLOCK TABLES;