Я пытаюсь загрузить небольшую выборку записей из большой базы данных в тестовую базу данных.
Как вы скажете mysqldump выдать вам только n записей из 8 миллионов?
Благодарность
Ответы:
Как говорит скаффман, используйте параметр --where :
mysqldump --opt --where="1 limit 1000000" database
Конечно, это даст вам первый миллион строк из каждой таблицы.
SELECT * from table WHERE
, поэтому в этом случае вы получите SELECT * from table WHERE 1 limit 1000000
. Без 1 у вас был бы неверный запрос. Указание 1 для предложения where (поскольку 1 всегда истинно) просто выбирает все записи.
mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database
чтобы получить вторую страницу из 1 миллиона записей. Убедитесь, что вы используете флаг --no-create-info на всех страницах, кроме первой, чтобы выгрузить только данные и исключить создание таблицы .
Если вы хотите получить n
записи из определенной таблицы, вы можете сделать что-то вроде этого:
mysqldump --opt --where="1 limit 1000000" database table > dump.sql
Это приведет к сбросу первых 1000000
строк из указанной таблицы table
в файл dump.sql
.
Поскольку порядок по умолчанию - ASC, который редко бывает тем, что вам нужно в этой ситуации, вам необходимо иметь правильный дизайн базы данных, чтобы DESC работал из коробки. Если все ваши таблицы имеют ОДИН столбец первичного ключа с тем же именем (естественным или суррогатным), вы можете легко выгрузить n последних записей, используя:
mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql
Это прекрасная причина, по которой вы всегда должны называть свой идентификатор PK и избегать составных PK, даже в таблицах ассоциаций (вместо этого используйте суррогатные ключи).