Потребовалось развернуть репликацию на MySQL для того чтобы распределить нагрузку на один очень загруженный комп. Для этого есть:
Разлогиниваемся:
- Сервера master.company.com (192.168.10.2) и slave01.company.com (192.168.10.3)
- Две базы данных portal и temp
- Статья на хабре за 2009 http://habrahabr.ru/post/56702/,с тех пор мало что изменилось, но есть ряд недомолвок со стороны автора и синтаксис работы с командной строкой mysql немного изменился с тех пор (как впрочем и владелец, но это уже совсем другая история)
Настройки на MASTER
Подправим конфиг на мастере:mcedit /etc/mysql/my.confВ секции [mysqld] добавим строки:
server-id = 1 # это уникальный идентификатор для каждой базыИзменим доступность сервера исправив строку:
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = portal
replicate-do-db = temp
bind-address = 127.0.0.1на
bind-address = *Авторизуемся из под root в mysql:
mysql -u root -pСоздадим пользователя и выдадим ему права на работу с репликами:
CREATE USER rep;Рестартуем базу:
GRANT replication slave ON *.* TO rep@'%' IDENTIFIED BY "rep";
/etc/init.d/mysql restart
Настройки на SLAVE
Подправим конфиг:
mcedit /etc/mysql/my.confВ секции [mysqld] добавим строки:
server-id = 2 # это уникальный идентификатор для каждой базыИзменим доступность сервера исправив строку:
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = portal
replicate-do-db = temp
bind-address = 127.0.0.1на
bind-address = *Рестартуем базу:
/etc/init.d/mysql restart
Переносим данные с MASTER на SLAVE
/// Сейчас мы выполняем команды с MASTER
Авторизуемся из под root в mysql:
mysql -u root -pЗаблокируем базу:
FLUSH TABLES WITH READ LOCK;Отобразить статус:
SET GLOBAL read_only = ON;
SHOW MASTER STATUS;Запомним колонки File (например mysql-bin.000003) и Position (например 243).
Разлогиниваемся:
QUIT;Делаем дамп баз данных:
mysqldump -u root -p portal > portal.dumpСнова авторизуемся в mysql:
mysqldump -u root -p temp > temp.dump
mysql -u root -pКопируем дампы с MASTER на SLAVE, например через scp:
SET GLOBAL read_only = OFF;
QUIT;
scp portal.dump tux@slave01.company.com:/home/tuxВосстанавливаемся из бэкапов (на SLAVE):
scp temp.dump tux@slave01.company.com:/home/tux
mysql -u root -pСкажем нашему рабу брать данные с мастера:
CREATE DATABASE portal;
CREATE DATABASE temp;
QUIT;
mysql -u root -p portal < portal.dump
mysql -u root -p temp< temp.dump
mysql -u root -p
CHANGE MASTER TO MASTER_HOST = "192.168.10.2", MASTER_USER = "rep", MASTER_PASSWORD = "rep", MASTER_LOG_FILE = "mysql-bin.000003", MASTER_LOG_POS = 243;
Запустим репликацию:
START SLAVE;Смотрим статус репликации:
SHOW SLAVE STATUS;Из статьи на хабре понятно, что нам важны всего несколько колонок, а именно:
Slave_IO_State: Waiting for master to send eventЕсли у Вас это присутствует - значит всё прошло нормально.
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 5
Комментариев нет:
Отправить комментарий