큰 SQL 파일 phpmyadmin 가져 오기


12

phpmyadmin 에서이 SQL 파일을 가져 오려고 하는데이 메시지가 나타납니다.

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 
'<br /> <b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tr' at line 1

이 가져 오기를 수행하려면 어떻게해야합니까?

답변:


12

메모리 크기를 더 늘릴 수 없다고 가정하면 몇 가지 옵션이 있습니다.

  • 명령 행에 익숙하지 않고 실제로 GUI 스타일 가져 오기를 사용하려면 BigDump ( http://www.ozerov.de/bigdump/ )를 사용할 수 있습니다 . 한 번 사용했지만 오래되었습니다. 내가 기억하는 것에서 bigdump.php 파일 (일부 지침 포함)을 다운로드하여 PHPMYADMIN을 통해 가져올 수없는 너무 큰 MySQL DB 덤프 파일이있는 디렉토리의 웹 서버에 저장합니다. 그런 다음 http://your-website.com/bigdump.php 와 같은 브라우저를 사용하여 탐색하십시오 .

  • 명령 행에 익숙하고 Linux 기반 시스템을 사용하는 경우 다음과 같은 코드를 사용할 수 있습니다.

    mysql -u USERNAME -p DATABASENAME <FILENAME.sql

이 명령을 실행하기 전에 데이터베이스 및 사용자 (데이터베이스에 대한 권한이있는)가 있어야합니다. 참고 위의 명령을 다른 소스에서 복사했습니다. 항상 덤프와 복원을 다음과 같이 수행합니다. DUMP : mysqldump -u DB_USER -h DB_HOST -pDB_PASSWORD DB_NAME | gzip -9 > DB_NAME.sql.gz RESTORE :gunzip < PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

  • 마지막으로 가장 고통스럽게도 개별 테이블 또는 테이블 그룹을 작은 덤프로 덤프하도록 선택할 수 있습니다. 그런 다음 PHPMYADMIN을 통해 이러한 개별 덤프를 한 번에 하나씩 복원하십시오.

FTP 및 복원 지침 :

여기에서 FileZilla를 다운로드하십시오 : http://filezilla-project.org/download.php?type=client

일반적으로 SSH와 동일한 로그인 및 비밀번호 (명령 줄 로그인)를 사용하여 서버 (특히 공유 호스트)에 FTP로 연결할 수 있습니다. FileZilla에서 서버와의 연결을 올바르게 설정하십시오.

연결되면 기본 경로는 $ HOME 폴더 일 것입니다 (nix 머신의 경우). 많은 FTP 작업을 계획하지 않는다면 원하는 것을 덤프하십시오. 항상 명령 행에서 이동할 수 있습니다.

MySQL 덤프를 $ HOME 폴더에 FTP로 저장 한 경우 myDB라는 DB 및 mydb.sql.gz ($ HOME 폴더에 있음)의 db 덤프 파일에 대한 RESTORE 명령은 다음과 같습니다.

gunzip < $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb

여기서 DB_USER 및 DB_PASSWORD 값을 DB에 대해 설정 한 사용자 및 비밀번호로 변경해야합니다.

생각해 내다:

  • RESTORE 명령이 실행되기 전에 DB가 이미 존재해야하지만 비어 있어야합니다.
  • RESTORE 명령 전에 DB에 대해 DB_USER 및 DB_PASSWORD를 설정해야합니다 (PHPMYADMIN-권한 탭에서 수행 할 수 있음).
  • PHPMYADMIN에서 DB_USER를 설정하면 기본적으로 DB_USER가 로컬 호스트 (DB가 호스팅되는 서버)에서만 DB에 액세스 할 수 있습니다. 상황 보조금에 적합하다고 가정합니다. 고급 DUMP 및 RESTORE에 들어가면 완전히 어렵지 않지만 몇 가지 더 많은 정보가 제공되고 DB_USER에게 적절한 권한이 필요한 다른 머신에서 수행 할 수 있습니다.

DB를 FTP로 저장하고 복원하십시오 ... 단계별

  1. 데스크탑에서 압축 된 MySQL 덤프 파일을 찾으십시오 (예 : C : \ Web \ DB \ Dumps \ mydb.sql.zip)
  2. FileZilla 다운로드 및 설치
  3. FileZilla에서 File-> Site Manager로 이동하여 New Site 버튼 (GUI의 왼쪽 아래 사분면)을 클릭하십시오. DESTINATION 서버에있는 도메인을 호스트로 설정하십시오 (예 : dest.com). 프로토콜을 FTP 또는 SFTP로 설정하십시오 (이것은 호스팅에 따라 다릅니다). 사용자 및 비밀번호를 설정하십시오 (예 : User = grant, Password = grant 's password)-FTP 프로토콜이 SFTP이면 유효한 SSH 로그인 신임 정보 세트가 작동해야합니다.
  4. (FileZilla에서) 연결을 클릭하십시오 (맨 왼쪽 아래 버튼)
  5. (FileZilla에서) 원격 서버 (DESTINATION 서버 여야 함)에 연결되면 FileZilla의 왼쪽을 사용하여 1 단계에서 찾은 덤프 파일이있는 디렉토리로 이동하십시오. (로컬 머신의 경로는 맨 왼쪽에 약 절반 정도 내려 가며 로컬 사이트 :라는 레이블이 붙어 있습니다.이 예에서 로컬 사이트 옆의 텍스트 상자는 C : \ Web \ DB \ Dumps를 읽습니다.)
  6. (FileZilla에서) 로컬 사이트 :의 바로 오른쪽에서 원격 사이트 : 레이블을 찾으십시오.
  7. (FileZilla에서) FileZilla가 열리는 폴더에 DB DUMP를 넣을 수없는 기술적 이유는 없습니다. $ HOME 디렉토리가 기본값 일 것입니다. 조직의 목적과 같은 특정 디렉토리에 DB 덤프를 넣을 이유가없는 경우 원격 사이트에만 경로를 두십시오. 해당 경로를 적어 두십시오 (Linux 예 : / usr / grant).
  8. (FileZilla에서) 5 단계에서 찾은 로컬 사이트 : 레이블 아래에있는 트리 바로 아래의 FileZilla 왼쪽 절반에서 로컬 컴퓨터에서 파일을 찾으십시오. 해당 파일을 두 번 클릭하면 FileZilla가 원격 사이트로 FTP를 보냅니다.
  9. DESTINATION 서버의 PHPMYADMIN 내에서 새 데이터베이스를 작성하십시오 (새 데이터베이스 작성 텍스트 상자에 mydb를 입력하고 작성 단추를 클릭하십시오).
  10. (PHPMYADMIN에서) 왼쪽 메뉴에서 mydb를 선택하십시오.
  11. (PHPMYADMIN에서) 권한 탭을 클릭하십시오 (오른쪽 위). 해당 페이지에서 새 사용자 추가를 클릭하십시오.
  12. (PHPMYADMIN-> 권한-> 새 사용자 추가) 사용자 이름 (예 : mydb_grant)과 비밀번호 (예 : mydb_password)를 제공하십시오. 호스트 드롭 다운에서 로컬을 선택하십시오. "데이터베이스에 대한 모든 권한 부여"옆의 단일 선택 단추가 선택되어 있는지 확인하십시오. 그런 다음 이동 (화면 오른쪽 하단)을 클릭하십시오.
  13. DESTINATION 서버로 SSH 연결하십시오.
  14. (SSH 터미널에서) 7 단계에서 적어 둔 디렉토리로 이동하십시오.- cd $HOME또는 cd /usr/grant. (Linux 시스템에서 $ HOME은 / usr / grant와 같은 환경 변수입니다.)
  15. (SSH 터미널에서) 다음 명령을 실행하십시오. gunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb(-p와 비밀번호 사이에는 공백이 없어야합니다. 이는 오타가 아닙니다.)

마지막 명령이 완료되면 DB가 RESTORED되었습니다. 제공 한 DB 사용자 및 비밀번호를 사용하는 것은 권장하지 않으며보다 안전한 사용자 선택으로 교체하십시오.

FTP가없는 다른 서버에서 덤프 및 복원

FTP 항목을 건너 뛰고 DUMP를 다시 실행하는 것을 신경 쓰지 않으려면 다음과 같이하십시오.

  1. DESTINATION 서버에 로그인하십시오 (DB가 상주 할 곳-destination.com이라고 함).
  2. DESTINATION 서버에서 위에서 언급 한대로 DB, 사용자 및 적절한 권한을 작성하십시오.
  3. SOURCE 서버의 권한으로 SOURCE_DB_USER가 원격으로 DB에 액세스 할 수 있는지 확인하십시오. dest.com 또는 % (%-모든 사용자 및 올바른 사용자 이름과 비밀번호가있는 모든 곳에서 액세스)
  4. DESTINATION 서버에서 다음을 실행하십시오. mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 > $HOME/mydb.sql.gz여기서 source.com은 SOURCE 서버 (DB가 현재 상주하는 서버)입니다.
  5. 그런 다음 DESTINATION 서버에서 다음을 실행하십시오. gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

한 서버에서 다른 서버로 DB를 이동하기 위해 필요한 모든 것입니다. 주의 사항은 필자가 자신의 전용 우분투 (표준 LAMP 사용)와 Dreamhost의 VPS 서버 (CentOS를 실행한다고 생각하지만 잘못 될 수 있음)에서만 수행 한 것입니다.


3

당신은 할 수 있습니다 :

  • 증가하다 memory_limit
  • 증가하다 post_max_size
  • 증가하다 max_execution_time
  • 이 모든 작업을 수행 한 후 Apache를 다시 시작해야합니다.
  • 또는 Big Dump를 사용하십시오

1

SQL 파일이 압축되어 있습니까? 6MB 압축 SQL 파일 에서이 문제가 발생했습니다. 압축을 푼 53MB의 압축되지 않은 sql 파일로 압축을 풀고 작동했습니다. 처리중인 덤프 파일의 압축을 풀면 모든 메모리가 소모되어야합니다.


0

mysql을 사용하여 서버에 ssh 액세스 권한이 있으면 mysql 덤프가있는 파일을 특정 위치에 배치 할 수있는 것보다 mysql 콘솔을 입력하십시오.

mysql -u myUser myDatabase

또는 mysql 서버가 localhost 장소가 아닌 다른 곳에 있고 localhost뿐만 아니라 다음과 같은 연결을 허용하는 경우 :

mysql -u myUser -h mysql.example.com myDatabase

mysql 사용자의 비밀번호를 묻는 메시지가 표시됩니다. 이제 당신은 mysql 콘솔에 있습니다. 여기에 입력 할 수 있습니다

source ~/mydump.sql;

덤프의 명령이 어떻게 실행되는지 볼 수 있습니다.

이 방법에서는 PHP 메모리 제한에 신경 쓰지 않습니다.


0

데이터베이스 크기가 128MB를 초과하면 데이터베이스를 부분적으로 분할하십시오.

사용 SQL 덤프 분배기 소프트웨어

SQL Dump Splitter는 430KB 응용 프로그램으로 대규모 데이터베이스를 더 작은 SQL 파일로 쉽게 분할 할 수있는 완벽한 제어 기능을 제공합니다. SQL Dump Splitter를 사용하면 다음을 수행 할 수 있습니다.

  • 각 청크의 크기를 선택하십시오
  • 주석을 건너 뛰도록 선택 (DB의 크기를 줄이려면)
  • 활동을 자동화하십시오.

활동을 어떻게 자동화합니까? 스플리터를 사용하고 어떻게 작동하는지 전혀 모릅니다 ... 파일을 분할하는 청크를 말하지 않고 분할을 완료했으며 이제는 파일 사용에 도움이되는 도움말이나 FAQ가 없습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.