MySQL - уникайте блокування таблиць під час резервного копіювання


2

Я запускаю нічні резервні копії на своєму сервері за допомогою mysqldump. На жаль, щомісяця вбиває мій сайт протягом півгодини або близько того, оскільки столи заблокуються під час резервного копіювання.

Відповідно до списку процесів, навіть здається, що запити на незв’язаних таблицях іноді блокуються, наприклад, "ВСТАВИТЬСЯ В А" заблокований на кілька хвилин, тоді як єдиний запущений запит стосується лише таблиці Б.

Чи є кращий спосіб зробити резервні копії, як це?

Відповіді:


6

У вас є два варіанти:

A. Використовуйте --skip-lock-tablesпараметр mysqldump. Ваші таблиці не будуть заблоковані, але резервна копія може бути невідповідною (залежить від вашої схеми: якщо транзакції вашої бази даних торкаються відразу декількох таблиць, а одна таблиця вже є резервною копією, а інша - ні. Наприклад: дві таблиці: клієнти Якщо клієнти спочатку створюють резервну копію, а потім вставляють нову пару клієнтів / замовлень, ви можете закінчити замовлення без замовника у вашій резервній копії).

Ця проблема є основною причиною, чому mysqldump за замовчуванням блокує всі таблиці. Якщо ця проблема не стосується вас, пропуск блокування таблиці в mysql є найпростішим рішенням.

B. Використовуйте інший метод резервного копіювання. Наприклад: Очистіть таблиці з блокуванням читання, створіть знімок LVM, розблокуйте таблиці, змонтуйте знімок LVM та створіть резервну копію даних. Це стає швидко, набагато складніше, ніж простий mysqldump. Google "mysql резервного копіювання з LVM-знімками", доступно багато сценаріїв та навчальних посібників.

Якщо ваші дані MySQL не містять об'єм LVM, ви можете створити підлеглий MySQL-сервер і створити резервну копію, не торкаючись головного, тому блокування відбувається на підлеглому, і майстер завжди вільний.

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