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-конвейер.