Bitte helfen Sie mir beim Exportieren einer MySQL-Datenbank in eine SQLite-Datenbank.
Bitte helfen Sie mir beim Exportieren einer MySQL-Datenbank in eine SQLite-Datenbank.
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.
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
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:
cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1
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.
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
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 .
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/
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)