Aidez-moi à exporter une base de données MySQL dans une base de données SQLite.
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.
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
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.
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
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 .
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/