2012-02-18 25 views
6

Mam skrypt php, który analizuje pliki XML i tworzy duży plik SQL, który wygląda mniej więcej tak:Jak importować duże pliki sql do tabeli mysql

INSERT IGNORE INTO table(field1,field2,field3...) 
VALUES ("value1","value2",int1...), 
("value1","value2",int1)...etc 

Plik ten sumuje się ponad 20GB (I testowałem na pliku 2,5 GB, ale też się nie udało).

Próbowałem polecenia jak: korzeń

mysql -u -p table_name < /var/www/bigfile.sql

to działa na mniejsze pliki, powiedzmy około 50MB. ale nie działa z większym plikiem.

Próbowałem:

mysql> source /var/www/bigfile.sql 

Próbowałem też mysqlimport jednak, że nie będzie nawet prawidłowo przetwarzać mój plik.

Ciągle otrzymuję błąd, który mówi

ERROR 2006 (HY000): MySQL server has gone away 

Happens ok. 30 sekund po rozpoczęciu wykonywania.

Ustawiłem allow_max_packet na 4GB, ale podczas weryfikacji z SHOW VARIABLES pokazuje tylko 1GB.

Czy można to zrobić bez marnowania kolejnych 10 godzin?

Odpowiedz

2

Spróbuj podzielić plik na kilka zapytań INSERT.

+0

dlaczego nie myślę o tym ... – nick

+0

po prostu zaimportowane 2,5 gb w około 5 minut. dzieki za sugestie! – nick

+0

Zobacz także ustawienie 'max_allowed_packet = 16M' w my.cnf - ustawienie go na coś bardzo dużego jak 16M pozwoli na większe pojedyncze wstawki –