Mysql принять дамп какой-то части, как 10-20 % всей базы данных

Я знаю, что для получения дампа базы данных я могу игнорировать некоторые таблицы. но я хочу взять дамп всей таблицы с некоторым процентом данных, например 20% 40%, потому что весь дамп слишком большой. вот мой нормальный дамп-запрос.

mysqldump -h dburl -u user -p password --databases dbname > dbname.sql

Я не ищу конкретную ОС и использую Linux Ubuntu.

3 ответа

Правило 80-20 гласит, что самые маленькие 80% таблиц, вероятно, будут занимать только 20% пространства. Так что есть один mysqldump для них.

Затем добавьте больше mysqldump(s) для каждой оставшейся таблицы, занимающей менее 20% пространства.

Наконец, любые большие столы нуждаются в --where вариант, упомянутый Nambu14. Или вы можете попробовать сказать --where="true LIMIT 20000,10000" красться OFFSET а также LIMIT дюйма (см. один из комментариев на https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) Но не разрешайте записи в таблицу при этом - это может привести к дополнительному / недостающие записи.

Или вы можете адаптировать методы чанковки, как описано здесь. Это позволяет избежать лишних / отсутствующих проблем и избежать LIMIT ляп. Если повезет, вы можете жестко закодировать значения диапазона, необходимые для таких диапазонов, как этот --where="my_pk >= 'def' AND my_pk < 'mno'"

Не забудьте разобраться с триггерами, хранимой процедурой, представлениями и т. Д.

Похоже, что вы хотите избежать создания сценария, одним из быстрых решений является использование --where опция для mysqldump.

mysqldump --opt --where="1 limit 1000" myschema

Это ограничит дамп до 1000 строк - очевидно, подстраивайтесь под ваши ограничения размера.

Вы можете выполнить это со смещенным дампом, чтобы получить следующие 1000 - небольшая корректировка необходима, чтобы таблица не создавалась заново.

mysqldump --opt --where="1 limit 1000 offset 1000" --no-create-info myschema

Вы можете смешать это далее, скажем, вы хотите только 40% всех данных из случайно выбранных строк:

mysqldump --opt --where="1 having rand() < 0.40" myschema

Похожий вопрос открыт. С опцией --where вы можете ограничить количество записей, включенных в mysqldump ( официальная документация здесь), но этот параметр применяется для каждой таблицы в базе данных.

Другой способ - дать команде сценарий sql для запуска и подготовки данных в этом сценарии, это будет работать как псевдо-ETL-конвейер.

Другие вопросы по тегам