Convertir MySQL en SQlite [fermé]


120

Est-il possible de convertir MySQL en SQLite avec un outil gratuit sous Windows?


Réponses:


78

Il existe un script mysql2sqlite.sh sur GitHub

Comme décrit dans l'en-tête, le script peut être utilisé comme ceci:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

alternatives


8
Fonctionne comme du charme! Voici un peu de documentation: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar

Le script extrait simplement les arguments de la ligne de commande et les transmet à mysqldump, afin que vous puissiez en savoir plus sur la configuration des ports personnalisés, etc. avec man mysqlouman mysqldump
Devin Howard

2
Il est à noter que ce script a été remplacé par un successeur maintenu ici: github.com/dumblob/mysql2sqlite
drzax

Encore mieux pour jouer avec des caractères non-ascii: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun Junwen

52

Voici une liste de convertisseurs . ( instantané sur archive.today )


Une autre méthode qui fonctionnerait même sur Windows mais qui est rarement mentionnée est la suivante: utilisez une classe ORM qui résume pour vous les différences de base de données spécifiques. par exemple, vous les obtenez en PHP ( RedBean ), Python (couche ORM de Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) etc.

c'est-à-dire que vous pouvez faire ceci:

  1. Chargez les données de la base de données source à l'aide de la classe ORM.
  2. Stockez les données en mémoire ou sérialisez sur le disque.
  3. Stockez les données dans la base de données de destination à l'aide de la classe ORM.

43

Sequel (Ruby ORM) a un outil en ligne de commande pour traiter les bases de données, vous devez avoir installé ruby, puis:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite

1
N'oubliez pas gem install mysqletgem install sqlite3
Nick

1
et gem install pgsi vous voulez convertir depuis ou vers une base de données postgres, la suite devrait avoir des adaptateurs pour les principales bases de données
Macario

2
remplacer mysqlpar mysql2si vous utilisezmysql2
Carlosin

1
Remarque: vous aurez besoin du ruby-devpackage pour créer ces packages de gemmes natifs.
Panda

1
Dû utiliser "gem install sequel mysql2 sqlite3" puis "suite mysql2: // utilisateur: mot de passe @ hôte / base de données -C sqlite: //db.sqlite" PARFAIT
unom

17

Tous les schémas de base de données ne peuvent pas être convertis. MySQL est plus complexe et riche en fonctionnalités que SQLite. Cependant, si votre schéma est assez simple, vous pouvez le vider dans un fichier SQL et essayer de l'importer / le charger dans une base de données SQLite.


Après avoir vidé votre base de données MySQL dans un fichier, vous pouvez utiliser ce script pour la convertir en SQLite github.com/dumblob/mysql2sqlite (comme mentionné dans la réponse de @David_LeBauer).
Paul Rougieux le

7

J'ai rencontré le même problème il y a environ 2 jours lorsque j'ai dû convertir une base de données MySQL de 20 Go + en SQLite. Ce n'était en aucun cas une tâche facile et j'ai fini par écrire ce package Python qui fait le travail.

L'avantage d'être écrit en Python est qu'il est multiplateforme (contrairement à un script shell / bash) et peut être facilement installé à l'aide pip install(même sous Windows). Il utilise des générateurs et la segmentation des données en cours de traitement et est donc très efficace en mémoire.

J'ai également fait des efforts pour traduire correctement la plupart des types de données de MySQL vers SQLite .

L'outil est également testé de manière approfondie et fonctionne sur Python 2.7 et 3.5+ .

Il est invocable via la ligne de commande mais peut également être utilisé comme une classe Python standard que vous pouvez inclure dans une orchestration Python plus grande.

Voici comment vous l'utilisez:

Usage: mysql2sqlite [OPTIONS]

Options:
  -f, --sqlite-file PATH     SQLite3 database file  [required]
  -d, --mysql-database TEXT  MySQL database name  [required]
  -u, --mysql-user TEXT      MySQL user  [required]
  -p, --mysql-password TEXT  MySQL password
  -h, --mysql-host TEXT      MySQL host. Defaults to localhost.
  -P, --mysql-port INTEGER   MySQL port. Defaults to 3306.
  -c, --chunk INTEGER        Chunk reading/writing SQL records
  -l, --log-file PATH        Log file
  -V, --vacuum               Use the VACUUM command to rebuild the SQLite
                             database file, repacking it into a minimal amount
                             of disk space
  --use-buffered-cursors     Use MySQLCursorBuffered for reading the MySQL
                             database. This can be useful in situations where
                             multiple queries, with small result sets, need to
                             be combined or computed with each other.
  --help                     Show this message and exit.

