Mysqldump 출력을 용량이 제한된 원격 서버에 업로드하기 위해 더 작은 파일로 분할
대용량 데이터를 하나의 MySQL 데이터베이스에서 다른 MySQL 데이터베이스로 전송해야 하는 필요성 종종 발생하지만 제한된 파일 업로드 크기와 같은 제한으로 인해 문제가 발생할 수 있습니다. 이는 2MB보다 작은 압축된 .sql 파일만 허용하는 phpMyAdmin을 사용할 때 특히 중요합니다. 다행히도 이 장애물을 극복할 수 있는 솔루션이 있습니다.
이 문제를 해결하려면 mysqldump의 출력을 관리 가능한 덩어리로 꼼꼼하게 조각화하여 더 작은 형식으로 업로드할 수 있습니다. 안타깝게도 원격 서버에서 파일을 다시 연결할 수 없기 때문에 분할(1) 유틸리티를 사용할 수 없습니다.
대체 솔루션: MySQL 덤프 출력 조각화
split(1)에 대한 실용적인 대안은 다음 bash 스크립트에 나와 있습니다. 데이터베이스 덤프 파일을 개별 테이블에 해당하는 개별 .sql 파일로 능숙하게 분할합니다. 스크립트는 파일 분할을 위한 다용도 도구인 csplit을 활용하고 START를 전략적으로 사용하여 테이블 경계를 식별합니다.
#!/bin/bash # Adjust this to your specific scenario: START="/-- Table structure for table/" 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 a specific 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*
이 솔루션은 덤프 파일을 개별 테이블별 .sql 파일로 꼼꼼하게 분할하여 성공적으로 업로드되도록 합니다. 제한된 파일 용량에서도 원격 서버를 사용할 수 있습니다.
위 내용은 업로드 크기 제한을 극복하기 위해 대용량 MySQL 덤프 파일을 작은 파일로 분할하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!