mysqldump робить логічний бекап: SQL-файл з CREATE TABLE і INSERT, з якого базу можна відтворити на будь-якому сервері MySQL.
mysqldump --single-transaction --routines --events \
--user=backup --password app > app-2026-10-04.sql
# відновлення
mysql --user=root --password app < app-2026-10-04.sql
Чому --single-transaction обов'язковий для InnoDB. Без нього дамп читає таблиці по черзі в різні моменти часу. Якщо між читанням orders і order_items хтось створив замовлення, у дампі будуть позиції без замовлення - неузгоджений бекап. Тому за замовчуванням mysqldump блокує таблиці (--lock-tables), і застосунок на час дампу не може писати.
З --single-transaction дамп відкриває транзакцію з узгодженим знімком (REPEATABLE READ) і читає всі таблиці на одну мить, нікого не блокуючи. Працює лише для InnoDB: MyISAM-таблиці знімка не підтримують.
Корисні параметри:
--routines,--events- збережені процедури й події (тригери включено за замовчуванням);--no-data- лише схема;--no-create-info- лише дані;--source-data=2- записати в дамп коментар з позицією бінарного журналу (потрібно для відновлення на момент у часі чи налаштування репліки);--quick(увімкнено за замовчуванням) - читати рядки потоком, а не завантажувати таблицю в пам'ять;- стиснення на льоту:
mysqldump ... | gzip > app.sql.gz.
Обмеження й застереження:
- під час дампу не можна змінювати схему (
ALTER,TRUNCATE,RENAME) - вони порушують узгодженість знімка, а дамп може впасти чи отримати неповні дані; - довга транзакція дампу заважає очищенню старих версій рядків (purge) - на великій навантаженій базі дамп краще знімати з репліки;
- відновлення повільне: SQL виконується рядок за рядком і перебудовує індекси. Для бази на сотні гігабайтів це години. Для великих баз використовують фізичні бекапи (Percona XtraBackup, MySQL Enterprise Backup) або паралельні утиліти MySQL Shell (
util.dumpInstance()).
Бекап, який не перевіряли, - не бекап. Регулярно відновлюйте дамп на окремому сервері й запускайте хоча б базові перевірки: кількість рядків у ключових таблицях, свіжість останніх записів.
Безпека: пароль у командному рядку видно в списку процесів. Краще використовувати файл опцій (--defaults-extra-file) чи mysql_config_editor, а бекапи шифрувати й зберігати поза сервером бази.