1
Hé @techouse, ça a l'air génial! Existe-t-il un moyen de fonctionner avec un .sqlfichier de vidage ou nécessite-t-il une connexion à une base de données MySQL installée?
vortek le

Hey! Ummm, non cela nécessite une base de données MySQL fonctionnelle. Si vous avez un vidage sans serveur réel, le mieux est de changer le fichier manuellement si vous savez ce que vous faites.
Klemen Tušar

@arkadianriver Je vous suggère de toujours utiliser des environnements virtuels avec Python 😎
Klemen Tušar


4

Le moyen le plus simple de convertir MySql DB en Sqlite:

1) Générez un fichier de vidage sql pour votre base de données MySql.

2) Téléchargez le fichier sur le convertisseur en ligne RebaseData ici

3) Un bouton de téléchargement apparaîtra sur la page pour télécharger la base de données au format Sqlite


4

J'ai trouvé la solution parfaite

Tout d'abord, vous avez besoin de ce script (mettez-le dans un fichier appelé 'mysql-to-sqlite.sh'):

#!/bin/bash
if [ "x$1" == "x" ]; then
  echo "Usage: $0 <dumpname>"
  exit
fi

cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\\r\\n/\\n/g' |
sed 's/\\"/"/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
  $a=$1;
  s/\\'\''/'\'\''/g;
  s/\\n/\n/g;
  s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed without error. Output file: $1.db"
  rm $1.sql
  rm $1.err
else
  echo "There were errors during conversion.  Please review $1.err and $1.sql for details."
fi

Ensuite, sauvegardez une copie de votre base de données:

you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile

Et maintenant, exécutez la conversion:

you@prompt:~$ mysql-to-sqlite.sh dumpfile

Et si tout se passe bien, vous devriez maintenant avoir un fichier dumpfile.db qui peut être utilisé via sqlite3.

you@prompt:~$ sqlite3 dumpfile.db 
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
dg_cities                 dg_forms                  dg_surnames             
dg_counties               dg_provinces              dg_user_accounts        
dg_countries              dg_provinces_netherlands
dg_first_names            dg_states

3

il y a différentes facons de faire cela. J'ai aussi eu ce problème et j'ai beaucoup cherché, puis j'ai eu un moyen simple de convertir MySQL en SQLite.

Suivez ces étapes:

  1. Vous devez d'abord installer SQLite DB Browser (très petit et rapide pour afficher les tables et les données)

  2. Ouvrez votre fichier MySQL dans Notepad ou ce serait génial si vous ouvrez dans Notepad ++

  3. Supprimer les premières lignes supplémentaires Contient des informations ou des requêtes et enregistrez-les.

  4. Ouvrez le navigateur de base de données SQLite, créez une base de données, puis des tables et les mêmes types que dans la base de données MySQL.

  5. Dans la barre de menus du navigateur de base de données SQLite, sélectionnez Fichier-> puis Importer les données Fichier MySQL que vous avez enregistré.

Il se convertira facilement en SQLite après la boîte de dialogue d'avertissement.

En cas d'erreur, supprimez plus de lignes supplémentaires si votre fichier MySQL a.

Vous pouvez également installer le logiciel de conversion MySQL vers SQLite sur une base d'essai, mais les informations que je donne pour la conversion concernent la durée de vie.


Cela a bien fonctionné si vos données n'ont pas de caractère comme l'apostrophe. Par exemple "Ceci est le livre de Peter" en sql dumb sera "Ceci est le livre de Peter". Cela entraînera une erreur de lancement de DB Browser, car il est difficile de supprimer des données volumineuses. Mais si vous importez les données de phpAdmin au format CSV vers DB Browser, cette importation sera réussie. J'espère que cette aide
Seunope

1

