@Clinton Auf der Seite, auf die Sie verlinkt haben, wird eine Warnung angezeigt, dass die Informationen veraltet sind.
Kjones
Antworten:
71
Auf Github gibt es ein fantastisches Linux-Shell-Skript , das MySQL in eine Sqlite3-Datei konvertiert. Sie müssen sowohl mysqldump als auch sqlite3 auf Ihrem Server installiert haben. Funktioniert super.
funktioniert bisher am besten! Es müssen nur einige "COLLATE xy" -Anweisungen mit Codierungen entfernt werden, die SQLite nicht versteht. Beachten Sie, dass Sie sqlite3 auf Ihrem Server nicht benötigen, wenn Sie einen Klon Ihrer MySQL-Datenbank für die lokale Entwicklung benötigen.
Benzkji
1
Hat bei mir leider nicht funktioniert. Abgesehen von den unten erwähnten Problemen mit "PRIMARY KEY" -Anweisungen wurden viele andere Fehler gemeldet, die sich auf "INSERT" -Anweisungen und fehlende Tabellen ("Objekte") beziehen.
github.com/dumblob/mysql2sqlite ist jetzt die offizielle Version. 2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
Li-aung Yip
1
danke für das Headsup ilyaigpetrov und @ Li-aungYip, ich habe den Link aktualisiert
georgiecasey
7
Die Antwort von @ user2111698, bearbeitet von @quassy, funktioniert wie versprochen. Da ich dies häufig mache, füge ich ihre Anweisungen in ein Bash-Skript ein:
#!/bin/bash
mysql_host=localhost
mysql_user=george
mysql_dbname=database
sqlite3_dbname=database.sqlite3
# dump the mysql database to a txt file
mysqldump \
--skip-create-options \
--compatible=ansi \
--skip-extended-insert \
--compact \
--single-transaction \
-h$mysql_host \
-u$mysql_user \
-p $mysql_dbname \
> /tmp/localdb.txt
# remove lines mentioning "PRIMARY KEY" or "KEY"
cat /tmp/localdb.txt \
| grep -v "PRIMARY KEY" \
| grep -v KEY \
> /tmp/localdb.txt.1
# mysqldump leaves trailing commas before closing parentheses
perl -0pe 's/,\n\)/\)/g' /tmp/localdb.txt.1 > /tmp/localdb.txt.2
# change all \' to ''
sed -e 's/\\'\''/'\'''\''/g' /tmp/localdb.txt.2 > /tmp/localdb.txt.3
if [ -e $sqlite3_dbname ]; then
mv $sqlite3_dbname $sqlite3_dbname.bak
fi
sqlite3 $sqlite3_dbname < /tmp/localdb.txt.3
Wenn Sie Ihren Code formatieren, um das Scrollen zu vermeiden, erleichtern Sie anderen das Lesen.
Zhon
Glücklich zu; nicht schnell sehen wie
George Fisher
1
Wenn Sie die Kommentare entfernen, sind Sie mit dem vertikalen Bildlauf fertig (fügen Sie alle Kommentare, die Sie für wichtig halten, in den Text Ihrer Antwort ein). Vertikales Scrollen kann mit Backslash-Zeilenumbruch behandelt werden.
Zhon
Wenn Ihre SQL-Datei größer als 1 GB ist, teilen Sie sie zuerst auf. Andernfalls gibt das Perl-Skript einen Ersetzungsschleifenfehler aus.
Nurp
3
mysql2sqlite.sh, das im oberen Beitrag erwähnt wird, kommt mit PRIMARY KEY-Zeilen nicht gut zurecht, es schreibt nicht das Trailing ), um die CREATE-Anweisung zu vervollständigen.
Das habe ich getan. Ich habe den MySQL-Dump wie folgt ausgeführt:
Ich habe dann einen Editor verwendet, um die Datei zu reparieren. Wenn die Schlüssel entfernt werden, erhalten Sie eine CREATE-Anweisung, die wie folgt aussieht:
CREATE ...
...,
)
Das Nachlaufen , muss entfernt werden. In vi stimmt dieser Ausdruck mit ihnen überein, $ \ n)
Dann müssen Sie alle ändern \' zu''
Dann können Sie den Import durchführen:
sqlite3 local.sqlite3 < localdb.txt.1
Und das ist es. Ich habe kein einziges Programm gefunden, das für mich funktioniert hat. Ich hoffe das hilft jemandem.
Vielen Dank dafür, es war hilfreich, da in der ursprünglichen Frage nicht angegeben wurde, ob das Erstellungsschema enthalten sein muss oder nicht. Einfacher, wenn das Schema bereits eingerichtet wurde
kjones
0
Persönlich mag ich die einfache Verwendung von mysqldump, aber einige Anpassungen sind erforderlich (abhängig von Ihrer Kunst mit Unix und was Sie tun möchten).
Ex. für nur einen Tisch (Prods) mit PK:
$ mysqldump mysql prods -u ME -pPASS --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db
$ mysqldump mysql prods -u ME -pPASS --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db
Error: near line 1: table "prods" already exists
Error: near line 7: UNIQUE constraint failed: prods.id, prods.ts
$ sqlite3 testme2.db '.schema'
CREATETABLE"prods" (
"id"varchar(30) NOTNULLDEFAULT'',
"ts"int(11) NOTNULLDEFAULT'0',
"val"doubleDEFAULTNULL,
PRIMARY KEY ("id","ts")
);
Es gibt ein fantastisches, leichtes Tool namens SQLite Database Browser, mit dem Sie SQLite-Datenbanken erstellen und bearbeiten können. Ich habe es verwendet, um Datenbanken für Android-Apps zu erstellen. Sie können SQL-Anweisungen ausführen, um die Daten zu laden. Wenn Sie die Daten aus einer mySQL-Datenbank exportieren, können Sie sie einfach mit diesem Tool importieren. Hier ist ein Link: http://sqlitebrowser.sourceforge.net/
Es hilft Ihnen, genau das zu tun, was Sie tun müssen. Tatsächlich mache ich das jetzt buchstäblich. Exportieren Sie MySQL mit mysqldump oder phpMyAdmin und importieren Sie es dann mit dem oben genannten Tool in eine SQLite-Datenbank. Er fragte nach "beim Exportieren einer MySQL-Datenbank in eine SQLite-Datenbank" und das obige Tool wird der zweite Schritt sein, um genau das zu tun, was Sie brauchen. Eine legitime Hilfe abzustimmen ist einfach so falsch. Ich bin neu hier und meine Antwort hat nicht nur die Frage angesprochen, sondern ist das, was ich gerade in einer realen Situation verwende. Stimmen Sie nicht so schnell ohne Grund ab und halten Sie die Leute von der Teilnahme ab.
Aaron Ratner
2
Sie haben den eigentlichen zweiten (und wichtigsten) Schritt ausgelassen und alle MySQL-spezifischen Teile des MySQL-Dumps in SQLite-spezifische oder Standard-Syntax konvertiert.
CL.
4
Spät, aber dieses Tool funktioniert bei diesem Problem nicht. Es unterstützt keine MySQL-spezifische Syntax (nur SQLite-Syntax). Sie müssen die Dump-Datei ziemlich stark bearbeiten, damit sie erfolgreich importiert werden kann.
Sverri M. Olsen
5
@ AaronRatner Nein, die Lösung funktioniert nicht. In der Frage wird explizit nach der Konvertierung einer MySQL-Datenbank gefragt, und das von Ihnen empfohlene Tool verarbeitet die MySQL-Syntax nicht. Sie müssen dies nicht persönlich nehmen - von dem, was Sie sagen, würde ich vermuten, dass Sie derjenige sind, der sich "entspannen" muss :-) Wenn jemand sagt, dass Ihre Lösung für ihn nicht hilfreich ist, gibt er nur a an einfache Tatsache. Ihre Antwort, dass dies "außergewöhnlich schwierig ist, weil die Lösung hilfreich ist", ist absurd. Ich weiß, dass es für mich nicht hilfreich ist, weil es nicht :-) Prost!
BartoszKP
-17
Exportieren Sie die Daten mit
mysqldump database > database.sql
und importieren Sie die Daten mit
sqlite3 database < database.sql
Möglicherweise benötigen Sie die Optionen -u (Benutzer) und -p (Kennwort)
Funktioniert dies tatsächlich mit den Unterschieden und Funktionen, die in MySQL und nicht in SQLite verfügbar sind?
Rzetterberg
5
Dies wird nicht funktionieren. Indizes, Tabellenbeschreibungen, Escape-Sequenzen für binäre Daten, Sperrmechanismen und wahrscheinlich andere Dinge unterscheiden sich zwischen MySQL und SQLite.
Antworten:
Auf Github gibt es ein fantastisches Linux-Shell-Skript , das MySQL in eine Sqlite3-Datei konvertiert. Sie müssen sowohl mysqldump als auch sqlite3 auf Ihrem Server installiert haben. Funktioniert super.
quelle
2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
Die Antwort von @ user2111698, bearbeitet von @quassy, funktioniert wie versprochen. Da ich dies häufig mache, füge ich ihre Anweisungen in ein Bash-Skript ein:
#!/bin/bash mysql_host=localhost mysql_user=george mysql_dbname=database sqlite3_dbname=database.sqlite3 # dump the mysql database to a txt file mysqldump \ --skip-create-options \ --compatible=ansi \ --skip-extended-insert \ --compact \ --single-transaction \ -h$mysql_host \ -u$mysql_user \ -p $mysql_dbname \ > /tmp/localdb.txt # remove lines mentioning "PRIMARY KEY" or "KEY" cat /tmp/localdb.txt \ | grep -v "PRIMARY KEY" \ | grep -v KEY \ > /tmp/localdb.txt.1 # mysqldump leaves trailing commas before closing parentheses perl -0pe 's/,\n\)/\)/g' /tmp/localdb.txt.1 > /tmp/localdb.txt.2 # change all \' to '' sed -e 's/\\'\''/'\'''\''/g' /tmp/localdb.txt.2 > /tmp/localdb.txt.3 if [ -e $sqlite3_dbname ]; then mv $sqlite3_dbname $sqlite3_dbname.bak fi sqlite3 $sqlite3_dbname < /tmp/localdb.txt.3
Eine Übersicht mit detaillierten Kommentaren finden Sie unter https://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d
quelle
mysql2sqlite.sh, das im oberen Beitrag erwähnt wird, kommt mit PRIMARY KEY-Zeilen nicht gut zurecht, es schreibt nicht das Trailing
)
, um die CREATE-Anweisung zu vervollständigen.Das habe ich getan. Ich habe den MySQL-Dump wie folgt ausgeführt:
mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h<host> -u<user> -p<passwd> <database name> > localdb.txt
Ich habe dann grep verwendet, um PRIMARY KEY und KEY zu entfernen:
Ich habe dann einen Editor verwendet, um die Datei zu reparieren. Wenn die Schlüssel entfernt werden, erhalten Sie eine CREATE-Anweisung, die wie folgt aussieht:
CREATE ... ..., )
Das Nachlaufen
,
muss entfernt werden. In vi stimmt dieser Ausdruck mit ihnen überein, $ \ n)Dann müssen Sie alle ändern
\'
zu''
Dann können Sie den Import durchführen:
Und das ist es. Ich habe kein einziges Programm gefunden, das für mich funktioniert hat. Ich hoffe das hilft jemandem.
quelle
Ich habe die Tabellenstruktur manuell in der SQLite-Datenbank erstellt.
Dann habe ich die Daten mit dem folgenden Befehl hochgeladen:
mysqldump -u root {database} {table} --no-create-info --skip-extended-insert --complete-insert --skip-add-locks --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db
Ich musste sed verwenden , um eine andere Apex-Codierung in den beiden Datenbanken zu korrigieren
quelle
Persönlich mag ich die einfache Verwendung von mysqldump, aber einige Anpassungen sind erforderlich (abhängig von Ihrer Kunst mit Unix und was Sie tun möchten).
Ex. für nur einen Tisch (Prods) mit PK:
$ mysqldump mysql prods -u ME -pPASS --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db $ mysqldump mysql prods -u ME -pPASS --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db Error: near line 1: table "prods" already exists Error: near line 7: UNIQUE constraint failed: prods.id, prods.ts $ sqlite3 testme2.db '.schema' CREATE TABLE "prods" ( "id" varchar(30) NOT NULL DEFAULT '', "ts" int(11) NOT NULL DEFAULT '0', "val" double DEFAULT NULL, PRIMARY KEY ("id","ts") );
Für komplexere Dinge ist es wahrscheinlich besser, einen Wrapper zu schreiben, oder verwenden Sie dann das bereits erwähnte fantastische awk Linux-Shell-Skript auf Gist .
quelle
Es gibt ein fantastisches, leichtes Tool namens SQLite Database Browser, mit dem Sie SQLite-Datenbanken erstellen und bearbeiten können. Ich habe es verwendet, um Datenbanken für Android-Apps zu erstellen. Sie können SQL-Anweisungen ausführen, um die Daten zu laden. Wenn Sie die Daten aus einer mySQL-Datenbank exportieren, können Sie sie einfach mit diesem Tool importieren. Hier ist ein Link: http://sqlitebrowser.sourceforge.net/
quelle
Exportieren Sie die Daten mit
und importieren Sie die Daten mit
Möglicherweise benötigen Sie die Optionen -u (Benutzer) und -p (Kennwort)
quelle