MySQLDUMP на прикладах, powered by leo blog

Цей пост містить команди, які найчастіше використовуються для створення або розгортання резервних копій баз даних MySQL.

Ну, просто набридло мені постійно гуглити ключі, коли вони мені «раптом» знадобляться.

mysqldump

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

Але, загалом, мова не про неї… може напишу про «гарячу копію» в іншій статті…

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

Почнемо з найпоширенішої команди створення дампа сайту site.ru у файл site.ru:

  • -u (—user=…) це ім'я користувача БД;
  • -h (-host = ...) це хост, на якому розташовується сам сервер. Якщо сервер локальний, то цей параметр можна або не використовувати або прописати туди localhost. Також майте на увазі, що ip сервера після ключа потрібно писати без пробілу;
  • -p (—password=…) це пароль користувача. Якщо цей ключ не використовувати, то підключення до БД буде можливим у тому випадку, якщо пароля немає. Також ніхто не забороняє вписати пароль у команду, причому після ключа не повинно бути пропуску (наприклад: -p1234567890, де 1234567890 це пароль);
  • site_ua це ім'я БД на MySql сервері;
  • site_ua.sql це файл для дампа.
  • Щоб зробити резервну копію кількох БД, можна скористатися ключем-B і вказати кілька БД, ось приклад:

    Якщо ситуація не дає часу нароздуми, і потрібно робити резервну копію всіх баз даних, то в цій ситуації можна скористатися ключем-all-databases, ось приклад:

    До речі є нюанс.

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

    Перший спосіб полягає у блокуванні таблиць, тобто. можна скористатися параметром -lock-tables, ось приклад:

    Але в момент створення резервної копії запити клієнтів будуть підвішені. а отже можуть бути тайм-аути.

    Другий спосіб це використання ключа - flush-log при створенні резервної копії. Цей ключ закриє старий лог дій та створить новий. Якщо хтось щось запише в процесі створення копії, це відобразиться на початку журналу і можна буде перенести цю зміну до бази. Далі, щоб напевно, після створення резервної копії, потрібно виконувати команду mysqladmin -flush-logs і залишати копію передостаннього бінарного журналу.

    Відновлення резервної копії бази даних

    Тут уже правитиме утиліта «mysql». Ось приклад:

    Ще один спосіб, більш педантичний:

    Ну а якщо у вас БД збережена в gz-архіві, то можна скомбінувати команди mysql і zcat ось так:

    Ще варіанти використання mysqldump

    Наприклад нам потрібна база даних на dev зону, пісочницю, а розмір основної БД дуже великий. Можна скористатися ключем -where="true limit 150", якому ми явно вкажемо вибірку даних не більше 150 записів. Ось приклад:

    Якщо нам потрібна лише структура без даних, то можна скористатися ключем - no-data, ось приклад

    Якщо нам потрібна копія лише однієї таблиці, то приклад команди:

    Якщо нам потрібна копія тригерів,процедур і подій (вбудованого планувальника), то ось приклад:

    Ще можна одразу створити заархівований дамп бази. Зробити це можна ось так:

    І ще можна вказати дату створення архіву, ось так:

    Ключі для mysqldump

    Нижче будуть наведені найбільш популярні ключі mysqldump: