programing

mysqldump에 의해 생성되는 방대한 라인 길이에 대처하는 방법

copysource 2023. 1. 24. 09:58
반응형

mysqldump에 의해 생성되는 방대한 라인 길이에 대처하는 방법

cron 작업에서 mysqldump를 사용하여 200만 행이 넘는 데이터베이스를 백업하고 있습니다.

명령줄에서 데이터로그를 복원하는 데 사용할 수 있는 텍스트 파일을 생성합니다.

적어도 ALTER와 UPDATE를 사용하여 값을 변경하고 테이블 또는 열 이름을 변경하는 빠른 방법으로 복원 전에 덤프를 편집하는 것이 도움이 될 것으로 생각했습니다.

큰 텍스트 파일을 편집하는 것은 귀찮지만, 250메가바이트의 데이터베이스 덤프에 300줄 정도밖에 없다는 것을 알고 놀랐습니다.각 행의 길이는 80만 자 정도였습니다.

라인 길이를 보다 제어하기 위해 덤프를 생성하는 다른 방법이 있습니까?

아니면 SED나 Perl 등의 툴을 사용하여 덤프를 후처리해야 합니까?

" " " 입니다.mysqldump는 1개의 생성합니다.INSERT테이블당 명령어를 사용하여 덤프된 테이블마다 삽입된 데이터가 1줄씩(매우 긴) 생성됩니다.이는 기본적으로 "배치" 삽입이 별도의 삽입을 생성하는 경우보다 훨씬 빠르기 때문입니다.INSERT모든 테이블에 있는 모든 레코드에 대해 쿼리합니다.

그런 게 mysqldump임의로 긴 행을 작성했습니다.하다★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

꼭 .INSERT를 여러같이 수 .

mysqldump --extended-insert=FALSE --complete-insert=TRUE ...

단, 이 형식에서는 복원 테이블이 오래 걸립니다.

오늘 MySQL 소스 코드를 참조하여 이 문제에 대한 해결책을 찾고 있었습니다.최대 행 길이는 MySQL 서버의 버퍼 크기와 일치해야 하는 변수 opt_net_buffer_length에 의해 적용됩니다.그것은 우스꽝스럽게 크다.

어쨌든, 이것은 옵션입니다.그냥 이렇게 해 주세요.

mysqldump --net_buffer_length=5000 ...

최소값은 4096 입니다.

MySQL 포럼에서 다음과 같은 답변을 발견했습니다.각 INSERT 그룹이 소스를 수정하지 않고 mysqldump만 사용하여서는 '\n'을 추가할 수 없다는 것을 알 수 있습니다.

확장 형식은 쉼표 또는 괄호를 기준으로 100% 올바르게 구문 분석할 수 없습니다. 필드를 카운트해야 합니다.최적의 솔루션은 출력 시 mysqldump를 줄 바꿈으로 수정하는 것입니다.

행 끝 콤마가 출력되는 할 수 . 3506행콤마입니다.
fputc(',',md_result_file); /* Always row break */

3506 행 바로 뒤에 이 행을 삽입하기만 하면 됩니다.
fputc('\n',md_result_file); /* Lon Binder says wrap that line! */

재실행 및 완료.

@http://forums.mysql.com/read.php?28,420002,426110#msg-426110 참조

고마워 론비!

(포럼이 사라질 경우를 대비해 MySQL 포럼의 콘텐츠를 포함시켰습니다.)

이 플래그도 동작합니다.

mysqldump --skip-extended-insert 

와 똑같다--extended-insert=FALSE.

정규식을 사용하여 선을 분할하는 것만으로는 충분하지 않습니다.따옴표와 이스케이프 문자를 올바르게 이해할 수 있는 파서가 필요합니다.

파서를 찾을 수 없었기 때문에 파서를 작성했습니다.http://blog.lavoie.sl/2014/06/split-mysqldump-extended-inserts.html

행이 매우 긴 SQL 덤프를 이미 가지고 있으며 쉽게 읽고 싶다면

cat dump.sql  | sed 's$VALUES ($VALUES\n($g' | sed 's$),($),\n($g' | less

cat dump.sql  | sed 's$VALUES ($VALUES\n($g' | sed 's$),($),\n($g' | grep something

python을 사용하여 덤프 파일을 후처리합니다.perl이나 sed보다 더 행복할 수 있습니다.

Linux 를 실행하고 있는 경우는, 이미 인스톨 되어 있습니다.Windows 를 실행하고 있는 경우는, 인스톨러에 문제가 없습니다.

단, 그 전에 SQL UPDATE 및 SQL ALTER 사용법을 배우십시오.올바른 방법으로 일을 처리하는 것이 가장 행복할 것입니다.

언급URL : https://stackoverflow.com/questions/1293529/how-to-deal-with-enormous-line-lengths-created-by-mysqldump

반응형