Я пытаюсь загрузить небольшую выборку записей из большой базы данных в тестовую базу данных.
Как вы скажете 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
записи из определенной таблицы, вы можете сделать что-то вроде этого:Это приведет к сбросу первых
1000000
строк из указанной таблицыtable
в файлdump.sql
.источник
mysqldump может получить SQL-запрос для выполнения, из которого он будет брать данные для дампа. Затем вы можете использовать в своем запросе предложение «limit X», чтобы ограничить количество строк.
источник
Поскольку порядок по умолчанию - ASC, который редко бывает тем, что вам нужно в этой ситуации, вам необходимо иметь правильный дизайн базы данных, чтобы DESC работал из коробки. Если все ваши таблицы имеют ОДИН столбец первичного ключа с тем же именем (естественным или суррогатным), вы можете легко выгрузить n последних записей, используя:
Это прекрасная причина, по которой вы всегда должны называть свой идентификатор PK и избегать составных PK, даже в таблицах ассоциаций (вместо этого используйте суррогатные ключи).
источник