Навигация
Системное Администрирование Решения на открытых кодах Структура сети Компьютерные сети малых предприятий Сеть с централизованным управлением Управление с помощью групповых политик Организация почтового обслуживания Взаимодействие с глобальной сетью Безопасность Виртуализация Парядок настройки и определения неисправностей Средства управления системами Автоматизация установки программного обестичения Решение проблем с компьютером Разное
 
 
Избранное
Pathping. Traceroute на стероидах.
FreeNAS: создаём сетевое хранилище (NAS)
Iperf - утилита для тестирования пропускной способности сети.
Средство против «сетевой слепоты»
Преимущества и недостатки RAID 6
Дисковые массивы RAID
Надежнее, чем RAID 5
Унификация корпоративных коммуникаций
Exchange и SAN: не все так просто
Cisco против Meru
 
 
Решения на открытых кодах » Linux - Настраиваем репликацию MySQL в Fedora 10

В этой статье я покажу как настраивается реплакация баз в MySQL. MySQL репликация позволяет вам иметь точную копии базы, находящейся на главном сервере (master) на вторичном (slave) сервере. Все измениния в базе на мастере немедленно передаются на слейв. В общем случае репликация не предназначена для резервного копирования, так как операция удаления также реплицируется, но репликация может помочь в случае выхода из строя оборудования. В данном руководстве я буду использовать операционную систему Fedora 10 на обоих серверах.

Для настройки репликации существуют несколько различных путей, но я использую именно этот. В данном руководстве будут использованы следующие обозначения серверов:

  • server1.example.com (IP 192.168.0.100): master
  • server2.example.com (IP 192.168.0.101): slave

Я буду реплицировать базу exampledb с сервера server1.example.com (master) на сервер server2.example.com (slave).

Подразумевается, что MySQL уже установлен и работает на обоих серверах. База exampledb с таблицами и данными расположена на мастере, и ещё не существует на слейве.

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

server1:

Для начала мы создадим директорию для лог файлов MySQL:

mkdir /var/log/mysqlchown mysql:mysql /var/log/mysql

Теперь мы отредактируем  конфигурационный файл /etc/my.cnf; мы должны сообщить MySQL для какой базы необходимо писать логи ( эти данные будут использованы слейв сервером для того, чтобы видеть изменения на мастере), какой лог файл должен быть для этого использован, и мы должны указать что этот MySQL сервер является мастером.

vi /etc/my.cnf
[mysqld][...]log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb
server-id=1
[...]

Теперь перезапускаем MySQL:

/etc/init.d/mysqld restart

Далее залогинимся в MySQL под рутом и создадим пользователя с правами на репликацию:

mysql -u root -p

Enter password:

Находясь в MySQL шелле, введите следующие команды.

STOP SLAVE;GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';
FLUSH PRIVILEGES;

Далее там же введите:

USE exampledb;FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Последняя команда выдаст примерно такой результат, он нам понадобиться позднее:

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

Не выходите из шелла MySQL, иначе будет снята блокировка базы.  Откройте ещё одно окно шелла, где мы создадим дамп Mysql  базы и передадим его на server2 используя  scp:

cd /tmp
mysqldump -u root -pyourrootsqlpassword --opt exampledb > snapshot.sql
scp snapshot.sql root@192.168.0.101:/tmp

После этого, второе окно можно закрыть. А в первом разблокируйте базу и покиньте MySQL.

UNLOCK TABLES;quit;

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

server2:

Теперь нам необходиом сказать MySQL на слейве, что он слейв, что его мастер находится на 192.168.0.100, и что база данных, которую мы реплицируем - exampledb. Отредактируем /etc/my.cnf:

vi /etc/my.cnf
[mysqld][...]server-id=2
master-host=192.168.0.100
master-user=slave_user
master-password=slave_password
master-connect-retry=60
replicate-do-db=exampledb
[...]

Перезапускаем MySQL:

/etc/init.d/mysqld restart

Создадим пустую базу данных exampledb (убедитесь что вы запустили STOP SLAVE; для остановки всех слейв процессов, если они запущены):

mysql -u root -p

Введите пароль:

STOP SLAVE;CREATE DATABASE exampledb;
quit;

Теперь импортируем дамп SQL snapshot.sql:

cd /tmpmysql -u root -pyourrootsqlpassword exampledb < snapshot.sql

Потом опять подключаемся к MySQL ...

mysql -u root -p

Вводим пароль:

... и запускаем следующую команду::

CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;

Наконец запускаем слейв:

START SLAVE;

Проверяем статус сервера:

SHOW SLAVE STATUSG

Обратите внимание на значение Slave_IO_Running и Slave_SQL_Running. Значение обоих параметров должно быть Yes, в противном случае что то пошло не так, и необходимо смотреть в /var/log/mysqld.log в поисках ошибок:

mysql> SHOW SLAVE STATUSG*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 98
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: exampledb
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)mysql>

Выходим из MySQL на  server2:

quit;

На этом все. После любых обновлений базы exampledb на мастере, все изменения немедленно будут реплицированы на слейв.

Источник: howtoforge.com




 
 
 
 
Поиск по сайту
Google Поиск


Яндекс поиск
 
 
Полезное
 
 
 
 
 
systemzone.ru 2014