Konvertieren Sie MySQL in SQlite [geschlossen]


120

Ist es möglich, mit einem kostenlosen Tool unter Windows von MySQL nach SQLite zu konvertieren?


Antworten:


78

Auf GitHub gibt es ein Skript mysql2sqlite.sh

Wie in der Kopfzeile beschrieben, kann das Skript folgendermaßen verwendet werden:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

Alternativen


8
Funktioniert als Charme! Hier ist ein bisschen Dokumentation: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
Kachar

Das Skript ruft nur Argumente von der Befehlszeile ab und übergibt sie an mysqldump, sodass Sie Informationen zum Konfigurieren benutzerdefinierter Ports usw. mit man mysqloderman mysqldump
Devin Howard vom

2
Es ist erwähnenswert, dass dieses Skript von einem hier abgeleiteten Nachfolger abgelöst wurde: github.com/dumblob/mysql2sqlite
drzax

Noch besser ist es, mit Nicht-ASCII-Zeichen zu spielen: $. / Mysql2sqlite.sh - Standard-Zeichensatz = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun Junwen

52

Hier ist eine Liste der Konverter . ( Schnappschuss bei archive.today )


Eine alternative Methode, die auch unter Windows funktioniert, aber selten erwähnt wird, ist: Verwenden Sie eine ORM-Klasse, die bestimmte Datenbankunterschiede für Sie abstrahiert. zB erhalten Sie diese in PHP ( RedBean ), Python (Djangos ORM-Ebene, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) usw.

dh Sie könnten dies tun:

  1. Laden Sie Daten aus der Quelldatenbank mit der ORM-Klasse.
  2. Speichern Sie Daten im Speicher oder serialisieren Sie sie auf der Festplatte.
  3. Speichern Sie Daten mithilfe der ORM-Klasse in der Zieldatenbank.

43

Sequel (Ruby ORM) verfügt über ein Befehlszeilentool für den Umgang mit Datenbanken. Sie müssen Ruby installiert haben. Dann:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite

1
Vergiss nicht gem install mysqlundgem install sqlite3
Nick

1
und gem install pgwenn Sie von oder zu einer Postgres-Datenbank konvertieren möchten, sollte die Fortsetzung Adapter für Hauptdatenbanken haben
Macario

2
ersetzen mysqldurch, mysql2wenn Sie verwendenmysql2
Carlosin

1
Hinweis: Sie benötigen das ruby-devPaket, um diese nativen Edelsteinpakete zu erstellen.
Panda

1
Musste "gem install sequel mysql2 sqlite3" und dann "sequel mysql2: // user: password @ host / database -C sqlite: //db.sqlite" PERFECT
unom

17

Nicht jedes DB-Schema kann konvertiert werden. MySQL ist komplexer und funktionsreicher als SQLite. Wenn Ihr Schema jedoch einfach genug ist, können Sie es in eine SQL-Datei kopieren und versuchen, es zu importieren / in eine SQLite-Datenbank zu laden.


Nachdem Sie Ihre MySQL-Datenbank in eine Datei geschrieben haben, können Sie sie mit diesem Skript in SQLite github.com/dumblob/mysql2sqlite konvertieren (wie in der Antwort von @David_LeBauer erwähnt).
Paul Rougieux

7

Ich hatte vor ungefähr 2 Tagen das gleiche Problem, als ich eine MySQL-Datenbank mit mehr als 20 GB in SQLite konvertieren musste. Es war keine leichte Aufgabe und ich habe dieses Python-Paket geschrieben , das den Job macht.

Das Beste daran, dass es in Python geschrieben wird, ist, dass es plattformübergreifend ist (im Gegensatz zu einem Shell / Bash-Skript) und alle problemlos mit installiert werden können pip install(auch unter Windows). Es verwendet Generatoren und Chunking der zu verarbeitenden Daten und ist daher sehr speichereffizient.

Ich habe mich auch bemüht, die meisten Datentypen von MySQL nach SQLite korrekt zu übersetzen .

Das Tool wurde ebenfalls gründlich getestet und funktioniert unter Python 2.7 und 3.5+ .

Es kann über die Befehlszeile aufgerufen werden, kann aber auch als Standard-Python-Klasse verwendet werden, die Sie in einige größere Python-Orchestrierungen aufnehmen können.

So verwenden Sie es:

Usage: mysql2sqlite [OPTIONS]

Options:
  -f, --sqlite-file PATH     SQLite3 database file  [required]
  -d, --mysql-database TEXT  MySQL database name  [required]
  -u, --mysql-user TEXT      MySQL user  [required]
  -p, --mysql-password TEXT  MySQL password
  -h, --mysql-host TEXT      MySQL host. Defaults to localhost.
  -P, --mysql-port INTEGER   MySQL port. Defaults to 3306.
  -c, --chunk INTEGER        Chunk reading/writing SQL records
  -l, --log-file PATH        Log file
  -V, --vacuum               Use the VACUUM command to rebuild the SQLite
                             database file, repacking it into a minimal amount
                             of disk space
  --use-buffered-cursors     Use MySQLCursorBuffered for reading the MySQL
                             database. This can be useful in situations where
                             multiple queries, with small result sets, need to
                             be combined or computed with each other.
  --help                     Show this message and exit.

