Carnet Wiki

Passage de SQLite à MySQL (et réciproque)

Version 5 — Mars 2013 Maïeul

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 vers SQLite (via dump SQLite) est simple et sans risque

Si vous avez un site sous 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 (via un dump SQLite) est problématique

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

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

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

  • Sur le site 1 installé avec SQLite faire une sauvegarde dans tmp/dump/dump1.sqlite
  • Installer un site 2 avec MySQL avec tous les mêmes plugins (mêmes tables dans la base de données)
  • Sur ce site 2 (installé avec 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 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 :

  • 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 avec tous les mêmes plugins actifs (mêmes tables dans la base de donnée)
  • Importer le dump1.sqlite dans le site 2 sous MySQL depuis l’interface SPIP.

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