2010-10-25 9 views
5

Ich lade eine große Textdatei in meine Datenbank durch LOAD DATA. Die Datei ist etwa 122.000 Zeilen lang. Ganz zu schweigen davon, dass die Datenbank bei AFTER INSERTs für diese Tabelle ausgelöst wird. Was genau passiert, ist, dass die Abfrage beginnen ausführt, hält für wie 15-20 Minuten ausgeführt wird und dann kehrt esLOAD DATA LOCAL INFILE verliert die Verbindung, wie kann ich das Timeout beheben?

Error Code: 2013 
Lost connection to MySQL server during query 

dann

Error Code: 2006 
MySQL server has gone away 

Nachdem die Fehler angezeigt, i die Abfrage erneut auszuführen, und es endet sofort;

0 row(s) affected 
Records: 122574 Deleted: 0 Skipped: 122574 Warnings: 0 

Und die Tabelle wird tatsächlich importiert;

select * from quote 
122574 row(s) returned 

Ich bin mit mysqld 5.1.51 auf Mac OS X 10.6.4 und meine Frage ist

LOAD data local INFILE 
     '/Users/ash/quotes/data.txt' 
     INTO TABLE quote fields 
     TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\r\n' 
      (quote.date,quote.ticker,quote.open, 
      quote.high,quote.low,quote.close,quote.volume,@market) 
      SET market = 'sp'; 

Es scheint, die db-Verbindung eine Zeitüberschreitung ist, wie kann ich dieses Problem beheben?

+0

Sie könnten in Erwägung ziehen, die AFTER INSERTs zu eliminieren und stattdessen ihre Operationen in Massen durchzuführen, nachdem die Datei geladen wurde. 122K Zeilen, besonders mit nur wenigen numerischen Spalten, sind * winzig * und sollten eigentlich nur ein paar Sekunden dauern, höchstens ... – user359996

Antwort

0

Sie können das Zeitlimit ändern, indem Sie beim Starten von mysqld die Variable wait_timeout setzen. Siehe MySQL documentation

Verwandte Themen