Wie kann ich eine MDB-Datei (Access) in MySQL (oder eine einfache SQL-Datei) konvertieren?


76

Ist es möglich, einen Dump von SQL-Befehlen aus einer Microsoft Access-Datenbank zu erstellen? Ich hoffe, diese MDB-Datei zum Importieren in eine MySQL-Datenbank konvertieren zu können, damit ich den CSV-Schritt nicht durchlaufen muss.

Ich würde erwarten, dass sogar eine MSSQL-Dump-Datei noch funktionsfähige SQL-Befehle enthält, aber ich weiß nichts über MSSQL, bitte lassen Sie es mich wissen.

Antworten:


73

Sie möchten mdb in mysql konvertieren (direkte Übertragung in mysql oder mysql dump)?

Probieren Sie eine Software namens Access to MySQL aus .

Access to MySQL ist ein kleines Programm, das Microsoft Access-Datenbanken in MySQL konvertiert.

  • Assistentenoberfläche.
  • Übertragen Sie Daten direkt von einem Server auf einen anderen.
  • Erstellen Sie eine Dump-Datei.
  • Wählen Sie die zu übertragenden Tabellen aus.
  • Wählen Sie die zu übertragenden Felder aus.
  • Übertragen Sie passwortgeschützte Datenbanken.
  • Unterstützt sowohl gemeinsame Sicherheit als auch Sicherheit auf Benutzerebene.
  • Optionale Übertragung von Indizes.
  • Optionale Übertragung von Datensätzen.
  • Optionale Übertragung von Standardwerten in Felddefinitionen.
  • Identifiziert und überträgt Feldtypen für automatische Nummern.
  • Befehlszeilenschnittstelle.
  • Einfache Installation, Deinstallation und Aktualisierung.

Unter dem oben genannten Link finden Sie eine schrittweise Anleitung mit Screenshots.


2
Update: Die haben die kostenlose Version verkrüppelt. Suchen & Ersetzen funktioniert jedoch für kleinere Migrationen.
Teson

7
Es funktioniert übrigens für das neue .accdb Access-Format
Golimar

Fügen Sie einfach hinzu, dass die aktuelle Version des Programms nicht richtig funktioniert (zumindest konnte ich daraus schließen). Die Datei wird nicht ordnungsgemäß ausgegeben (was beim Importieren viele Fehler verursacht), und die direkte Verbindung zur Datenbank (auch auf dem lokalen Host) funktioniert nicht.
cool

3
Wenn Sie ein 64-Bit-Betriebssystem haben, benötigen Sie einen 32-Bit-ODBC-Treiber. dev.mysql.com/downloads/connector/odbc
blackandorangecat

1
7+ Jahre später, und dieses Programm ist immer noch nützlich (und gepflegt!)
Sean O

47

Wenn Sie Zugriff auf eine Linux-Box mit installierten mdbtools haben, können Sie dieses Bash-Shell-Skript verwenden (speichern Sie es als mdbconvert.sh):

#!/bin/bash

TABLES=$(mdb-tables -1 $1)

MUSER="root"
MPASS="yourpassword"
MDB="$2"

MYSQL=$(which mysql)

for t in $TABLES
do
    $MYSQL -u $MUSER -p$MPASS $MDB -e "DROP TABLE IF EXISTS $t"
done

mdb-schema $1 mysql | $MYSQL -u $MUSER -p$MPASS $MDB

for t in $TABLES
do
    mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 $t | $MYSQL -u $MUSER -p$MPASS $MDB
done

Um es aufzurufen, nennen Sie es einfach so:

./mdbconvert.sh accessfile.mdb mysqldatabasename

Es werden alle Tabellen und alle Daten importiert.


1
Vielen Dank für das Skript. Nur zwei Hinweise, ich denke, Sie können die AWKund GREPvars entfernen und ich habe die Optionen hinzugefügt -b strip -H, mdb-exportweil ich einige seltsame OLE-Objekte in mdb hatte und weil die Header zuvor geladen wurden. Ich denke, in einigen Fällen -b octalwürde es auch funktionieren, aber ich hatte Probleme mit den Binärdaten beim Laden in MySQL.
white_gecko

3
Ich importiere Tabellen mit Leerzeichen im Namen, und das hat bei mir nicht funktioniert. Ich musste IFS=$(echo -en "\n\b")nach dem Schebang hinzufügen .
Steve Almond

Genial! gelang es, MDB nach MySQL auf Mac zu exportieren. Das einzige, worüber ich gestolpert bin, waren Tabellennamen mit Leerzeichen, die jedoch durch Setzen von $ MYSQL -u $ MUSER -p $ MPASS $ MDB -e "DROP TABLE IF EXISTS` $ t` "und mdb-export -D '% Y- behoben wurden. % m-% d% H:% M:% S '-I mysql $ 1 "$ t" | $ MYSQL -u $ MUSER -p $ MPASS $ MDB Und leider muss ein Array mit Tabellennamen erstellt werden, da 'for t in $ TABLES' nach Leerzeichen tokenisiert. Vielen Dank!!
Gerardo Camacho

Hallo ... Ich versuche, dies mit einer Datenbank zum Laufen zu bringen, deren Namen% Symbole enthalten. Ich bin neu in MySQL, aber es sieht so aus, als wären dies ein Platzhalter für den String-Abgleich. Irgendwelche Ideen, wie man ihnen entkommen kann? \%und \\%mache es nicht für mich ...
cjolley

{ echo ‘set autocommit=0;’; mdb-export ... ;echo ‘commit;’ } | mysql kann schneller sein
Martin Wang

33

Ich habe das Skript von Nicolay77 so geändert, dass die Datenbank in stdout ausgegeben wird (die übliche Art von Unix-Skripten), sodass ich die Daten in eine Textdatei ausgeben oder an ein beliebiges Programm weiterleiten kann. Das resultierende Skript ist etwas einfacher und funktioniert gut.

Einige Beispiele:

./mdb_to_mysql.sh database.mdb > data.sql

./mdb_to_mysql.sh database.mdb | mysql destination-db -u user -p

Hier ist das geänderte Skript (in mdb_to_mysql.sh speichern)

#!/bin/bash
TABLES=$(mdb-tables -1 $1)

for t in $TABLES
do
    echo "DROP TABLE IF EXISTS $t;"
done

mdb-schema $1 mysql

for t in $TABLES
do
    mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 $t
done

Danke, @mikkom und @ Nicolay77! Ich habe ein Gist erstellt, nachdem das Kopieren und Einfügen von hier in die CLI ein Problem
togume

Können Sie dieses Skript in ein Batch-Skript konvertieren?
Muneeb_ahmed

7

OSX - Benutzer können durch folgen Nicolay77 oder mikkom , die das verwendet mdbtools Dienstprogramm. Sie können es über Homebrew installieren . Lassen Sie einfach Ihr Homebrew installieren und gehen Sie dann

$ homebrew install mdbtools

Erstellen Sie dann eines der von den Jungs beschriebenen Skripte und verwenden Sie es. Ich habe die von mikkom verwendet und alle meine MDB-Dateien in SQL konvertiert.

$ ./to_mysql.sh myfile.mdb > myfile.sql

(welches übrigens mehr als 1 Tabelle enthält)


3
Neuere Versionen von macOS / Homebrew lautetbrew install mdbtools
Toby Mellor

mdbtools entgeht Schrägstrichen leider nicht richtig und scheint nicht gepflegt zu sein: github.com/brianb/mdbtools/issues/89
John Mellor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.