2012-09-08 5 views
1

레코드 수가 많은 MySQL 테이블이 있는데, 백만 가지 레코드가있는 .CSV 청크로 내보낼 수있는 쉬운 방법이 있습니까?수백만 개의 레코드가있는 MySQL 테이블을 청크로 내 보냅니 까?

+0

왜 청크가 필요한지 공유 할 수 있습니까? 예 : 내보내기에 너무 오래 걸리는가 (테이블 잠금), 또는 추가 처리를 위해 있습니까? – Till

+0

클라이언트가 Excel에서 특정 범위를 열 수 있기를 원합니다. –

답변

5

나는 (그렇지 않으면, 일부 잠금 앱을 가져 오지 않는 가정 사용 읽기 노예)이 작업을 수행 할 것입니다 :

mysqldump -u user -pPASS --skip-extended-insert --no-create-info --no-create-db --compact > your.sql 

이 행당 INSERT 문에 당신에게 파일을 제공해야합니다.

그런 split를 사용

split -l 1000000 your.sql your-sql 

your-sql로 시작 파일을 생성해야 - 1,000,000 각각. split은 Linux, Unix 및 MacOSX에서 사용할 수 있습니다.

도움이 될지 알려주세요.

+0

Sweeeeeet! 스플릿은 굉장합니다. 고마워 할 때까지! –

+0

도와 드리겠습니다! ;) – Till

4

은 단지뿐만 아니라 작동 청크,하지만 여기에 솔루션입니다하지 그렇지 않으면 데이터베이스가 얻을 것이다,

SELECT * 
INTO OUTFILE 'file_0.csv' -- Change the filename here 
FIELDS 
    TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '"' 
    ESCAPED BY '\\' 
    LINES TERMINATED BY '\n' 
FROM table 
WHERE id BETWEEN 0 AND 1000000 -- And change the range here 

는 당신이 인덱스 컬럼에 where로 범위를 제한 할 수 있습니다 마십시오 매우 무거운 짐.

+0

백만 단위의 범위를 수동으로 변경하지 않고 수행 할 수있는 방법은 무엇입니까? –

+0

스크립트를 작성하여 (아마도 MySQL의 저장 프로 시저를 사용하여) 자동화 할 수 있습니다. 게다가 스크립트를 내보내고 나중에 나눌 수 있습니다. 다른 답변의 Till 쇼와 같습니다. – Wolph

관련 문제