테이블의 일부에 대해 mysqldump를 사용하는 방법
따라서 내보낼 수 있는 것은 다음과 같은 테이블뿐입니다.
mysqldump -u root -p db_name table_name > table_name.sql
mysqldump를 사용하여 테이블의 일부만 내보낼 수 있는 방법이 있습니까?예를 들어 0 - 1,000,000 행, 1,000,000 - 2,000,000 행 등입니다.
mysqldump와 쿼리 중 어느 쪽을 사용해야 합니까?
mysqldump -uroot -p db_name table_name --where='id<1000000'
또는 를 사용할 수 있습니다.
SELECT * INTO OUTFILE 'data_path.sql' from table where id<100000
mysqldump --skip-triggers --compact --no-create-info --user=USER --password=PASSWORD -B DATABASE --tables MY_TABLE --where='SOME_COLUMN>=xxxx' > out.sql
덤프된 파일이 SQL 선택을 사용하는 파일과 다릅니다.두 번째 접근법에서는 단순히 mysql database < table을 사용하여 테이블을 데이터베이스에 덤프할 수 없습니다.
내 경우 다음을 수행해야 합니다.
SELECT *
INTO OUTFILE 'C:\Documents and Settings\Anton.Zarkov\Desktop\joomla_export\data_AZ.sql'
FROM `jos_glossary`
WHERE id>6000
- 구문 오류가 없습니다. 쿼리가 통과합니다.
- 그 결과는
NULL- 행이 적혀있지 않습니다. (확실합니다.- 마지막 아이디는 6458입니다. - 쿼리를 반복하면
n error occurs => #1086 - File 'C:Documents and SettingsAnton.ZarkovDesktopjoomla_exportdata_AZ.sql' already exists - 유감스럽게도 디스크 C 어디에서도 "기존" 파일을 찾을 수 없습니다.그게 어디에 있지요?
- 그 결과는
조건은 phpMyAdmin SQL Dump, 버전 3.4.5, 호스트: localhost, 서버 버전: 5.5.16, PHP 버전: 5.3.8입니다.
mysqldump -uroot -p db_name table_name --where'id<1000000' > yourdumpname.sql
다음 쿼리는 ID 범위 중에서 ID 대신 date_created 또는 any를 사용할 수 있는 것을 선택합니다.
mysqldump --opt --host=dns --user=user_name --password=your_passwd db_name --tables table_name --where "id > 1 and id < 100 " > /file_name.sql
예:--where="date_created > '2019-01-18' "--> ID가 인스톨 됩니다.
이 질문은 여전히 최신입니다.대부분의 사람들은 mysql과 mysqldump의 단일 스레드 설계에 시달리기 때문에 이런 종류의 질문을 발견할 것입니다.
행이 수백만 개 또는 수십억 개일 경우 내보내기에 며칠(~주)이 걸릴 수 있으므로 데이터의 일부만 내보내게 됩니다.
이 문제를 해결하기 위한 빠른 해킹은 데이터의 일부를 내보내는 것입니다. 이 방법은 숫자 키(자동 증분 ID 등)가 있는 경우에 가장 적합합니다.
다음은 테이블을 일반보다 20~100배 빠르게 내보내는 방법에 대한 Linux/unix의 예를 보여 줍니다.
Assumed column "id" is from 1 to 10000000
Assumed cpu has 16 threads
Assumed disk is an ssd or nvme
seq 0 1000 | xargs -n1 -P16 -I{} | mysqldump -h localhost --password=PASSWORD --single-transaction DATABASE TABLE --where "id > {}*10000 AND id < {}*10000+10000" -r output.{}
위의 코드는 16개의 스레드를 실행하므로 정상의 1/10으로 내보내기까지의 시간이 대략 단축됩니다.또한 병렬로 로드할 수 있는 16개의 파일을 생성하여 로드 속도를 최대 10배 향상시킵니다.
강력한 서버에서는 최대 150개의 병렬 스레드를 사용합니다.이는 실행 중인 디스크와 CPU의 종류에 따라 달라집니다.
이 방법을 약간 개선하면 1주일 수출의 로드 또는 내보내기를 몇 시간으로 줄일 수 있습니다.
네트워크를 통해 이 작업을 수행하는 경우 --compress는 많은 도움이 됩니다.insert 문을 무시하면 대용량 데이터에서는 피할 수 없는 mysql 인덱스의 장애에도 도움이 됩니다.데이터를 'bload -f'로 로드하면 이러한 경우 중지되는 것을 방지할 수 있습니다.
추신: 큰 테이블의 끝에 인덱스와 키를 추가할 때 mysql 옵션을 사용하지 않습니다.
언급URL : https://stackoverflow.com/questions/5658284/how-to-use-mysqldump-for-a-portion-of-a-table
'programing' 카테고리의 다른 글
| 봄에 스케줄된 작업을 조건부로 활성화 또는 비활성화하려면 어떻게 해야 합니까? (0) | 2022.11.05 |
|---|---|
| MySQL 데이터베이스에서 열 이름을 포함한 Panda 데이터 프레임으로 데이터 가져오기 (0) | 2022.11.05 |
| 내부 또는 외부 명령으로 인식되지 않습니다. (0) | 2022.11.02 |
| 테스트 클래스에 대해서만 비공개 방법을 공개하기 위한 주석 (0) | 2022.11.02 |
| 호스트 경로 볼륨이 있는 kubernetes 포드 내에서 mariadb가 크래시함 (0) | 2022.11.02 |