Carnet Wiki

Passage de SQLite à MySQL (et réciproque)

Version 4 — March 2013 denisb

Cette page explique la meilleur méthode de passage de SQLite à MySQL en l’état de SPIP 3.0.7 - Merci de na pas la modifier sans discussion préalable sur son forum privé.

Le passage de MySQL mySQL vers SQLite (via dump SQLite) est simple et sans risque

Si vous avez un site sous MySQL mySQL il suffit de faire une sauvegarde depuis le site et de la réimporter dans un site installé avec SQLite. Le passage dans ce sens est généralement très bien supporté et ne pose pas de problèmes.

Le passage de SQLite à MySQL mySQL (via un dump SQLite) est problématique

La structure d’une base SQLite est plus pauvre que celle d’une base MySQL mySQL et il est difficile de recréer la structure de la base MySQL mySQL à partir de celle de SQLite sans risque de bugs ultérieurs.

En attendant que le passage de MySQL mySQL à SQLite soit automatiquement pris en charge, il existe une procédure manuelle.

Procédure manuelle pour passer sa base de SQLite à MySQL mySQL :

  • Sur le site 1 installé avec SQLite faire une sauvegarde dans tmp/dump/dump1.sqlite
  • Installer un site 2 avec MySQL mySQL avec tous tout les mêmes plugins (mêmes tables dans la base de données donnée )
  • Sur ce site 2 ( installé avec MySQL ) mySQL faire une sauvegarde dans tmp/dump/dump2.sqlite
  • Exporter la table spip_meta du dump2.sqlite dans un fichier :
    echo ".dump spip_meta" | sqlite3 dump2.sqlite > metadump2.txt
  • Supprimer la meta de structure dans dump1.sqlite :
    echo "delete from spip_meta where nom='dump_structure_temp';" | sqlite3 dump1.sqlite
  • Mettre à jour la table spip_meta dans dump1.sqlite :
    sqlite3 dump1.sqlite < metadump2.txt
  • Importer le dump1.sqlite dans le site 2 sous MySQL mySQL depuis l’interface SPIP.

Cette procédure repose sur le fait que les bases du site 1 et du site 2 ont les mêmes tables avec les mêmes champs. Il faut donc faire bien attention à avoir tous les mêmes plugins installés.

Procédure manuelle simplifiée (v2) pour passer sa base de SQLite à MySQL mySQL :

  • Sur le site 1 installé avec SQLite faire une sauvegarde dans tmp/dump/dump1.sqlite
  • Supprimer la meta de structure dans dump1.sqlite :
    echo "delete from spip_meta where nom='dump_structure_temp';" | sqlite3 dump1.sqlite
  • Installer un site 2 avec MySQL mySQL avec tous tout les mêmes plugins actifs (mêmes tables dans la base de donnée)
  • Importer le dump1.sqlite dans le site 2 sous MySQL mySQL depuis l’interface SPIP.

Autre solution (signalée par G.Vincent ) : voir http://stackoverflow.com/a/13365275 (nécessite Python).