대용량 MySQL 덤프를 더 작은 파일로 분할하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-24 22:39:11
원래의
220명이 탐색했습니다.

How to Split a Large MySQL Dump into Smaller Files?

큰 mysqldump 출력을 작은 파일로 분할

한 데이터베이스에서 다른 데이터베이스로 테이블을 전송해야 하지만 mysqldump의 덤프 출력은 특정 업로드 제한에 비해 너무 큰 경우가 많습니다. 이 기사에서는 대용량 mysqldump 출력을 관리 가능하고 작은 파일로 분할하는 기발한 솔루션을 살펴봅니다.

셸 스크립팅에서 제안하는 한 가지 잠재적 접근 방식은 덤프를 각 테이블에 대한 별도의 파일로 분할하는 것입니다. 이는 csplit 명령을 사용하고 테이블 구조 마커를 분할 지점으로 지정하여 달성할 수 있습니다.

이 기술을 사용하는 다음 bash 스크립트를 고려하십시오.

#!/bin/bash

####
# Split MySQL dump SQL file into one file per table
# based on https://gist.github.com/jasny/1608062
####

#adjust this to your case:
START="/-- Table structure for table/"
# or 
#START="/DROP TABLE IF EXISTS/"


if [ $# -lt 1 ] || [[  == "--help" ]] || [[  == "-h" ]] ; then
        echo "USAGE: extract all tables:"
        echo "  DUMP_FILE"
        echo "extract one table:"
        echo "  DUMP_FILE [TABLE]"
        exit
fi

if [ $# -ge 2 ] ; then
        #extract one table 
        csplit -s -ftable  "/-- Table structure for table/" "%-- Table structure for table \`\`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1"
else
        #extract all tables
        csplit -s -ftable  "$START" {*}
fi

[ $? -eq 0 ] || exit

mv table00 head

FILE=`ls -1 table* | tail -n 1`
if [ $# -ge 2 ] ; then
        # cut off all other tables
        mv $FILE foot
else
        # cut off the end of each file
        csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*}
        mv ${FILE}1 foot
fi

for FILE in `ls -1 table*`; do
        NAME=`head -n1 $FILE | cut -d$'x60' -f2`
        cat head $FILE foot > "$NAME.sql"
done

rm head foot table*
로그인 후 복사

이 스크립트는 csplit을 사용하여 덤프 파일을 분할합니다. 각 파일의 이름은 해당 테이블의 이름을 따서 개별 테이블 파일로 만듭니다. 이를 통해 나중에 단일 파일로 쉽게 재조립할 수 있습니다. 이 스크립트를 사용하려면 첫 번째 인수로 덤프 파일의 경로를 제공하고 선택적으로 두 번째 인수로 추출할 특정 테이블을 지정하면 됩니다.

위 내용은 대용량 MySQL 덤프를 더 작은 파일로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