Mysql принять дамп какой-то части, как 10-20% всей базы данных - PullRequest
0 голосов
/ 22 мая 2018

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

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

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

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

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

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

Наконец, для любых больших таблиц требуется упомянутая опция --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'"

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

0 голосов
/ 31 мая 2018

Звучит так, как будто вы хотите избежать создания скрипта. Одним из быстрых решений является использование опции --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
0 голосов
/ 24 мая 2018

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

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

...