Próbuję załadować małą próbkę rekordów z dużej bazy danych do testowej bazy danych.
Jak powiesz mysqldump, aby dał Ci tylko n rekordów z 8 milionów?
Dzięki
Jak mówi skaffman, użyj opcji --where :
mysqldump --opt --where="1 limit 1000000" database
Oczywiście dałoby to pierwszy milion wierszy z każdej tabeli.
SELECT * from table WHERE
, więc w tym przypadku otrzymaszSELECT * from table WHERE 1 limit 1000000
. Bez 1 miałbyś nieprawidłowe zapytanie. Określenie 1 dla klauzuli where (ponieważ 1 jest zawsze prawdziwe) po prostu wybiera wszystkie rekordy.mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database
aby uzyskać drugą stronę 1 miliona rekordów. Upewnij się, że używasz flagi --no-create-info na stronach innych niż pierwsza, aby tylko zrzucić dane i pominąć tworzenie tabeli .Jeśli chcesz pobrać
n
rekordy z określonej tabeli, możesz zrobić coś takiego:Spowoduje to zrzucenie pierwszych
1000000
wierszy z nazwanej tabelitable
do plikudump.sql
.źródło
mysqldump może otrzymać zapytanie SQL do wykonania, z którego pobierze dane do zrzutu. Następnie możesz użyć klauzuli „limit X” w zapytaniu, aby ograniczyć liczbę wierszy.
źródło
Ponieważ domyślną kolejnością jest ASC, co rzadko jest tym, czego potrzebujesz w tej sytuacji, musisz mieć odpowiedni projekt bazy danych, aby DESC działał po wyjęciu z pudełka. Jeśli wszystkie twoje tabele mają JEDNĄ kolumnę klucza podstawowego o tej samej nazwie (naturalna lub zastępcza), możesz łatwo zrzucić n najnowszych rekordów, używając:
Jest to doskonały powód, dla którego powinieneś zawsze nazywać swój identyfikator PK i unikać złożonych PK, nawet w tabelach asocjacyjnych (zamiast tego użyj kluczy zastępczych).
źródło