web-dev-qa-db-fra.com

Exporter une base de données MySQL vers une base de données SQLite

Aidez-moi à exporter une base de données MySQL dans une base de données SQLite.

70
Devi

Il y a un fantastique script Linux Shell sur Github qui convertit Mysql en fichier Sqlite3. Vous devez avoir à la fois mysqldump et sqlite3 installés sur votre serveur. Fonctionne très bien.

60
georgiecasey

La réponse de @ user2111698 éditée par @quassy fonctionne comme promis. Comme je le fais souvent, je mets leurs instructions dans un script bash:

#!/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

Un résumé contenant des commentaires détaillés est disponible à l'adresse suivante: https://Gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d

4
George Fisher

mysql2sqlite.sh mentionné dans l'article principal ne gère pas bien les lignes PRIMARY KEY, il n'écrit pas le ) final pour compléter l'instruction CREATE.

C'est ce que j'ai fait. J'ai lancé le dump mysql en tant que:

mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h<Host> -u<user> -p<passwd> <database name> > localdb.txt

J'ai ensuite utilisé grep pour supprimer PRIMARY KEY et KEY:

cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1

J'ai ensuite utilisé un éditeur pour réparer le fichier. Lorsque les clés sont supprimées, vous obtenez une instruction CREATE ressemblant à ceci:

CREATE ...
  ...,
)

Ce , final doit être supprimé. Dans vi cette expression leur correspond, $\n)

Ensuite, vous devez changer tous les \' en ''

Ensuite, vous pouvez importer:

sqlite3 local.sqlite3 < localdb.txt.1

Et c'est tout. Je n'ai pas trouvé un seul programme qui a fonctionné pour moi. J'espère que ça aidera quelqu'un.

2
user2111698

J'ai créé manuellement la structure de la table dans la base de données sqlite.

Puis j'ai chargé les données avec la commande suivante:

mysqldump -u root {database} {table} --no-create-info --skip-extended-insert  --complete-insert --skip-add-locks  --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db

Je devais utiliser sed pour corriger un encodage d'apex différent dans les deux bases de données

2
caiofior

Personnellement, j’aime l’utilisation simple de mysqldump, mais quelques ajustements sont nécessaires (en fonction de votre art avec Unix et de ce que vous voulez faire).

Ex. pour une seule table (prods) avec 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")
    );

Pour des choses plus complexes, il est probablement préférable d’écrire un wrapper ou d’utiliser le script fantastique awk Linux Shell déjà mentionné sur Gist

0
user243202

Il existe un outil fantastique et léger appelé SQLite Database Browser, qui vous permet de créer et d’éditer des bases de données SQLite. Je l'ai utilisé pour créer des bases de données pour les applications Android. Vous pouvez exécuter des instructions SQL pour charger les données. Ainsi, si vous exportez les données à partir d'une base de données MySQL, vous pouvez simplement les importer à l'aide de cet outil. Voici un lien: http://sqlitebrowser.sourceforge.net/

0
Aaron Ratner