Резервне копіювання бази даних MySQL 22 Гб щодня


28

Зараз я в змозі зробити резервну копію за допомогою mysqldump. Але я маю зняти веб-сервер І на це потрібно близько 5 хвилин, щоб зробити резервну копію. Якщо я не знімаю веб-сервер, це займе назавжди і ніколи не закінчується + веб-сайт стає недоступним під час резервного копіювання.

Чи є швидший / кращий спосіб створити резервну копію своїх 22 ГБ та зростаючу базу даних?

Усі таблиці є MyISAM.


подивіться на це посилання, це на подібне запитання serverfault.com/questions/8044/backup-mysql-server
Чарльз Файга

Відповіді:


28

Так.

Налаштування реплікації на другу машину. Коли вам потрібно зробити резервну копію, ви можете заблокувати вторинну машину, виконати mysqlhotcopy або mysqldump, а потім розблокувати її. Це наздожене вашого господаря, і вам ніколи не доведеться брати майстра в автономному режимі.

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

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

Редагувати: Дійсно, схоже на те, що використання бінлогів для резервного копіювання документально підтверджено.

Це питання дуже пов'язане


Так, це чудово працює, і це буде моєю відповіддю. Єдиний головний недолік полягає в тому, що вам потрібно переконатися, що реплікація працює щодня правильно. Ми робимо знімки нашої рабської бази даних у робочий час та щоночі резервного копіювання від майстра.

5

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

# Define these vars to meet your needs. These meet mine.
lvol="/dev/VolGroup03/lvol0"
snap_name="nightly_snapshot"
snap_vol="$(dirname $lvol)/$snap_name"
snap_path="/mnt/$snap_name"
snap_size="10g" # Not the size of your data, anticipated data changes during the backup
backup_path="/backups/$snap_name"

/usr/bin/time -f 'Databases were locked for %E' -- \
mysql <<- MYSQL
# based on http://pointyhair.com/tiki-view_blog_post.php?blogId=1&postId=5
FLUSH TABLES WITH READ LOCK;
\! lvcreate --size $snap_size --snapshot --name $snap_name $lvol
UNLOCK TABLES;
MYSQL
mount $snap_vol $snap_path
rsync -av --delete $snap_path/mysql $backup_path/
umount $snap_path
lvremove -f $snap_vol

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


2

ПРОМИСЛОВІ ТАБЛИЦІ З ПРОЧИТАНОЮ БЛОКУ - це не те, що ви хочете робити регулярно (або навіть напіврегулярно) у виробничій системі. Це має бути лише в крайньому випадку.

Встановіть щонайменше два раби реплікації (для цього, звичайно, знадобляться ПЛАТНІ ТАБЛИЦІ З ПРОЧИТАНОЮ БЛОКУ). Після їх налаштування ви можете зняти резервну копію однієї, а інша залишається синхронізованою як запасний майстер.

Крім того, якщо один з ваших рабів виходить з ладу, ви можете використовувати знімок із цього, щоб відновити другий (або третій) раб. Якщо всі ваші раби виходять з ладу, ви повернетесь до ПЛАТИВНИХ СТОЛІВ З ЧИТАТИ ЗАЧИТАНОЮ.

Не забудьте завжди мати процес, який регулярно перевіряє дані синхронізуються - використовуйте щось на зразок mk-table-контрольної суми для цього (це нетривіально для налаштування, докладні відомості див. У документації Maatkit).

Оскільки 22 ГБ порівняно мало, у вас не буде проблем. Робити це з великою базою даних може бути більш проблематично.


1

Рішення тут подвійне, як описано вище:

  1. Налаштуйте реплікацію вашого сервера на підлеглому, який ви можете передати в автономний режим. Найкращий спосіб зробити це - скинути базу даних за допомогою mysqldump та параметра --master-data.
  2. Налаштуйте нічні резервні копії на рабі. Ви можете або користувачем mysqldump за допомогою --master-data --flush-logs та --single-транзакцій, або ви можете зупинити сервер mysql, скопіювати файли даних на диск і перезапустити його (реплікація підбере де він припинився).
  3. Запускайте сценарій на підлеглому кожні (наприклад, 5, 10, 20 хвилин), щоб перевірити і переконатися, що mysql все ще реплікується. Я написав простий скрипт python для цього, який ви можете використовувати.

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

Крім того, якщо ви використовуєте LVM в Linux, ви можете зробити знімок LVM розділу, а потім створити його назад. Знімки LVM є атомними, тому якщо ви зробите «флеш-таблиці з блокуванням читання», а потім зробите знімок та розблокуйте, ви отримаєте послідовний знімок.

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


0

Залежно від вашого оточення, знімки, як правило, є прекрасним способом. Особливо, якщо вам доведеться зробити резервну копію майстра з якихось причин. Ми запускаємо парами master та slave та використовуємо резервні копії знімків на обох.

  1. FLUSH TABLES WITH READ LOCK;
  2. Витягніть знімок у файлові системи бази даних та журналу.
  3. UNLOCK TABLES;
  4. Скопіюйте свої файли даних із знімка у вільний час.

За допомогою таблиць InnoDB ви хочете запуститись SET AUTOCOMMIT=0;перед виконанням блокування читання.



-1

Ви могли б зробити поступове резервне копіювання. Резервне копіювання 1/24 записів щогодини. Єдина проблема такого підходу полягає в тому, що якщо він виходить з ладу протягом перших кількох годин дня, ви втратите що-небудь від того часу до моменту аварії. Так чи інакше, втрачено записи менше ніж за 24 години (я не знаю, наскільки це важливо для вас).

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