webentwicklung-frage-antwort-db.com.de

Exportieren Sie eine MySQL-Datenbank in die SQLite-Datenbank

Bitte helfen Sie mir beim Exportieren einer MySQL-Datenbank in eine SQLite-Datenbank.

70
Devi

Es gibt ein fantastic Linux Shell-Skript auf Github , das Mysql in eine Sqlite3-Datei konvertiert. Auf Ihrem Server müssen sowohl mysqldump als auch sqlite3 installiert sein. Funktioniert super.

60
georgiecasey

Die von @quassy bearbeitete Antwort von @ user2111698 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 ausführlichen Kommentaren finden Sie unter https://Gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d

4
George Fisher

mysql2sqlite.sh, das im ersten Beitrag erwähnt wird, kommt mit PRIMARY KEY-Zeilen nicht gut zurecht, schreibt nicht den nachfolgenden ), um die CREATE-Anweisung abzuschließen.

Das habe ich getan. Ich habe den Mysql-Dump ausgeführt als:

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 benutzt, 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 ...
  ...,
)

Der nachfolgende , muss entfernt werden. In vi entspricht dieser Ausdruck ihnen, $\n)

Dann müssen Sie alle \' in '' ändern.

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.

2
user2111698

Ich habe die Tabellenstruktur in der SQLite-Datenbank manuell erstellt.

Dann habe ich die Daten mit folgendem 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 festzulegen

2
caiofior

Ich persönlich mag die einfache Verwendung von mysqldump, dennoch sind einige Anpassungen erforderlich (abhängig von Ihrer Art mit Unix und was Sie tun möchten).

Ex. für nur einen Tisch 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 dann das bereits erwähnte fantastic awk Linux Shell-Skript auf Gist zu verwenden. 

0
user243202

Es gibt ein fantastisches, leichtes Werkzeug namens SQLite Database Browser, mit dem Sie SQLite-Datenbanken erstellen und bearbeiten können. Ich benutzte es, um Datenbanken für Android-Apps zu verbessern. Sie können SQL-Anweisungen dagegen ausführen, um die Daten zu laden. Wenn Sie die Daten aus einer mySQL-Datenbank exportieren, können Sie sie mit diesem Tool importieren. Hier ist ein Link: http://sqlitebrowser.sourceforge.net/

0
Aaron Ratner