
Бэкап MySQL: автоматизация mysqldump и ротация копий
Бэкап MySQL и MariaDB через mysqldump: --single-transaction, пароль в defaults-extra-file, cron с flock, systemd timer, GFS-ротация, загрузка в S3 и проверка.
MySQL и MariaDB
mysqldump делает дамп, dbsend делает всё остальное: хранит дампы версиями в российском облаке, показывает, какие таблицы изменились, напоминает, если ночной бэкап не пришёл, и отдаёт нужную версию для восстановления.
Дамп на том же сервере, что и база, — не бэкап: он погибнет вместе с диском, при взломе или ошибочной команде rm. Значит, нужен внешний бакет, ключи доступа к нему, ротация и очистка старых файлов.
mysqldump без --single-transaction на InnoDB-таблицах блокирует запись или выдаёт несогласованный срез. Без --routines и --triggers в дампе не окажется хранимых процедур. Такие ошибки обнаруживаются только при восстановлении.
Наконец, скрипт, который падает молча, хуже отсутствия скрипта: он создаёт ощущение защищённости. Если никто не получает уведомление о пропущенном бэкапе, о проблеме узнают слишком поздно.
Дамп уходит в S3-совместимое облако в России с шифрованием AES-256-GCM. На сервере базы не нужны ключи от бакета — только API-ключ dbsend.
dbsend читает CREATE TABLE и INSERT, включая extended INSERT, и показывает список таблиц, число строк и хэш схемы для каждой версии (тарифы от «Старт»).
Сравните два дампа и увидите, какие таблицы выросли или опустели. Подпишите версию «перед релизом» и закрепите её, чтобы ротация её не удалила.
Ожидаемый интервал бэкапов и уведомления в Telegram или на email, если очередной дамп не пришёл. История загрузок видна в панели и через dbsend log.
Создайте в панели базу с типом mysql_dump и API-ключ, установите CLI (Node.js 22.12+) и сохраните ключ командой dbsend login.
#!/usr/bin/env bash
# /usr/local/bin/mysql-backup.sh
set -euo pipefail
DUMP=/var/backups/shop.sql
mysqldump --single-transaction --routines --triggers --no-tablespaces shop > "$DUMP"
dbsend backup "$DUMP" -d <id базы> -e mysql_dump -l "nightly-$(date +%F)"
rm -f "$DUMP"Логин и пароль MySQL храните в ~/.my.cnf с правами 600, а не в командной строке.
# crontab -e — каждые 6 часов
0 */6 * * * /usr/local/bin/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1docker exec mysql sh -c 'mysqldump --single-transaction -uroot -p"$MYSQL_ROOT_PASSWORD" shop' > /var/backups/shop.sql
dbsend backup /var/backups/shop.sql -d <id базы> -e mysql_dumpdbsend log <id базы>
dbsend restore <id версии> ./shop.sql --yes
mysql shop_restore < ./shop.sqlВосстанавливайте в отдельную базу, сверяйте данные и только потом переключайте приложение.
Частота бэкапа определяется тем, сколько данных вы готовы потерять. Для интернет-магазина или CRM разумно снимать дамп каждые несколько часов, для блога или справочника — раз в сутки. Если файл не изменился, dbsend не создаёт новую версию, поэтому запускать бэкап чаще почти ничего не стоит.
Глубина хранения зависит от тарифа: от 3 версий на бесплатном до 365 на «Команде». Для важных моментов — перед миграцией схемы, крупным импортом или релизом — ставьте метку и закрепляйте версию: закреплённые версии не участвуют в ротации.
| mysqldump + cron + S3 | dbsend | |
|---|---|---|
| Таблицы и число строк в каждом дампе | от «Старт» | |
| Ключи от бакета на сервере базы | нужны | не нужны |
| Время на настройку | скрипт, бакет, ключи, ротация — часы | 3 команды — несколько минут |
| История версий с метками | имена файлов по дате | v1…vN, метки, закрепление |
| Не плодит одинаковые копии | ||
| Diff между версиями (таблицы, строки, схема) | на платных тарифах | |
| Проверка SHA-256 при восстановлении | если написали сами | |
| Алерт, если бэкап не пришёл | Telegram и email | |
| Шифрование и хранение в РФ | зависит от бакета | AES-256-GCM, РФ |
| Доступ из Claude Code и Cursor (MCP) | ||
| Стоимость | хранилище + ваше время | от 0 ₽ |
Тарифы и лимиты — на странице «Тарифы». Документация: CLI, форматы файлов, базы.
Да. Дампы mariadb-dump и mysqldump имеют одинаковый формат SQL, загружайте их с типом mysql_dump.
Да, если на хостинге доступен SSH и Node.js 22.12+ или если дамп можно скачать на другой сервер. dbsend нужен только исходящий HTTPS до api.dbsend.ru; запускать CLI можно где угодно, где лежит файл дампа.
Скачайте нужную версию командой dbsend restore <id> ./dump.sql --yes — CLI сверит SHA-256. Затем примените дамп командой mysql имя_базы < dump.sql. Версию можно скачать и из панели.
Не нужно. CLI сжимает файл gzip потоково при отправке и считает контрольную сумму по исходному дампу. Загружайте обычный .sql — так работают инспекция и diff.
До 100 МБ на бесплатном тарифе, 500 МБ на «Старт», 2 ГБ на «Про» и «Команде». Файлы больше 32 МБ загружаются частями автоматически.

Бэкап MySQL и MariaDB через mysqldump: --single-transaction, пароль в defaults-extra-file, cron с flock, systemd timer, GFS-ротация, загрузка в S3 и проверка.

Как восстановить базу из бэкапа без потерь: psql и pg_restore, mysql, замена файла SQLite и DuckDB, одна таблица из дампа, чек-лист до, во время и после.

Бэкап базы в Docker и Coolify: почему нельзя копировать живой volume, docker exec без -t, дампы PostgreSQL, MySQL и SQLite, sidecar, бэкапы Coolify в S3.

Как проверить, что бэкап базы рабочий: sha256sum, gzip -t, integrity_check, тестовое восстановление в Docker, еженедельный тест в cron и контроль пропусков.
Другие сценарии
Бесплатный тариф: 1 база, 500 МБ и 3 версии навсегда. Подключение занимает несколько минут.
Начать бесплатно →