mysqldump -u root -p --single-transaction shop orders --result-file=orders.sql выгружает одну таблицу из базы, а mysql shop < orders.sql возвращает её на место, не трогая остальные. Короткий ответ скрывает две вещи: дамп начинается с DROP TABLE IF EXISTS, и через --where можно выгрузить только нужные строки.
1. Выгрузить одну таблицу
$ clai сделай дамп таблицы orders из базы shop→ mysqldump -h my8 -uroot -p --single-transaction shop orders --result-file=orders.sql
Сначала идёт имя базы, потом таблицы через пробел. --single-transaction снимает дамп InnoDB без блокировки — на живой базе этот флаг не опция, а необходимость. --result-file вместо > сохраняет переносы строк и не даёт тексту ошибок попасть внутрь дампа.
2. Что лежит в таком дампе
$ clai покажи значимые строки дампа→ grep -E 'DROP TABLE|CREATE TABLE|INSERT INTO' orders.sqlDROP TABLE IF EXISTS `orders`;CREATE TABLE `orders` (INSERT INTO `orders` VALUES (1,'acme',120.50,'2026-08-01'),(2,'globex'
Вот о чём обычно не пишут. Самая первая инструкция — DROP TABLE IF EXISTS. Восстановление такого файла не сливает данные с текущими, а заменяет таблицу её состоянием на момент дампа.
3. Только структура, без строк
$ clai выгрузи только структуру таблицы orders→ mysqldump -h my8 -uroot -p --no-data shop orders --result-file=schema.sql
--no-data оставляет CREATE TABLE и убирает все INSERT — проверено, в файле ни одной вставки. Удобно сравнивать схему на проде и на стенде обычным diff.
4. Выгрузить только нужные строки
$ clai выгрузи только заказы за август→ mysqldump -h my8 -uroot -p --single-transaction --where="created >= '2026-08-01'" shop orders --result-file=august.sqlINSERT INTO `orders` VALUES (1,'acme',120.50,'2026-08-01'),(3,'initech',45.20,'2026-08-10');
В дамп попали две строки из трёх — июльский заказ отфильтрован. Выше показана строка INSERT из получившегося файла. Так делают точечные выгрузки: по дате, по клиенту, по диапазону id.
5. Восстановить одну таблицу в живую базу
$ clai восстанови таблицу orders из дампа→ mysql -h my8 -uroot -p shop < orders.sql
Проверено на живой базе: до восстановления в orders было 2 строки, после — 3, а соседняя таблица customers осталась ровно такой, какой была. Так и откатывают одну таблицу, не задевая остальные.
6. Тот же дамп в другую базу
$ clai залей дамп таблицы в базу shop_copy→ mysql -h my8 -uroot -p shop_copy < orders.sql
В дампе одной таблицы нет ни CREATE DATABASE, ни USE, поэтому приёмник выбирается аргументом mysql. Проверено: в shop_copy появилась таблица orders со всеми тремя строками.
Gotchas
- Дамп одной таблицы начинается с DROP TABLE. Всё, что записали в неё после снятия дампа, при восстановлении исчезнет. Если нужно именно дописать, снимайте дамп с
--no-create-info. --no-create-infoупирается в первичный ключ. Проверено: заливка такого файла поверх существующих строк даётERROR 1062 (23000) at line 24: Duplicate entry '1' for key 'orders.PRIMARY'. Дописывание работает только для новых строк — либо чистите таблицу заранее, либо добавляйте--insert-ignoreили--replace.- Без
--single-transactionдамп блокирует таблицу. На MyISAM этого не избежать, на InnoDB это авария, устроенная своими руками посреди рабочего дня.
Related questions
Как выгрузить несколько таблиц? Перечислить: mysqldump shop orders customers. Обратный флаг — --ignore-table=shop.logs, он исключает.
Как сжать дамп на лету? mysqldump … | gzip > dump.sql.gz, восстановление — zcat dump.sql.gz | mysql shop. С --result-file так не выйдет: он сам пишет файл.
Чем mysqldump хуже mysqlpump и mydumper? Оба конкурента выгружают параллельно и выигрывают на больших базах, зато mysqldump есть везде, а его формат читается глазами.
See also
- pg_dump и pg_restore без ловушки версий
- Логи docker забили диск
- Проверить загрузку: sha256sum -c, а потом подпись
CliAI пишет строку дампа с нужными флагами и показывает её до того, как она коснётся базы. Поставить одной строкой.