mysqldump에서 레코드 수를 제한하고 있습니까?


137

큰 데이터베이스에서 작은 레코드 샘플을 테스트 데이터베이스로로드하려고합니다.

mysqldump에게 어떻게 8 백만 중에서 n 개의 레코드 만 제공하라고 말합니까?

감사

답변:


212

skaffman이 말했듯이 --where 옵션을 사용하십시오 .

mysqldump --opt --where="1 limit 1000000" database

물론, 그것은 당신에게 모든 테이블에서 처음 백만 행을 줄 것입니다.


15
한계 이전의 "1"은 무엇을합니까?
Phob

31
@Phob : --where 옵션은 기본적으로 형식의 쿼리에 추가되므로이 SELECT * from table WHERE 경우 얻을 수 SELECT * from table WHERE 1 limit 1000000있습니다. 1이 없으면 유효하지 않은 쿼리가 있습니다. where 절에 1을 지정하면 (1이 항상 true이므로) 모든 레코드를 선택합니다.
Adam Bellaire 1

24
와, 정말 해킹이야 기본적으로 SQL을 이런 식으로 주입 할 수 있습니다.
Phob

6
이것이 모든 외래 키 무결성을 유지합니까? 그렇지 않다면 그렇게 할 수있는 방법이 있습니까?
keithxm23

4
감사! 또한 다음을 사용 mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database 하여 백만 개의 레코드 중 두 번째 페이지를 얻을 수 있습니다 . 첫 페이지 이외의 페이지 에서 --no-create-info 플래그 를 사용하여 데이터 만 덤프하고 테이블 작성 항목을 제거하십시오 .
pfuri

59

n특정 테이블에서 레코드 를 얻으려면 다음과 같이 할 수 있습니다.

mysqldump --opt --where="1 limit 1000000" database table > dump.sql

이것은 파일로 1000000명명 table된 테이블에서 첫 번째 행을 덤프 합니다 dump.sql.


9

mysqldump는 실행할 SQL 쿼리를받을 수 있으며, 여기서 덤프에 대한 데이터를 가져옵니다. 그런 다음 쿼리에서 "limit X"절을 사용하여 행 수를 제한 할 수 있습니다.


7

기본 순서는 ASC이므로이 상황에서는 거의 필요하지 않으므로 DESC를 즉시 사용할 수 있도록 적절한 데이터베이스 디자인이 필요합니다. 모든 테이블에 동일한 이름 (자연 또는 대리)을 가진 하나의 기본 키 열이있는 경우 다음을 사용하여 n 개의 최신 레코드를 쉽게 덤프 할 수 있습니다.

mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql

이것이 연관 테이블에서도 항상 PK ID 의 이름을 지정 하고 복합 PK를 피해야 하는 완벽한 이유입니다 (대신 키를 대신 사용).


1
이를 수행하고 (이름 ID와 복합 PK는 피함) 관계형 데이터베이스 이론을 무시해야합니다.
mpoletto

1
실제로 관계형 데이터베이스의 모범 사례에 따라 데이터베이스를 설계하고 데이터 및 엔티티를 기반으로 PK를 정의하는 경우 --option --where = "1 LIMIT 10000"을 사용할 수 있습니다. ORDER BY가 없으면 MySQL은 자연스러운 방식으로 주문하므로 PK의 색인 순서를 따르는 것과 동등한 방식으로 작동합니다. 그런 다음 관련 테이블의 모든 FK는 순서가 동일하므로 참조 테이블에 존재하는 데이터 만 갖습니다.
mpoletto

ID를 사용하는 것은 많은 개발자들의 진정한 재앙입니다. PK와 같은 ID를 갖는 것은 PK를 가지지 않는 것과 같습니다. 대부분의 경우 자동 증분 번호는 엔터티 데이터와 아무 관련이 없기 때문에 무결성이 손상되었습니다.
mpoletto

@mpoletto --where = "1 LIMIT 10000"은 처음 10000 개의 항목 만 선택합니다. 내 대답의 요점은 최신 X 항목을 얻는 방법을 보여 주려는 것이 었습니다. 이는 일반적으로 원하는 것입니다. 또한 명명 관계가 "관계형 데이터베이스 이론 무시"와 어떤 관련이 있는지 이해하지 못합니다. 제 대답을 잘못 이해했다고 생각합니다. EF, Django ORM 등과 같은 가장 인기있는 ORM은 기본적으로 PK- 열에 대해 "id"를 권장하고 권고합니다. users.id 대신 users.user_id를 말하는 것이 중복되기 때문입니다.
Andreas Bergström

"항상 PK의 이름을 지정하고 복합 PK를 피해야하는 완벽한 이유"가 있다고 말하면 관계형 데이터베이스 이론을 무시하는 것입니다. 이 ORM이 작동하려면 ID가있는 테이블이 필요하기 때문에 "가장 인기있는 ORM"에 대한 귀하의 주장은 유효하지 않습니다.
mpoletto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.