importazione di file SQL di grandi dimensioni phpmyadmin


12

Sto cercando di importare questo file SQL in phpmyadmin e ho ricevuto questo messaggio

#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

Cosa devo fare per fare questa importazione?

Risposte:


12

Supponendo che non sia possibile aumentare ulteriormente la dimensione della memoria, ci sono un paio di opzioni.

  • Se non hai familiarità con la riga di comando e vuoi davvero attenerti a un'importazione in stile GUI, puoi usare BigDump ( http://www.ozerov.de/bigdump/ ). L'ho usato una volta ma è passato un po 'di tempo. Da quello che ricordo, scaricherai un file chiamato bigdump.php (con alcune istruzioni) e lo inserirai sul tuo server web nella directory con il file di dump di MySQL DB che è troppo grande per essere importato tramite PHPMYADMIN. Quindi naviga verso di esso usando il tuo browser - qualcosa come http://your-website.com/bigdump.php .

  • Se hai familiarità con la riga di comando e usi un sistema basato su Linux, puoi usare un codice come questo:

    mysql -u USERNAME -p DATABASENAME <FILENAME.sql

Il database e l'utente (con i privilegi del database) dovranno comunque esistere prima di eseguire questo comando. Nota Ho copiato il comando sopra da un'altra fonte. Faccio sempre i miei dump e ripristini in questo modo: 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

  • Infine, e più dolorosamente, potresti scegliere di scaricare singole tabelle o gruppi di tabelle in discariche abbastanza piccole. Quindi ripristinare questi singoli dump uno alla volta tramite PHPMYADMIN.

Istruzioni FTP e RIPRISTINO:

Scarica FileZilla qui: http://filezilla-project.org/download.php?type=client

In genere puoi FTP nel tuo server (in particolare un host condiviso) usando lo stesso login e password che utilizzeresti per SSH (il tuo login dalla riga di comando). Assicurati di impostare correttamente la connessione al tuo server in FileZilla.

Una volta connesso, il tuo percorso predefinito sarà probabilmente la tua cartella $ HOME (su macchine nix). Se non hai intenzione di fare molto FTPing, scarica quello che vuoi lì. Puoi sempre spostarlo dalla riga di comando.

Se hai FTP un dump MySQL nella tua cartella $ HOME, il comando RESTORE per un DB chiamato mydb e un file di dump db chiamato mydb.sql.gz (nella cartella $ HOME) sarebbe:

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

dove ovviamente dovresti modificare i valori DB_USER e DB_PASSWORD in quale utente e password hai impostato per il DB.

Ricorda:

  • Il DB deve già esistere (ma essere vuoto) prima dell'esecuzione del comando RESTORE
  • DB_USER e DB_PASSWORD devono essere impostati per il DB prima del comando RESTORE (è possibile farlo da PHPMYADMIN - scheda Privilegi)
  • Quando si configura DB_USER da PHPMYADMIN, l'impostazione predefinita consentirà solo a DB_USER di accedere al DB da localhost (il server su cui è ospitato il DB). Suppongo che questo vada bene per la concessione della tua situazione. Quando entri in DUMP e RESTORE più avanzati potresti voler farlo da un'altra macchina che non è difficile ma richiede un paio di informazioni in più e DB_USER con i privilegi adeguati.

