큰 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!