В этой статье я покажу как настраивается реплакация баз в 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
Разное
Качественная и быстрая раскрутка сайта новейшими вирусными технологиями.
Вам не дает покоя мысль о том, что в интернете можно заработать большие деньги не выходя из дома? SEO-блог про заработок в интернете поможет вам сделать первые шаги в манимейкерстве. Следите за обновлениями.
2 комментов оставлено (Add 1 more)