1
Hey @techouse, das sieht toll aus! Gibt es eine Möglichkeit, mit einer .sqlDump-Datei zu arbeiten, oder ist eine Verbindung zu einer installierten MySQL-Datenbank erforderlich?
vortek

Hallo! Ähm, nein, dies erfordert eine funktionierende MySQL-Datenbank. Wenn Sie einen Speicherauszug ohne Server haben, ändern Sie die Datei am besten manuell, wenn Sie wissen, was Sie tun.
Klemen Tušar

@arkadianriver Ich schlage vor, Sie verwenden immer virtuelle Umgebungen mit Python 😎
Klemen Tušar


4

Einfachste Möglichkeit, MySql DB in Sqlite zu konvertieren:

1) Generieren Sie eine SQL-Dump-Datei für Ihre MySQL-Datenbank.

2) Laden Sie die Datei auf RebaseData Online - Konverter hier

3) Auf der Seite wird eine Download-Schaltfläche zum Herunterladen der Datenbank im SQLite-Format angezeigt


4

Ich habe die perfekte Lösung gefunden

Zuerst benötigen Sie dieses Skript (fügen Sie es in eine Datei mit dem Namen 'mysql-to-sqlite.sh' ein):

#!/bin/bash
if [ "x$1" == "x" ]; then
  echo "Usage: $0 <dumpname>"
  exit
fi

cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\\r\\n/\\n/g' |
sed 's/\\"/"/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
  $a=$1;
  s/\\'\''/'\'\''/g;
  s/\\n/\n/g;
  s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed without error. Output file: $1.db"
  rm $1.sql
  rm $1.err
else
  echo "There were errors during conversion.  Please review $1.err and $1.sql for details."
fi

Speichern Sie dann eine Kopie Ihrer Datenbank:

you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile

Führen Sie jetzt die Konvertierung aus:

you@prompt:~$ mysql-to-sqlite.sh dumpfile

Und wenn alles gut geht, sollten Sie jetzt eine dumpfile.db haben, die über sqlite3 verwendet werden kann.

you@prompt:~$ sqlite3 dumpfile.db 
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
dg_cities                 dg_forms                  dg_surnames             
dg_counties               dg_provinces              dg_user_accounts        
dg_countries              dg_provinces_netherlands
dg_first_names            dg_states

3

Es gibt verschiedene Möglichkeiten, dies zu tun. Ich hatte auch dieses Problem und habe viel gesucht und dann eine einfache Möglichkeit bekommen, MySQL in SQLite zu konvertieren.

Folge diesen Schritten:

  1. Zuerst müssen Sie den SQLite DB-Browser installieren (sehr klein und schnell, um Tabellen und Daten anzuzeigen).

  2. Öffnen Sie Ihre MySQL-Datei in Notepad, oder es wäre großartig, wenn Sie in Notepad ++ öffnen

  3. Erste zusätzliche Zeilen entfernen enthält Informationen oder Abfragen und speichern.

  4. Öffnen Sie den SQLite DB-Browser, erstellen Sie eine Datenbank, dann Tabellen und dieselben Typen wie in der MySQL-Datenbank.

  5. Wählen Sie in der Menüleiste des SQLite DB-Browsers Datei-> und dann die von Ihnen gespeicherte MySQL-Datei importieren.

Es kann leicht in SQLite After Warning Dialog konvertiert werden.

Wenn ein Fehler auftritt, entfernen Sie weitere zusätzliche Zeilen, wenn Ihre MySQL-Datei vorhanden ist.

Sie können MySQL to SQLite Converter Software auch probeweise installieren, aber die Informationen, die ich für die Konvertierung gebe, sind lebenslange.


Dies hat gut funktioniert, wenn Ihre Daten kein Zeichen wie Apostroph haben. Zum Beispiel wird "Dies ist Peters Buch" in sql dumm "Dies ist Peters Buch" sein. Dies führt dazu, dass der DB-Browser einen Fehler auslöst. Bei großen Datenmengen ist das Entfernen schwierig. Wenn Sie jedoch die Daten von phpAdmin als CSV in den DB-Browser importieren, ist dieser Import erfolgreich. Ich hoffe diese Hilfe
Seunope

1

Meine Lösung für dieses Problem mit einem Mac war:

  1. Installieren Sie Ruby und die Fortsetzung ähnlich wie bei Macario. Ich folgte diesem Link, um Ruby, MySQL und SQLite3 Ruby on Rails für Mac OSX einzurichten
  2. Fortsetzung installieren

    $ gem install sequel

    Wenn noch erforderlich

    % gem install mysql sqlite3

    Verwenden Sie dann Folgendes basierend auf dem Sequel-Dokument bin_sequel.rdoc (siehe Datenbank kopieren).

    sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite

