Налаштування реплікації бази даних mysql в системі linux і відновлення бази - it-team
Процес реплікації необхідний оскільки:
1. Ви зможете підвищити показники продуктивності. Так, один сервер, він же Майстер, не зможе впоратися з величезною кількістю процесів. Навантаження на нього допомагають скинути Репліки. Причому чим більше цих процесів на кожну запис в базі даних, тим вигідніше створення репліки.
2. Якщо одна з реплік відмовить в роботі, то всі процеси читання, за які відповідала ця Репліка, будуть переведені в безпечному режимі на Майстра. Коли в роботі відмовляє головний сервер, то Ви зможете зробити одну з реплік Майстром. Таким чином, коли колишній Майстер відновить свою роботу, він перетвориться в Репліку.
3. Якщо Ви хочете зробити резервні копії даних, то з легкістю зможете зупинити Репліку, що не приведе до втрати працездатності сайту. Майстер зупиняти не вийде.
4. Репліка може виконувати найскладніші SQL-запити, що не приведе до завантаженості всієї системи в цілому.
Більш того, Ви зможете використовувати різну структуру, наприклад, для операції пошуку. На репліку за це може відповідати один тип таблиці, при цьому майстер може працювати абсолютно на іншому типі таблиці.
Як налаштувати процес Реплікації
Отже, поставимо завдання налаштування реплікації. У нас вже є база даних MySQL і вона має такі параметри:
Для настройки Майстри
Вам слід вибрати унікальний ID сервера, виберіть шлях, де будуть знаходитися бінарні логи, а також ім'я бази даних для процесу Реплікації всередині секції [mysqld]:
1. server-id = 1
2. log-bin = / var / lib / mysql / mysql-bin
3. replicate-do-db = testdb
mysql @ master> GRANT replication slave ON "testdb". * TO "replication" @ "192.168.1.102" IDENTIFIED BY "password";
Тепер перезавантажуємо MySQL для вступу всіх змін в силу за допомогою команди:
root @ master # service mysqld restart
Якщо Ви все зробили правильно і дані підтвердилися, то повинні побачити такий запис в команді «show master status»:
1. mysql @ master> SHOW MASTER STATUS \ G
File: mysql-bin.000003
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:
Пункт position буде показувати кількість змін в базі даних.
Потрібно вказати ID сервера, вибрати ім'я для бази даних, а також маршрут до реальних бінарним логам в [mysqld].
1. server-id = 2
2. relay-log = / var / lib / mysql / mysql-relay-bin
3. relay-log-index = /var/lib/mysql/mysql-relay-bin.index
4. replicate-do-db = testdb
Зробивши це, здійсните перезавантаження БД MySQL:
root @ replica # service mysql restart
Для перенесення даних
Блокуйте базу даних від запису. Гальмуєте додатки, або встановіть прапорець на пункт «Тільки читання» на Майстрі. Якщо у користувача є привілей SUPER, то даний прапорець не спрацює.
При наявності таблиць MyISAM зробіть «flush tables»:
1. mysql @ master> FLUSH TABLES WITH READ LOCK;
2. mysql @ master> SET GLOBAL read_only = ON;
Виберіть команду «Показати статус Майстер» і запам'ятайте, які значення в рядках «Файл» і «Позиція»:
mysql @ replica> SHOW SLAVE STATUS \ G
File: mysql-bin.000003
Position: 98
Здійсніть дамп бази даних, а після закінчення операції скасуйте блокування Майстри:
mysql @ master> SET GLOBAL read_only = OFF
Перенісши дамп бази даних на сервер Репліку, відновіть їх і все.
Увімкніть процес Реплікації за допомогою команд «change master to» і «start slave».
1. mysql @ replica> CHANGE MASTER TO MASTER_HOST = "192.168.1.101", MASTER_USER = "replication",
MASTER_PASSWORD = "password". MASTER_LOG_FILE = "mysql-bin.000003", MASTE_LOG_POS = "98";
2. mysql @ replica> start slave;
У рядках MASTER_LOG_FILE і MASTER_LOG_POS потрібно вписати ті значення, які були на Майстрі.
цікаві для нас значення, які показують на процес реплікації.
Значеннях в рядках Master_Log_File і Exec_Master_Log_Pos повинні рости разом з Майстром.
Пункт Seconds_Behind_Master, що показує те, наскільки Репліка відстає від Майстра, в ідеалі повинна дорівнювати 0. Якщо цей час буде зростати, то знайте, що у Вас занадто високе навантаження на Репліку.
Якщо в рядку Slave_IO_State нічого немає, а в Seconds_Behind_Master бачимо параметр 0, то процес реплікації не почався. Потрібно перевірити лог MySQL і усунути причини, після чого знову запустити процес реплікації:
mysql @ replica> start slave;
є ще рядок з часом блокування майстра, це відрізок часу, за який створюється дамп.
Якщо дамп робиться довго, можна поставити блок на записи Майстер прапорцем «Тільки читання», зберегти у себе в пам'яті позицію і зупинити БД MySQL. Далі скопіювати файли бази даних з Майстри на Репліку і включити Майстер повторно.
можна також підключити кілька реплік
Як зробити Репліку Майстром
Якщо Майстер відмовить в роботі, Вам потрібно в терміновому порядку зробити одну з реплік Майстром. Або налаштуйте Репліку так само, як і Майстер, або спробуйте перевести її в режим пасивного Майстра.
У файлі конфігурації MySQL потрібно увімкнути бінлогов:
Для процесу реплікації додайте користувача:
mysql @ master> GRANT replication slave ON 'testdb'. * TO 'replication'@'192.168.1.101' IDENTIFIAD BY "password";
Якщо зробити пасивного Майстри, то реплікація буде йти так само як у Репліки. Але, на відміну від Репліки, пасивний Майстер створюватиме бінарні логи.
Для того, щоб пасивний Майстер став активним, потрібно завершити реплікацію на ньому. Включити реплікацію на колишньому Майстрі. Заблокуйте запис на активному Майстрі, щоб не втратити дані:
1. mysql @ master> FLUSH TABLES WITH READ LOCK
2. mysql @ master> SET GLOBAL read_only = ON;
3. mysql @ replica> STOP SLAVE
4. mysql @ replica> SHOW MASTER STATUS;
File: mysql-bin.000001
Position: 61
mysql @ master> CHANGE MASTER TO MASTER_HOST = "192.168.1.102", MASTER_USER = "replication", MASTER_PASSWORD = "password",
MASTER_LOG_FILE = "mysql-bin.000001", MASTER_LOG_POR = 61;
mysql @ master> start slave
зняти блокування на попередньому майстра