Поиск по этому блогу

вторник, 31 мая 2011 г.

Настройка репликации в MySQL

На главном сервере (мастере).
Правим файл /etc/mysql/my.cnf (my.ini – если MySQL сервер работает под Windows):
[mysqld]
# уникальный ID сервера
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
# База, которая будет реплицироваться
binlog_do_db           = test_db
Перезапускаем mysql:
/etc/init.d/mysql restart (net stop mysql, net start mysql – под Windows)
Создаем пользователя replication (10.0.0.2 – адрес slave сервера) с паролем slave_password с правами на репликацию:
mysql -u root
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.0.0.2' IDENTIFIED BY 'slave_password';
FLUSH PRIVILEGES;
Смотрим статус мастера (пример):
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      107 | test_db      |                  |
+------------------+----------+--------------+------------------+
1 row in set
Выгружаем данные из БД:
mysqldump -u root -p --single-transaction --master-data --flush-logs test_db > test_db.sql
Копируем полученный файл test_db.sql на slave сервер.


На slave сервере (реплике):
Правим test_db.sql. Находим строчку
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin. 000003’, MASTER_LOG_POS=107;
и удаляем ее. Сохраняем файл.
Правим файл /etc/mysql/my.cnf на реплике:
[mysqld]
# ID slave должен отличаться от главного сервера
server-id              = 2
binlog_do_db           = test_db
relay-log              = /var/log/mysql/mysqld-relay-bin.log
Перезапускаем сервер:
/etc/init.d/mysql restart
Останавливаем репликацию:
mysql> stop slave;
mysql> reset slave;
Задаем параметры репликации:
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107, MASTER_HOST='10.0.0.1', MASTER_USER='replication', MASTER_PASSWORD='slave_password', MASTER_CONNECT_RETRY=60;
P.S. Вообще-то как я читал, предыдущую команду можно было прописать в test_db.sql (вместо удаления строчки), но у меня не сработало
Загружаем
данные:

mysql -u root < test_db.sql
Запускаем репликацию:
mysql> start slave;
Смотрим статус репликации:
mysql> show slave status;
Параметры  Slave_IO_Running, Slave_SQL_Running должны быть равны yes.
Для проверки репликации меняем что-нибудь на мастере (создать таблицу, добавить записей и т.п.) и смотрим изменения на реплике.

Комментариев нет:

Отправить комментарий