Налаштування майстра
Обов'язково вкажіть унікальний ID сервера, шлях для бінарних логів та ім'я БД для реплікації в секції [mysqld]:
server-id = 1
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = testdb
Переконайтеся, що у вас достатньо місця на диску для бінарних логів.
Додамо користувача replication, під правами якого буде виконуватися реплікація. Достатньо привілею "replication slave ":
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 " повинна показати приблизно наступне:
mysql@master> SHOW MASTER STATUS\G
File: mysql-bin.000003
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:
Значення position повинно збільшуватися по мірі того, як вносяться зміни в БД на майстрі.
Налаштування репліки
Вкажіть ID сервера, ім'я БД для реплікації та шлях до relay-бінологів в секції [mysqld] конфігурації, потім перезавантажте MySQL:
server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = testdb
root@replica# service mysqld restart
Переносимо дані
Тут нам доведеться заблокувати БД для запису. Для цього можна або зупинити роботу додатків, або скористатися встановленням прапорця read_only на майстрі (увага: на користувачів з привілеєм SUPER цей прапорець не діє). Якщо у нас є таблиці MyISAM, зробимо також "flush tables":
mysql@master> FLUSH TABLES WITH READ LOCK;
mysql@master> SET GLOBAL read_only = ON;
Подивимося стан майстра командою «show master status» і запам'ятаємо значення File і Position (після успішної блокування майстра вони не повинні змінюватися):
File: mysql-bin.000003
Position: 98
Робимо дамп БД, і після завершення операції знімаємо блокування майстра:
mysql@master> SET GLOBAL read_only = OFF;
Переносимо дамп на репліку та відновлюємо з нього дані.
Нарешті, запускаємо реплікацію командами "change master to" і "start slave" і подивимося, чи все пройшло добре:
mysql@replica> CHANGE MASTER TO MASTER_HOST = "192.168.1.101 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000003 ", MASTER_LOG_POS = 98;
mysql@replica> start slave;
Значення MASTER_LOG_FILE і MASTER_LOG_POS ми беремо з майстра.
Подивимося, як йде реплікація командою "show slave status ":
mysql@replica> SHOW SLAVE STATUS\G
Стаття взята з хабра і перевірена на практиці.
зіткнувся з помилкою [ERROR] Failed to initialize the master info structure
вирішується: RESET SLAVE;
Друга проблема - (не створювалися таблиці InnoDB) вирішилася видаленням логів .. 0 ..01
Якщо потрібно виключити деякі таблиці з реплікації, вписуємо їх у конфіг:
replicate-wild-ignore-table=base.mw_words_positions
replicate-wild-ignore-table=base.mw_sotrudniki_log
Пропускати помилки:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; мені не допомогло,
а ось додавання в my.cnf
slave-skip-errors= <код помилки або all>
вирішило проблему.
