# Große Datei in MySQL importieren



## fatfox (1. Dez 2010)

Hallo Leute,

ich habe ein Problem mit Große Daten importieren.

My Java Programm liefert mir eine große Datenmenge als Ergebnis. Ich habe sie gespeichert als CSV Datei. Sie ist c.a. 4 GB groß.

Ich möchte jetzt die Daten im MySQL eine Tabelle importieren mit hilfe von Phpmyadmin. 

Meine Frage sind:

1. Phpmyadmin erlaubt nur 2 MB Datei zu importieren. Wo kann ich die Einstellung ändern? Ist es überhaupt möglich mit Phpmyadmin?

2. Oder wäre es besser und schneller, wenn ich die Datei direkt von meinem Java Program in  MySQL Tabelle hinzufügen ( dann braucht man ja den csv datei nicht mehr)?

Vielen Dank für eure Hilfe


----------



## Gast2 (1. Dez 2010)

Wenn du eh schon über ein externes Tool importieren willst mach es doch direct mit den mysql Kommadozeilenwerkzeugen?

Wenn du die möglichkeit hast das direkt "online" mit dem Programm machst das die Daten produziert wäre das natürlich besser. Dann sparst du dir den import Schritt.


----------



## maki (1. Dez 2010)

1. k.A.
2. MySQl kann auch direkt CSV Dateien importieren, siehe die Doku. Kannst es natürlich aus mit einem Javaprogramm machen.


----------



## fatfox (1. Dez 2010)

Hallo fassy and maki,

was ich jetzt von meinem Java buch gelernt habe, ist wie folgendes:

Statement stmt;
stmt.executeUpdate("INSERT INTO xxx VALUES (...)");

Also für jeder Zeile muss ich ein mal "stmt.executeUpdate(...)" durchführen. Aber ich habe 150 millionen Zeilen, wird es nicht zu langsam?


----------



## Gast2 (1. Dez 2010)

Dann würde ich eher ein PreparedStatement verwenden oder da es eine MySQL ist ein Bulk-Insert mit 5000* Blöcken oder so etwas.

Mit PreparedStatment:

```
PreparedStatement ps = connection.prepareStatement ("INSERT INTO tabelle TABLENAME(spalte1, spalte2) VALUES (?, ?)";
    while (...) {
          ps.setString (1, "...");
          ps.setString (2, "...");
          ps.addBatch ();
    }
    ps.executeBatch ();
```

Mit Bulk-Insert:

```
INSERT INTO x (a,b)
VALUES 
 ('1', 'one'),
 ('2', 'two'),
 ('3', 'three'),
 ...
```

* Größe variable zu den Rahmenbedingungen wie der Verbindung zum Server, RAM Auslastung etc.


----------



## fatfox (1. Dez 2010)

Danke Fassy!!!


----------



## fastjack (1. Dez 2010)

Wenn es wirklich eine große Datei ist, würde ich das immer mit Boardmitteln machen. Das geht immer schneller und vor allem auch ohne Sorgen


----------



## fatfox (1. Dez 2010)

fastjack hat gesagt.:


> Wenn es wirklich eine große Datei ist, würde ich das immer mit Boardmitteln machen. Das geht immer schneller und vor allem auch ohne Sorgen



Hi fastjack, kannst du einbisschen mehr erklären, wie man das macht? Ich habe noch keine informatio über die mysql boardmitteln in google gefunden.


----------



## fastjack (1. Dez 2010)

so wie fassy das schon geschrieben hat, per MySql-Kommandozeile.


----------



## Gast2 (1. Dez 2010)

MySQL :: MySQL 5.1 Reference Manual :: 12.2.6 LOAD DATA INFILE Syntax
MySQL :: MySQL 5.0 Reference Manual :: 4.5.5 mysqlimport ? A Data Import Program


----------



## z-mon (6. Dez 2010)

Wenn du zum Beispiel Zugriff über SSH hast genügt auch 


```
source /ich/bin/ein/SQL/File.sql
```

Voraussetzung ist natürlich das du dich über

```
mysql -u <user> -p
```

eingeloggt hast.

Grüße


----------

