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
'programing' 카테고리의 다른 글
이벤트 버블링 및 캡처란 무엇입니까? (0) | 2023.01.24 |
---|---|
MySQL에 여러 개의 열 외부 키가 있습니까? (0) | 2023.01.24 |
MySQL 데이터베이스를 메모리에서 완전히 실행하려면 어떻게 해야 합니까? (0) | 2023.01.24 |
PHP file_get_contents() 및 요청 헤더 설정 (0) | 2023.01.14 |
Windows 7에서 Android Studio 설치가 실패하여 JDK를 찾을 수 없습니다. (0) | 2023.01.14 |