Створення резервних копій баз mysql

Як зробити копію бази MySQL

Існує програма mysqldump, що дозволяє швидко і просто проводити операції по створенню резервних копій баз MySQL. Також mysqldump дає можливість робити дуже тонкі настройки для управління процесом створення резервних копій баз даних або окремих таблиць. Можна сказати, що mysqldump - це основний інструмент, яким Вам доведеться користуватися в тому випадку, якщо Ви будете робити backup MySQL.

Відразу візьмемо просте завдання, яку будемо вирішувати за допомогою mysqldump, і розберемося, що до чого. Є хостинг, є база даних DBNAME, яку виділив Вам хостинг-провайдер. Є хост HOST, на якому розміщений сервер MySQL, логін LOGIN до нього, порт PORT, на якому працює сервер, а також пароль PASS. Маючи всі ці дані, можна зробити dump (дамп, копію) бази DBNAME так (виконуємо в unix shell):

Після виконання даної команди у файлі dump.txt у нас буде копія MySQL-бази DBNAME. Це станеться тільки в тому випадку, звичайно, якщо всі параметри Ви задасте вірно, відповідно до настройками свого хостингу. Відразу потрібно сказати, що програма mysqldump проводить виведення результатів прямо Вам на STDIN, тобто, на екран. Потрібно перенаправляти вивід в який-небудь файл. Наприклад, як в даному випадку - "> dump.txt". Якщо цього не зробити, а база велика, Ви отримаєте на екран все ті мегабайти інформації, які в ній містяться.

Трохи розповімо про те, що ж робить mysqldump. Ця програма створює сценарій відновлення Ваших даних. Тобто, висновок mysqldump - це не якісь абстрактні і нечитані двійкові дані, а осмислений текст сценарію. Наприклад, якщо у Вашій базі була таблиця test, в якій було поле test2 з типом даних integer і одна-єдина запис "1111", то mysqldump створить приблизно такий сценарій:

Таким чином, mysqldump "опише" всі Ваші таблиці і створить INSERT-команди для відновлення даних в таблицях. Отже, ми перенаправляємо висновок mysqldump в текстовий файл, який потім використовуватимемо для відновлення. Розглянемо і цей процес - відтворення бази з резервної копії.

Для відновлення користуватимемося стандартною програмою mysql, яка входить в комплект поставки MySQL поряд з mysqldump. Припустимо, у нас є backup в файлі dump.txt. Нам потрібно відновити його в робочу базу. Наприклад, ми випадково видалили нашу базу даних, а тепер намагаємося виправити цю невдачу. Робимо так.

Тобто, змушуємо mysql-клієнт з'єднатися з сервером і виконати сценарій, який у нас є. Після виконання цієї команди у Вашій базі з'являться таблиці і дані з резервної копії. Зважайте на те, що дані будуть просто відновлюватися за сценарієм з dump.txt. Тобто, якщо таблиці, які згадуються в дампі бази, вже існують і мають іншу структуру, тут явно виникне помилка. Просто подивіться на сценарій і на робочу базу і уявіть, що Ви вручну виконуєте команди з сценарію. Якщо впевнені, що все буде добре - сміливо відновлюйте.

Розглянемо більш тонкі налаштування mysqldump:

--databases дозволяє зробити так, що mysqldump включить в сценарій відновлення команди CREATE DATABASE / *! 33333 IF NOT EXISTS * / DBNAME і USE DBNAME. Це дозволить створювати робочі бази "з нуля". Тобто, без використання --databases мається на увазі, що користувач відновлює одну базу даних і явно вказує, куди потрібно поміщати відновлювані дані. Якщо ж backup створюється з метою зробити повністю робочу копію даних, наприклад, на іншому MySQL-сервері, то потрібно використовувати цей ключ;

--all-databases дозволяє зробити копії всіх баз даних, які існують на даному MySQL-сервері. Якщо ж потрібно зробити копії тільки деяких баз, потрібно просто вказати їх через пропуск при виклику mysqldump з командного рядка (див. Вище);

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

--add-drop-table - ключ, який змусить mysqldump додавати в підсумковий сценарій команду drop table перед створенням таблиць. Це дозволить уникнути деяких помилок при відновленні бази з резервної копії. Звичайно, потрібно враховувати те, що таблиці, що знаходяться в робочій копії (якщо таблиці з таким же ім'ям існують в backup), перед відновленням з резервної копії будуть видалені з основної бази і перестворювати з backup;

--no-data. За допомогою цього ключа можна швидко зробити копію структури таблиці / баз без самих даних. Наприклад, Ви створили складну таблицю і хотіли б зберегти на майбутнє її структуру, а самі дані, які знаходяться в цій таблиці, Вам в резервній копії не потрібні;

--result-file =. - цей ключ можна використовувати для перенаправлення виводу в файл. Можна використовувати звичайне unix-перенаправлення командою ">", а можна - ось цей ключ. Кому що подобається;

Ще один дуже корисну пораду щодо використання mysqldump в хостингової середовищі. Як правило, при використанні хостингу на користувача накладаються деякі обмеження. Наприклад, не можна зайняти більше деякої кількості фізичної пам'яті (RAM, ОЗУ). mysqldump за умовчанням поміщає всі отримані від MySQL-сервера дані в пам'ять, а потім записує все це на диск. Відповідно, якщо провайдер дає Вам зайняти, наприклад, 30Мб пам'яті, а база, копію якої Ви робите за допомогою mysqldump, займає 50мб, звичайно, тут виникне помилка - mysqldump не зможе відпрацювати коректно і завершиться аварійно, про що Вам повідомить. Щоб "змусити" mysqldump писати дані відразу на диск, а не зберігати їх, нехай навіть і тимчасово, в пам'яті, використовуйте ключ --quick. Це вирішить проблему.

Автоматизація резервного копіювання

Тепер подумаємо, як би нам автоматизувати процес створення резервних копій бази даних. Отже, існує програма - cron. Вона дозволяє запускати процеси у вказаний користувачем час або з певною періодичністю. Відразу обмовимося - cron в загальному випадку існує тільки під Unix, так що, якщо Ви використовуєте для хостингу ОС Windows, проконсультуйтеся зі своїм хостинг-провайдером про те, як краще запускати процеси в потрібний час. Та й взагалі, мабуть, цей пункт буде цікавий тільки unix-користувачам.

В unix shell запускаємо crontab -e і створюємо таке правило запуску процесу створення копій бази:

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

/ Каталог-с-архівами -name "* .gz" -mtime +7, Ви будете видаляти архіви, які "старше" семи днів. Прочитайте документацію по find - вона доступна по команді man find в unix shell.

Додаткові можливості