Зберігаємо нерви. Бекапимо базу даних MySQL в Linux

Для створення резервних копій баз даних MySQL є утиліта mysqldump, про яку зараз поговоримо.

Утиліта дозволяє нам створити дамп бази даних, а також відновити базу даних із дампа. Дамп містить набір команд на мові SQL для створення і заповнення таблиць. Розберемо синтаксис та основні параметрів.

mysqldump -uroot -h172.28.34.13 -p database_name > database.sql

де:

[ads_color_box color_background=”#eee”]

  • -u или –user=… – ім’я користувача
  • -h или –host=… – віддалений хост (якщо робимо дамп локально, цей параметр вказувати не обов’язково)
  • -p или –password – заитати пароль
  • database_name – ім’я бази даних
  • database.sql – ім’я файлу дампа

[/ads_color_box]

Також є багато інших цікавих параметрів, наприклад:

[ads_color_box color_background=”#eee”]

  • no-data – дамп тільки структури БД (без даних)
  • –skip-lock-tables – вимкнути блокування таблиць (якщо не вказати, будь-які запити на зміну даних будуть очікувати на виконання повного дампа)
  • –all-databases, -A – зберегти всі таблиці з усіх баз даних, що знаходяться під керуванням сервера
  • –databases, -B – дозволяє вказати список баз даних, з яких робити дамп
  • –defaults-extra-file – прочитати опції з файлу
  • –force, -f – продовжувати навіть якщо в процесі створення дампа сталася помилка
  • –lock-all-tables, -x – блокування всіх таблиць у всіх базах даних на час створення повного дампа всіх баз даних
  • –lock-tables, -l – блокування таблиць бази даних, для якої створюється дамп
  • –quick, -q – почати формування дампа, не чекаючи повного завантаження даних із сервера і заощаджуючи цим пам’ять

[/ads_color_box]

З іншими параметрами можна ознайомитись у довідковій документації, оскільки вони використовуються не так часто.

Щоб розгорнути базу з дампа, перенаправляємо потік у зворотний бік:

mysql -uroot -h172.28.34.13 -p database_name < database.sql&gt;

Якщо відновлюємося через консоль:

mysql> use database_name;
mysql> source database.sql

Для автоматизації процесу зняття бекапів бази даних можна скористатися планувальником cron.

Розглянемо такий приклад:

0 0 * * 2,6 /usr/bin/mysqldump -uroot -ppassword database_name > /home/user/db_backup.sql

Тут ми передаємо ім’я користувача та пароль бази даних у відкритому вигляді, що не є добре. Правильніше буде створити файл, наприклад my.cnf у домашній папці користувача з таким вмістом:

[mysqldump]
host = 127.0.0.1 (або IP-адреса віддаленого сервера MySQL)
port = 3306 (порт сервера MySQL, стандартний 3306)
user = root (ім'я користувача бази даних)
password = db_pass (пароль бази даних)

потім дати цьому файлу права 600 та скористатися опцією –defaults-extra-file

0 1 * * 2,6 /usr/bin/mysqldump --defaults-extra-file=~/my.cnf blog > /home/user/db_backup.sql

Таким чином ми не передаємо жодних даних авторизації у відкритому вигляді.

А щоб було взагалі красиво, можна до імені файлу дампа ще й дату приліпити

0 1 * * 2,6 /usr/bin/mysqldump --defaults-extra-file=~/my.cnf blog > /home/user/db_backup_$(date +\%Y\%m\%d\%H\%M).sql