Для створення резервних копій баз даних 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>
;
Якщо відновлюємося через консоль:
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