Як налаштувати реплікацію MySQL з мінімальним простоєм


12

В основному у нас є велика база даних MySQL, і ми прагнемо зробити реплікацію на підлеглий (налаштування ведучого підлеглого). У вас, хлопці, є покрокове керівництво, як це зробити з МІНІМАЛЬНИМИ простоями в базі даних? Резервне копіювання бази даних та передача резервної копії на підлеглий сервер (навіть через приватну мережу) займає приблизно 40 хвилин. Досить тривалий час простою.

Відповіді:


15

Я припускаю, що ви використовуєте InnoDB як двигун зберігання даних. Якщо так, вам потрібно увімкнути бін-журнал . Якщо він зараз не включений, вам потрібно перезапустити MySQL після зміни my.cnf. Це єдиний час простою, після якого ви можете зайняти скидання бази даних з бінлогічним положенням, не блокуючи базу даних:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

На основі цієї резервної копії відновіть дані на підлеглому. Після цього ви можете прослідкувати будь-який посібник з реплікації MySQL і дозволити підлеглому наздогнати / запустити разом з майстром.


що буде, якщо деякі таблиці не використовують innodb? І чи буде вищезазначена резервна копія все-таки дійсна, якщо я використовую --databases для скидання підмножини баз даних замість -A?
mathieu

якщо деякі таблиці не використовують innodb, резервна копія може бути непослідовною. дивіться тут: stackoverflow.com/a/7461466/104398 ; резервна копія не буде містити цих пропущених баз даних. якщо ви встановите реплікацію на основі такого резервного копіювання і не фільтруєте те, що реплікується, - ваша реплікація порушиться, як тільки буде здійснена деяка операція над опущеними базами даних.
pQd

Гаразд, я перетворив свої залишилися таблиці myisam в innodb і переконався, що тільки ті бази даних, які я хочу, копіюються / створюються резервними копіями.
mathieu

3

для запуску реплікації вам потрібна послідовна копія вашої бази даних на підлеглому

чи підтримуються ваші таблиці myisam чи innodb? щоб з’ясувати проблему

show table status

і подивіться на стовпчик "Двигун"

якщо всі таблиці є innodb, то ви можете виконати налаштування нульового простою, використовуючи mysqldump --single-транзакцію та імпортуючи їх у підлеглий

якщо таблиці - myisam, вам доведеться простоювати, оскільки вам доведеться блокувати таблиці для запису під час їх копіювання. mysqlhotcopy - це інструмент, який допоможе вам у цьому.

альтернативно, якщо ви використовуєте LVM (логічний диспетчер томів), ви можете зупинити базу даних, зробити знімок LVM за кілька секунд і запустити db знову. Тоді ви можете зробити послідовну копію зі знімка.


1

Щоб налаштувати підлеглий, вам потрібно зробити знімок даних та записати бінарне положення журналу. Резервне копіювання бази даних не повинно спричиняти простоїв, хоча це призведе до зниження продуктивності, але ви вже створили резервну копію бази даних, правда? Ви можете знайти резервні копії, щоб заблокувати деякі таблиці, і це може спричинити блокування у вашій програмі, дійсно потрібно подивитися, як це реалізовано для цього.

Чи можете ви знімати диск? Це значно скоротить час простою, якщо ви можете зробити резервну копію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.