Настраиваем репликацию Mysql по схеме master slave
Настраиваем репликацию Mysql по схеме master-slave
Суть этого репликации является то, ,что у вас есть постоянный копии всех баз данных MySQL. Передающиеся на все изменения на сервер Mysql Местер, все операции (включая удаление) в режиме реального времени на сервер-получатель. Кстати, под таким режимом, практически резервную копию базы данных на вторичный сервер, obyasnyat почему я думаю. Так этот параметр, я с наличием двух серверов с установленной операционной системой CentOS 5.4 и Mysql 5.0.77 делать. Делаем следующее: [-hide-]Сервер-мастер – 10.0.0.1 Сервер-слейв – 10.0.0.2 База данных которую мы синхронизируем находится на мастере и называется testDB, на вторичном сервере ее нет. Начнем с настройки мастера. 1.Создадим папочку для лог-файлика Mysql. # mkdir /var/log/mysql # chown mysql:mysql /var/log/mysql 2. Отредактируем конфигурационный файлик Mysql, my.cnf. # vi /etc/my.cnf Добавим, следующии строчки в поле [mysqld] server-id=1 (Значение указывает на то ,что это мастер) log_bin=/var/log/mysql/mysql-bin.log (Где лежат логи) expire_logs_days=7 (Сколько времени хранить логи, после чего они будут ротированы) binlog-do-db=testDB (Указваем базу которую хотим реплицировать) 3. Перезапускаем Mysql # service mysqld restart 4. Залогиниваемся в Mysql и создаем пользователя для нашей репликации # mysql -u root -p mysql>STOP SLAVE; mysql>GRANT REPLICATION SLAVE ON *.* TO 'repadmin'@'%' IDENTIFIED BY 'указываем пароль'; mysql>FLUSH PRIVILEGES; mysql>USE testDB; (выбираем бд testDB) mysql>FLUSH TABLES WITH READ LOCK; (заблокируем базу) 5. Из Mysql не выходим, из шелла тоже не выходим, иначе база разблокируется. Открываем новое окно шелла. Теперь снимим дамп нашей БД. # cd /tmp Снимем дамп базы # mysqldump -u root -p –opt testDB > testdb.sql Скопируем полученный дамп на вторичный сервер # scp testdb.sql root@10.0.0.2:/tmp После того как скопировали, возращаемся к окну с Mysql. Разблокируем базу. mysql>UNLOCK TABLES; Из Mysql опять не выходим, он нам еще пригодится. Приступим к настройке вторичного серверы. 1. Отредактируем my.cnf # vi /etc/my.cnf [mysqld] server-id=2 (Данное значение указывает на то ,что, это вторичный сервер) master-host=10.0.0.1 (ip-адрес мастера) master-user=repadmin (имя пользователя для репликации) master-password=пароль пользователя master-connect-retry=60 replicate-do-db=testDB 2. Перезапускаем Mysql # service mysqld restart 3. Создадим пустую базу testDB и имортируем туда наш снятый ранее с мастера дамп нашей БД. Подключимся к Mysql и создадим базу testDB # mysql -u root -p mysql>STOP SLAVE; mysql>CREATE DATABASE testDB; mysql>quit; # cd /tmp # mysql -u root -p testDB < testdb.sql 4. Возращаемся к Mysql на мастере. (вы ведь не отключились от Mysql?, если да то подключитесь снова) Вводим команду mysql> SHOW MASTER STATUS; +——————+———-+————–+——————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +——————+———-+————–+——————+ | mysql-bin.000001 | 92 | testDB | | +——————+———-+————–+——————+ 1 row in set (0.00 sec) mysql> В данном случае нам здесь необходимо запомнить вот эти данные – mysql-bin.000001 | 92, ибо они нам еще пригодятся для настройки слейва ниже 5. Подключаемся к Mysql на слейве # mysql -u root -p Синхронизируем базы mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='repadmin', MASTER_PASSWORD='пароль юзера repadmin', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=92; Стартуем Mysql в режиме слейв mysql> start slave; Все репликация пошла, для проверки вводим команду mysql> show slave status \G; Обратите внимание на строчки в таблице, которую вам выдаст Mysql Slave_IO_Running: Yes Slave_SQL_Running: Yes Как вы поняли если все нормально, должно стоять YES, если NO, то репликация не началась. При возникновении проблем попробуйте сбросить параметры слейва на Mysql, на вторичном сервере, командой reset slave;[-hide-] |