MySQL - Daten importieren und exportieren

Aus Wikizone
Wechseln zu: Navigation, Suche

Das Problem beim Datenimport und Export ist oft die konvertierung von Datenformaten, Zeichensatz etc.

Siehe auch:

http://wiki.zone30.info/wikizone/index.php/Typo3_-_Update#Datenbank_.C3.BCber_Root_Shell_sichern

Performance verbessern[Bearbeiten]

Manche Datenbankserver sind Schrott, manchmal hat man große Dateien. Wie kann man die Performance beim Import verbessern.

Bei InnoDb Tabellen[Bearbeiten]

When importing data into InnoDB, make sure that MySQL does not have autocommit mode enabled because that requires a log flush to disk for every insert. To disable autocommit during your import operation, surround it with SET autocommit and COMMIT statements:

SET autocommit=0;
... SQL import statements ...
COMMIT;

If you use the mysqldump option --opt, you get dump files that are fast to import into an InnoDB table, even without wrapping them with the SET autocommit and COMMIT statements.

If you have UNIQUE constraints on secondary keys, you can speed up table imports by temporarily turning off the uniqueness checks during the import session:

SET unique_checks=0;
... SQL import statements ...
SET unique_checks=1;

For big tables, this saves a lot of disk I/O because InnoDB can use its insert buffer to write secondary index records in a batch. Be certain that the data contains no duplicate keys.

If you have FOREIGN KEY constraints in your tables, you can speed up table imports by turning the foreign key checks off for the duration of the import session:

SET foreign_key_checks=0;
... SQL import statements ...
SET foreign_key_checks=1;

For big tables, this can save a lot of disk I/O.

Beispiel Autohaus Wetzel[Bearbeiten]

Die Daten für die Jahreswagen liegen als Excel Liste vor. Die Datenbank ist eine mySQL DB in der Version 3.23.

  1. Kopieren der Daten aus der Excel-Liste per copy & paste und Prüfen der Formate bzw. Formate verändern (Datum, Tausenderpunkte raus, Gänsefüsschen raus...)
  2. Zusätzliche Daten generieren z.B. Händlermarge über eine Excel Funktion dazurechnen (am besten eine Vorlage nutzen und die Daten dort reinkopieren)
  3. Als .csv Datei speichern.
  4. Umwandlung in sql Datei weil die alte Mysql Version keine .csv lesen kann. Dazu am einfachsten eine Lokale neuere mysql Version nehmen, csv Daten einspielen und danach als .sql Datei exportieren (
  5. Einspielen der .sql Datei z.B. über phpMyAdmin

Einstellungen: als .csv Daten Speichern (aus OOffice: utf-8, Trennzeichen ; Texttrenner Gänsefüßchen

Import in moderner mySQL : utf-8 als Importformat und Tabelle in benötigtem Zeichensatz anlegen

Export als SQL mit

  • Kompatibilitätsmodus,
  • Struktur mit Drop Table und kompletten Inserts.
  • Dabei ruhig die Spaltenüberschriften mitnehmen, die eignen sich nachher gut zur Kontrolle und können leicht über phpMyAdmin gelöscht werden.

Import in alter Datenbank über SQL Statement (als File)


Datum in Unix Timestamp umwandeln[Bearbeiten]

Oft liegt ein Datum aus einer Exel oder OpenOffice Calc Tabelle als Datum vor und man kann es nicht ohne weiteres vor dem Import umwandeln. In diesem Falle hilft ein Trick.

1. Datumsformat in Tabellenkalkulation: YYYY-MM-DD erzeugen

2. Dieses Datum in Text-Feld in mySQL speichern

3. Umwandeln mit:

  UPDATE 'tabellenname' SET  datumsfeld=UNIX_TIMESTAMP(
datumsfeld
) WHERE 1 

4. Struktur des Feldes umwandeln in Timestamp oder int11