FTP il DB e RIPRISTINO ... Passo dopo passo

  1. Individua il file di dump MySQL compresso sul desktop (esempio: C: \ Web \ DB \ Dumps \ mydb.sql.zip)
  2. Scarica e installa FileZilla
  3. In FileZilla vai su File-> Site Manager e fai clic sul pulsante Nuovo sito (quadrante in basso a sinistra della GUI). Impostare l'host su un dominio (esempio: dest.com) che risiede sul server DESTINATION. Imposta Protocollo su FTP o SFTP (dipende dal tuo hosting, chiedi loro). Imposta l'utente e la password (esempio: utente = concessione, password = password della concessione) - se il protocollo FTP è SFTP, qualsiasi set di credenziali di accesso SSH valide dovrebbe funzionare.
  4. (In FileZilla) Fai clic su Connetti (pulsante più in basso a sinistra)
  5. (In FileZilla) Una volta connesso al server remoto (dovrebbe essere il tuo server DESTINAZIONE) usa il lato sinistro di FileZilla per navigare nella directory in cui risiede il file di dump che hai individuato nel passaggio 1. (Il percorso per la macchina locale è all'estrema sinistra, circa a metà strada ed è etichettato Sito locale: nel nostro esempio la casella di testo accanto a Sito locale: leggerebbe C: \ Web \ DB \ Dumps.)
  6. (In FileZilla) Individua il sito remoto: etichetta direttamente a destra del sito locale :.
  7. (In FileZilla) Non esiste alcun motivo tecnico per cui non è possibile inserire DB DUMP nella cartella aperta da FileZilla. Probabilmente verrà impostato automaticamente sulla directory $ HOME. Se non hai motivo di inserire il dump del database in una directory specifica, ad esempio per i tuoi scopi organizzativi, lascia il percorso sul sito remoto da solo. Annota quel percorso (Esempio Linux: / usr / grant).
  8. (In FileZilla) Individua il file sul tuo computer locale nella metà sinistra di FileZilla appena sotto l'albero mostrato sotto il sito locale: etichetta che hai trovato nel passaggio 5. Fai doppio clic su quel file e FileZilla lo farà FTP sul tuo sito remoto.
  9. In PHPMYADMIN sul tuo server DESTINATION, crea un nuovo database (digita mydb nella casella di testo Crea nuovo database e fai clic sul pulsante Crea).
  10. (In PHPMYADMIN) Scegli mydb dal menu a sinistra.
  11. (In PHPMYADMIN) Fai clic sulla scheda Privilegi (in alto a destra). Una volta su quella pagina, fai clic su Aggiungi nuovo utente.
  12. (In PHPMYADMIN-> Privilegi-> Aggiungi nuovo utente) Fornire un nome utente (esempio: mydb_grant) e una password (esempio: mydb_password). Nel menu a discesa Host, seleziona Locale. Assicurarsi che il pulsante di opzione accanto a "Concedi tutti i privilegi sul database" sia selezionato. Quindi fare clic su Vai (in basso a destra dello schermo).
  13. SSH nel tuo server DESTINATION.
  14. (Nel terminale SSH) Passare alla directory annotata al passaggio 7. Utilizzando un comando come - cd $HOMEo cd /usr/grant. (Su macchine Linux $ HOME è una variabile d'ambiente che sarà uguale a / usr / grant.)
  15. (Nel tuo terminale SSH) Esegui il seguente comando: gunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb(non c'è spazio tra -p e la password perché è così che deve essere, che non è un errore di battitura).

Una volta completato l'ultimo comando, il DB è stato ripristinato. Non consiglio di utilizzare l'utente DB e la password forniti semplicemente sostituirli con scelte più sicure da soli.

DUMP e RESTORE su server diversi senza FTP

Se desideri saltare le cose FTP e non ti dispiace rifare DUMP, puoi farlo in questo modo:

  1. Accedi al server DESTINATION (dove vuoi che risieda il DB - lo chiameremo destination.com)
  2. Creare il DB, l'utente e i privilegi appropriati come indicato sopra sul server DESTINATION
  3. Assicurati che i privilegi sul server SOURCE consentano a SOURCE_DB_USER di accedere al DB da remoto - consenti l'accesso da dest.com o da% (% - tutti e ovunque se hanno il nome utente e la password corretti)
  4. Sul server DESTINATION eseguito: mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 > $HOME/mydb.sql.gzdove source.com è il server SOURCE (dove attualmente risiede il DB)
  5. Quindi (sul server DESTINATION) eseguire: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

Dovrebbe essere tutto ciò che devi fare per spostare il DB da un server a un altro. Un avvertimento è che l'ho mai fatto solo sul mio Ubuntu dedicato (con LAMP standard) e sui server VPS di Dreamhost (che credo eseguano CentOS ma potrei sbagliarmi).


3

Puoi:

  • aumentare memory_limit
  • aumentare post_max_size
  • aumentare max_execution_time
  • deve riavviare Apache dopo aver fatto tutto questo.
  • o usa Big Dump

1

Il tuo file SQL è compresso? Ho avuto questo problema con un file sql zippato da 6 MB. L'ho decompresso in un file sql non compresso da 53 MB e ha funzionato. La decompressione del file di dump in corso deve consumare tutta la memoria.


0

se hai accesso ssh al server con mysql, allora potresti posizionare il file con mysql dump in qualche posto, entra nella console mysql:

mysql -u myUser myDatabase

O se il server mysql si trova in un posto diverso da localhost e consente connessioni non solo da localhost di:

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

Di quanto ti verrà richiesta la password per il tuo utente mysql. Ora sei nella console mysql. Qui puoi digitare

source ~/mydump.sql;

Vedrai come verranno eseguiti i comandi dal tuo dump.

In questo metodo non ti interessa alcun limite di memoria php.


0

se la dimensione del database è superiore a 128 MB, dividere il database in parti.

Utilizzare il software SQL Dump Splitter

SQL Dump Splitter è un'applicazione da 430 KB che offre un controllo totale sulla suddivisione di enormi database in file SQL più piccoli con facilità. Con SQL Dump Splitter puoi:

  • Scegli la dimensione di ogni pezzo
  • Scegli di saltare i commenti (per ridurre anche le dimensioni del DB)
  • Automatizza l'attività.

come automatizzi l'attività? Uso lo splitter e non ho idea di come funzioni ... ha completato la divisione senza dirmi in quali blocchi ha diviso il file e ora nessun aiuto o FAQ per aiutarlo a usarlo.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.