Ma solution à ce problème sous Mac consistait à

  1. Installez Ruby et une suite similaire à la réponse de Macario. J'ai suivi ce lien pour aider à configurer Ruby, mysql et sqlite3 Configuration du développement Ruby on Rails pour Mac OSX
  2. Installer la suite

    $ gem install sequel

    Si toujours nécessaire

    % gem install mysql sqlite3

    puis utilisé ce qui suit basé sur la documentation Sequel bin_sequel.rdoc (voir Copier la base de données)

    sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite

Un utilisateur Windows peut installer Ruby et Sequel pour une solution Windows.


Comment puis-je copier une seule table de la base de données de base de données et non de la base de données mysql entière?
Atul Vaibhav

Pour une seule table dans le passé, j'ai fait cela, mais il y a peut-être un meilleur moyen. Exportez la table au format csv avec les noms de colonne dans la première option de ligne cochée. Ensuite, en utilisant DB Browser pour SQLite, importez la table dans ma base de données sqlite existante en utilisant l'option d'importation de table à partir de csv. Vous devrez alors probablement entrer et modifier les champs au type dont vous avez besoin car je pense que tous les champs seront définis sur TEXT. Dans le projet sur lequel je travaillais, nous avons développé un processus dans lequel nous avons fait un appel à l'API pour renvoyer toutes les données dans une table, puis inséré / remplacé les données dans la base de données des applications.
Grant Luck

Cela semble fonctionner. Néanmoins, je ne trouve pas où se trouve le fichier de sortie. Pouvez-vous m'aider?
Pontios

1

J'ai essayé un certain nombre de méthodes sur ce fil, mais rien n'a fonctionné pour moi. Voici donc une nouvelle solution, que j'ai également trouvée très simple:

  1. Installez RazorSQL . Fonctionne pour Mac, Windows et Linux.
  2. Dans RazorSQL, connectez-vous à votre base de données, sur localhost par exemple. La conversion ne fonctionne pas avec les fichiers de vidage SQL.
  3. Faites un clic droit sur votre base de données -> Conversion de base de données -> sélectionnez SQLite. Cela enregistrera un fichier txt avec toutes les sqliterequêtes nécessaires pour créer cette base de données.
  4. Installez un gestionnaire de base de données SQLite, tel que DB Browser pour SQLite . Cela fonctionne sur n'importe quel système d'exploitation.
  5. Créez une base de données vide, accédez à l'onglet Exécuter SQL et collez le contenu de l'étape 3.

Voilà, maintenant vous avez votre base de données SQLite.


RazorSQL semble juste construire un fichier * .sql "commun" avec des définitions de table et des insertions de données, mais rien de particulièrement spécifique à SQLite. Il n'a pas exporté de vues, ce qui est un gros inconvénient. Le client mysqldump qui vient avec MySql exporte aussi des vues mais il produit aussi beaucoup de trucs conditionnels etc. ce que SQLite ne digérera pas.
dalilander

0

Si vous avez de l'expérience, écrivez des scripts simples par Perl \ Python \ etc et convertissez MySQL en SQLite. Lisez les données de Mysql et écrivez-les sur SQLite.


0

J'aime le SQLite2009 Pro Enterprise Manager proposé par Jfly. Toutefois:

  • Le type de données MySQL INT n'est pas converti en type de données SQlite INTEGER (fonctionne avec DBeaver)

  • Il n'importe pas les contraintes de clé étrangère de MySQL (je n'ai trouvé aucun outil prenant en charge le transfert de contraintes de clé étrangère de MySQL vers SQlite.)


0

Dans la liste des outils de conversion, j'ai trouvé Kexi . Il s'agit d'un outil d'interface utilisateur permettant d'importer à partir de divers serveurs de base de données (y compris MySQL) dans SQLite. Lors de l'importation d'une base de données (par exemple depuis MySQL), elle la stocke au format Kexi. Le format Kexi est le format SQLite «natif». Alors copiez simplement le fichier kexi et ayez vos données au format sqlite


0

Si vous avez reçu un fichier de base de données et que vous n'avez pas installé le bon serveur (SQLite ou MySQL), essayez cet outil: https://dbconvert.com/sqlite/mysql/ La version d'essai permet de convertir les 50 premiers enregistrements de chaque table , le reste des données est filigrané. Il s'agit d'un programme Windows, et peut soit vider dans un serveur de base de données en cours d'exécution, soit vider la sortie dans un fichier .sql

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.