importowanie dużego pliku SQL phpmyadmin

12

Próbuję zaimportować ten plik SQL do phpmyadmin i otrzymałem tę wiadomość

#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

Co mam zrobić, aby wykonać ten import?

udzielić krawca
źródło

Odpowiedzi:

12

Zakładając, że nie można dalej zwiększyć rozmiaru pamięci, istnieje kilka opcji.

  • Jeśli nie znasz linii poleceń i naprawdę chcesz pozostać przy imporcie w stylu GUI, możesz użyć BigDump ( http://www.ozerov.de/bigdump/ ). Użyłem go raz, ale minęło trochę czasu. Z tego, co pamiętam, pobierzesz plik o nazwie bigdump.php (z kilkoma instrukcjami) i umieścisz go na swoim serwerze internetowym w katalogu z plikiem zrzutu MySQL DB, który jest zbyt duży, aby go zaimportować przez PHPMYADMIN. Następnie przejdź do niego za pomocą przeglądarki - coś w rodzaju http://twoja-strona.com/bigdump.php .

  • Jeśli znasz linię poleceń i używasz systemu Linux, możesz użyć takiego kodu:

    mysql -u NAZWA UŻYTKOWNIKA -p DATABASENAME <NAZWA_PLIKU.sql

Baza danych i użytkownik (z uprawnieniami do bazy danych) muszą jednak istnieć przed uruchomieniem tej komendy. Uwaga: Skopiowałem powyższe polecenie z innego źródła. Zawsze wykonuję zrzuty i przywracam w następujący sposób: 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

  • Wreszcie, co najboleśniejsze, możesz zrzucić pojedyncze tabele lub grupy tabel na wystarczająco małe zrzuty. Następnie przywracaj te pojedyncze zrzuty pojedynczo za pomocą PHPMYADMIN.

Instrukcje FTP i PRZYWRACANIA:

Pobierz FileZilla tutaj: http://filezilla-project.org/download.php?type=client

Zazwyczaj możesz przesłać FTP na swój serwer (zwłaszcza host współdzielony), używając tego samego loginu i hasła, jak w przypadku SSH (logowanie z wiersza poleceń). Tylko upewnij się, że poprawnie skonfigurowałeś połączenie z serwerem w FileZilla.

Po podłączeniu domyślną ścieżką będzie prawdopodobnie folder $ HOME (na komputerach nix). Jeśli nie planujesz robić dużo FTP, po prostu zrzuć tam, co chcesz. Zawsze możesz przenieść go z wiersza poleceń.

Jeśli zrzucisz FTP MySQL Dump do folderu $ HOME, wówczas polecenie PRZYWRACANIA dla bazy danych o nazwie mydb i pliku zrzutu db o nazwie mydb.sql.gz (w folderze $ HOME) będzie:

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

gdzie oczywiście trzeba zmienić DB_USER i DB_PASSWORD na użytkownika i hasło ustawione dla DB.

Zapamiętaj:

  • Baza danych musi już istnieć (ale być pusta) przed wykonaniem polecenia PRZYWRACANIA
  • DB_USER i DB_PASSWORD muszą być skonfigurowane dla DB przed poleceniem RESTORE (możesz to zrobić z PHPMYADMIN - zakładka Uprawnienia)
  • Po skonfigurowaniu DB_USER z PHPMYADMIN domyślnie zezwala się tylko DB_USER na dostęp do DB z localhost (serwer, na którym DB jest hostowany). Zakładam, że jest to w porządku dla twojej dotacji na sytuację. Gdy przejdziesz do bardziej zaawansowanych DUMP-ów i PRZYWRACANIA, możesz chcieć to zrobić całkowicie z innej maszyny, co nie jest trudne, ale wymaga podania kilku dodatkowych informacji i DB_USER z odpowiednimi uprawnieniami.

FTP DB i PRZYWRÓĆ go ... Krok po kroku

  1. Znajdź skompresowany plik zrzutu MySQL na pulpicie (przykład: C: \ Web \ DB \ Dumps \ mydb.sql.zip)
  2. Pobierz i zainstaluj FileZilla
  3. W FileZilla przejdź do File-> Site Manager i kliknij przycisk Nowa strona (lewa dolna ćwiartka GUI). Ustaw hosta na domenę (Przykład: dest.com), która znajduje się na serwerze DESTINATION. Ustaw protokół na FTP lub SFTP (to zależy od twojego hostingu, zapytaj ich). Ustaw użytkownika i hasło (przykład: użytkownik = przyznanie, hasło = hasło przyznania) - jeśli protokołem FTP jest SFTP, powinien działać dowolny zestaw prawidłowych danych logowania SSH.
  4. (W FileZilla) Kliknij Połącz (najbardziej dolny lewy przycisk)
  5. (W FileZilla) Po połączeniu ze zdalnym serwerem (powinien to być serwer DESTINATION), skorzystaj z lewej strony FileZilla, aby przejść do katalogu, w którym znajduje się plik zrzutu znajdujący się w kroku 1. (Ścieżka do komputera lokalnego znajduje się po lewej stronie, mniej więcej w połowie drogi i jest oznaczona jako Witryna lokalna:. W naszym przykładzie pole tekstowe obok Witryna lokalna brzmiałoby C: \ Web \ DB \ Dumps.)
  6. (W FileZilla) Zlokalizuj etykietę witryny zdalnej: bezpośrednio po prawej stronie witryny lokalnej :.
  7. (W FileZilla) Nie ma technicznego powodu, dla którego nie można umieścić DB DUMP w folderze, w którym otwiera się FileZilla. Prawdopodobnie domyślnie będzie to katalog $ HOME. Jeśli nie masz żadnego powodu, aby umieścić zrzut DB w określonym katalogu - na przykład do własnych celów organizacyjnych - pozostaw ścieżkę w witrynie zdalnej w spokoju. Zapisz tę ścieżkę (Linux Przykład: / usr / grant).
  8. (W FileZilla) Znajdź plik na komputerze lokalnym w lewej połowie FileZilla tuż pod drzewem pokazanym pod lokalną witryną: etykieta znaleziona w kroku 5. Kliknij dwukrotnie ten plik, a FileZilla prześle go na FTP do twojej zdalnej strony.
  9. W PHPMYADMIN na serwerze DESTINATION utwórz nową bazę danych (wpisz mydb w polu tekstowym Utwórz nową bazę danych i kliknij przycisk Utwórz).
  10. (W PHPMYADMIN) Wybierz mydb z menu po lewej stronie.
  11. (W PHPMYADMIN) Kliknij kartę Uprawnienia (w prawym górnym rogu). Na tej stronie kliknij Dodaj nowego użytkownika.
  12. (W PHPMYADMIN-> Uprawnienia-> Dodaj nowego użytkownika) Podaj nazwę użytkownika (Przykład: mydb_grant) i hasło (Przykład: mydb_password). Z rozwijanego menu Host wybierz Lokalny. Upewnij się, że przycisk opcji „Przyznaj wszystkie uprawnienia do bazy danych” jest zaznaczony. Następnie kliknij Idź (w prawym dolnym rogu ekranu).
  13. SSH do serwera DESTINATION.
  14. (W terminalu SSH) Przejdź do katalogu zapisanego w kroku 7. Używając polecenia typu - cd $HOMElub cd /usr/grant. (Na maszynach z systemem Linux $ HOME jest zmienną środowiskową, która będzie równa coś / usr / grant).
  15. (W terminalu SSH) Wykonaj następującą komendę: gunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb(nie ma spacji między -p a hasłem, ponieważ tak właśnie musi być, to nie jest literówka).

Po wykonaniu tego ostatniego polecenia przywrócono DB. Nie polecam używania nazwy użytkownika DB i hasła, które podałem, po prostu zastąp je bezpieczniejszymi własnymi wyborami.

DUMP i RESTORE na różnych serwerach bez FTP

Jeśli chcesz pominąć FTP i nie masz nic przeciwko ponownemu wykonaniu DUMP, możesz to zrobić w ten sposób:

  1. Zaloguj się do serwera DESTINATION (gdzie chcesz, aby rezydowała DB - nazwiemy to destination.com)
  2. Utwórz DB, użytkownika i odpowiednie uprawnienia, jak wspomniano powyżej, na serwerze DESTINATION
  3. Upewnij się, że uprawnienia na serwerze SOURCE pozwalają SOURCE_DB_USER na zdalny dostęp do bazy danych - albo zezwalaj na dostęp z dest.com lub z% (% - wszyscy i wszędzie, jeśli mają odpowiednią nazwę użytkownika i hasło)
  4. Na serwerze DESTINATION uruchom: mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 > $HOME/mydb.sql.gzgdzie source.com jest serwerem SOURCE (gdzie obecnie rezyduje DB)
  5. Następnie (na serwerze DESTINATION) uruchom: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

To powinno być wszystko, co musisz zrobić, aby przenieść bazę danych z jednego serwera na inny. Zastrzeżeniem jest to, że robiłem to tylko na moim dedykowanym Ubuntu (ze standardowym LAMP) i serwerach VPS Dreamhost (które, jak sądzę, uruchamiają CentOS, ale mogę się mylić).


źródło
3

Możesz:

  • zwiększać memory_limit
  • zwiększać post_max_size
  • zwiększać max_execution_time
  • po wykonaniu wszystkich tych czynności należy ponownie uruchomić Apache.
  • lub użyj Big Dump
Salman
źródło
1

Czy plik SQL jest skompresowany? Miałem ten problem z skompresowanym plikiem sql o rozmiarze 6 MB. Rozpakowałem go do 53 MB nieskompresowanego pliku sql i zadziałało. Rozpakowywanie w toku pliku zrzutu musi pochłonąć całą pamięć.

Jeremy
źródło
0

jeśli masz dostęp ssh do serwera za pomocą mysql, to możesz w pewnym miejscu umieścić plik z zrzutem mysql, wpisz konsolę mysql:

mysql -u myUser myDatabase

Lub jeśli serwer mysql znajduje się w miejscu innym niż localhost i zezwala na połączenia nie tylko z localhost niż:

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

Następnie zostaniesz poproszony o podanie hasła dla użytkownika mysql. Teraz jesteś w konsoli mysql. Tutaj możesz wpisać

source ~/mydump.sql;

Zobaczysz, jak będą wykonywane polecenia z twojego zrzutu.

W tej metodzie nie obchodzą Cię żadne limity pamięci php.


źródło
0

jeśli rozmiar bazy danych jest większy niż 128 MB, podziel ją na części.

Użyj oprogramowania SQL Dump Splitter

SQL Dump Splitter to aplikacja o wielkości 430 KB, która daje całkowitą kontrolę nad dzieleniem dużych baz danych na mniejsze pliki SQL. Dzięki SQL Dump Splitter możesz:

  • Wybierz rozmiar każdej porcji
  • Wybierz pominięcie komentarzy (aby nawet zmniejszyć rozmiar bazy danych)
  • Zautomatyzuj aktywność.

źródło
jak zautomatyzować działanie? Używam rozdzielacza i nie mam pojęcia, jak to działa ... zakończyło dzielenie, nie mówiąc mi, na jakie części podzielił plik, a teraz nie ma pomocy ani często zadawanych pytań, które mogłyby pomóc w korzystaniu z niego.