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

Rick_C137 спросил: 28 апреля 2018 в 09:11 в: mysql

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

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

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

3 ответа

Rick James ответил: 30 апреля 2018 в 07:57

В правиле 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'"

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

Nambu14 ответил: 30 апреля 2018 в 01:18

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

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

Rick_C137 ответил: 30 апреля 2018 в 01:26
Спасибо, Этот вопрос решает проблему, и создание сценария не звучит хорошо, будет ждать еще немного времени, чтобы увидеть что-то лучше.
Nambu14 ответил: 30 апреля 2018 в 01:29
Рад быть полезным! :)
harvey ответил: 06 мая 2018 в 04:30

Похоже, вы хотите избежать создания сценария, одним из быстрых решений является использование опции --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