Ein Windows- Benutzer kann Ruby und Sequel für eine Windows-Lösung installieren.


Wie kann ich nur eine Tabelle aus der Datenbank kopieren, nicht die gesamte MySQL-Datenbank?
Atul Vaibhav

Für einen einzelnen Tisch in der Vergangenheit habe ich dies getan, aber es kann einen besseren Weg geben. Exportieren Sie die Tabelle als CSV, wobei die Spaltennamen in der ersten Zeile aktiviert sind. Importieren Sie dann mit DB Browser for SQLite die Tabelle mithilfe der Option "Tabelle aus CSV importieren" in meine vorhandene SQLite-Datenbank. Sie müssen dann wahrscheinlich die Felder in den gewünschten Typ ändern, da ich glaube, dass alle Felder auf TEXT gesetzt werden. In dem Projekt, an dem ich gearbeitet habe, obwohl wir einen Prozess entwickelt haben, haben wir einen API-Aufruf durchgeführt, um alle Daten in einer Tabelle zurückzugeben, und dann die Daten in die Apps-Datenbank eingefügt / ersetzt.
Grant Luck

Es scheint zu funktionieren. Trotzdem kann ich nicht finden, wo sich die Ausgabedatei befindet. Können Sie mir helfen?
Pontios

1

Ich habe eine Reihe von Methoden für diesen Thread ausprobiert, aber nichts hat bei mir funktioniert. Hier ist eine neue Lösung, die ich auch als sehr einfach empfunden habe:

  1. Installieren Sie RazorSQL . Funktioniert für Mac, Windows und Linux.
  2. Stellen Sie in RazorSQL eine Verbindung zu Ihrer Datenbank her, z. B. auf localhost. Die Konvertierung funktioniert nicht mit SQL-Dump-Dateien.
  3. Klicken Sie mit der rechten Maustaste auf Ihre Datenbank -> Datenbankkonvertierung -> wählen Sie SQLite aus. Dadurch wird eine txt-Datei mit allen sqlitezum Erstellen dieser Datenbank erforderlichen Abfragen gespeichert.
  4. Installieren Sie einen SQLite-Datenbankmanager wie DB Browser for SQLite . Es funktioniert auf jedem Betriebssystem.
  5. Erstellen Sie eine leere Datenbank, wechseln Sie zur Registerkarte SQL ausführen und fügen Sie den Inhalt aus Schritt 3 ein.

Jetzt haben Sie Ihre SQLite-Datenbank.


RazorSQL scheint nur eine "gemeinsame" * .sql-Datei mit Tabellendefinitionen und Dateneinfügungs-Intos zu erstellen, aber nichts besonders SQLite-spezifisches. Es wurden keine Ansichten exportiert, was ein großes Minus ist. Der mit MySql gelieferte mysqldump-Client exportiert auch Ansichten, erzeugt aber auch viele bedingte Dinge usw., die SQLite nicht verdaut.
Dalilander

0

Wenn Sie Erfahrung haben, schreiben Sie einfache Skripte von Perl \ Python \ etc und konvertieren Sie MySQL in SQLite. Lesen Sie Daten aus MySQL und schreiben Sie sie auf SQLite.


0

Ich mag den von Jfly vorgeschlagenen SQLite2009 Pro Enterprise Manager. Jedoch:

  • Der MySQL-Datentyp INT wird nicht in den SQlite-Datentyp INTEGER konvertiert (funktioniert mit DBeaver).

  • Es werden keine Fremdschlüssel-Konstanten aus MySQL importiert (ich konnte kein Tool finden, das die Übertragung von Fremdschlüssel-Einschränkungen von MySQL nach SQlite unterstützt.)


0

Aus der Liste der Konverterwerkzeuge habe ich Kexi gefunden . Es ist ein UI-Tool zum Importieren von verschiedenen DB-Servern (einschließlich MySQL) in SQLite. Beim Importieren einer Datenbank (z. B. aus MySQL) wird diese im Kexi-Format gespeichert. Das Kexi-Format ist das 'native' SQLite-Format. Kopieren Sie einfach die Kexi-Datei und haben Sie Ihre Daten im SQLite-Format


0

Wenn Sie eine Datenbankdatei erhalten und nicht den richtigen Server (entweder SQLite oder MySQL) installiert haben, versuchen Sie dieses Tool: https://dbconvert.com/sqlite/mysql/ Die Testversion ermöglicht das Konvertieren der ersten 50 Datensätze jeder Tabelle Der Rest der Daten ist mit einem Wasserzeichen versehen. Dies ist ein Windows-Programm, das entweder auf einem laufenden Datenbankserver oder in einer SQL-Datei ausgegeben werden kann

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.