수백 MB를 넘는 덤프 파일을 phpMyAdmin 가져오기 화면에 올리면 업로드 자체가 거부되거나, 한참 돌다가 시간 초과로 멈추는 일이 흔합니다. phpMyAdmin은 결국 PHP로 돌아가는 웹 페이지라서 PHP의 업로드 크기 제한과 실행 시간 제한을 그대로 받기 때문입니다. 가져오기 화면에 표시되는 "최대 크기"도 php.ini 값에서 나온 숫자입니다.
php.ini에서 늘려야 할 값
1GB 정도를 올리려면 업로드 크기 두 개와 실행 시간을 같이 늘려 줍니다. 수정한 뒤에는 Apache(또는 PHP-FPM)를 재시작해야 반영됩니다.
post_max_size=1280M
upload_max_filesize=1280M
max_execution_time = 300 //increase time as per your server requirement.
post_max_size 는 요청 전체 크기 한도라서 upload_max_filesize 보다 작으면 의미가 없습니다. 둘 다 같은 값이거나 post_max_size 를 조금 더 크게 잡으세요. max_execution_time 은 초 단위이고 서버 상황에 맞게 늘리면 됩니다.
주의할 점이 하나 있습니다. 위 설정의 //increase time ... 부분은 설명용 문구이고, php.ini의 주석 기호는 // 가 아니라 ; 입니다. 그대로 붙여 넣지 말고 max_execution_time = 300 까지만 쓰거나, 설명을 남기고 싶으면 줄 앞에 ; 를 붙인 별도 줄로 쓰세요.
DB 크기가 훨씬 크다면 여유를 더 두는 편이 낫습니다. 아래처럼 실행 시간과 입력 시간을 사실상 끝없이 주고 메모리도 넉넉히 잡습니다.
max_execution_time = 200000
max_input_time = 200000
memory_limit = 1000M
upload_max_filesize = 750M
post_max_size = 750M
웹 말고 명령 프롬프트로 넣기
솔직히 1GB급이면 phpMyAdmin보다 mysql 클라이언트로 직접 넣는 게 빠르고 안정적입니다. 브라우저 업로드도 필요 없고 PHP 시간 제한도 받지 않습니다. WAMP 기준 경로는 이렇게 생겼고, 설치 위치와 MySQL 버전 폴더명은 환경마다 다르니 맞게 바꿔야 합니다.
C:\wamp\bin\mysql\mysql5.5.24\bin\mysql.exe -u root -p db_name < C:\some_path\your_sql_file.sql
실행하면 비밀번호를 묻고, 그다음엔 아무 출력 없이 한참 있다가 끝납니다. 진행률이 안 보여서 멈춘 것처럼 느껴지는데 그냥 기다리면 됩니다. db_name 데이터베이스는 미리 만들어 둬야 합니다. 그리고 < 리다이렉션은 cmd에서는 되지만 PowerShell에서는 동작하지 않으니 cmd 창에서 실행하세요.
MySQL server has gone away가 날 때
가져오는 도중 MySQL server has gone away 오류로 끊기면, 덤프 안의 INSERT 문 하나가 서버가 받는 패킷 크기보다 큰 경우가 많습니다. 덤프는 보통 여러 행을 한 INSERT에 몰아넣기 때문에 BLOB이나 긴 TEXT가 있는 테이블에서 잘 생깁니다. MySQL 설정 파일(my.ini, 리눅스는 my.cnf)의 [mysqld] 구역에서 값을 키우고 MySQL을 재시작합니다.
max_allowed_packet = 100M
php.ini 쪽 값과 my.ini 쪽 값을 헷갈리기 쉬운데, 업로드·실행 시간은 PHP, 패킷 크기는 MySQL 서버 설정입니다. 공유 호스팅처럼 두 설정을 직접 못 바꾸는 환경이라면 덤프를 테이블별로 쪼개서 여러 번 나눠 가져오는 게 현실적인 방법입니다.