Migration de bases de données

· 3 min de lecture

Publication originale

Cet article a été publié à l'origine le 4 juin 2008 sur The Standard, le blogue de Raincity Studios, sous la signature « Audrey Foo ». Cet article reflète le contexte et les outils de l'époque; certains liens et services mentionnés n'existent plus. Article traduit de l'anglais. La version anglaise est le texte original.

Voir l'original dans l'Internet Archive

Pour me changer les idées et me mettre au défi, j'ai demandé à Dave Olson si je pouvais lui donner un peu de mon temps pour l'aider à bloguer un billet ou deux. Je m'attendais à l'aider à rédiger un compte rendu d'un événement local, mais, à ma grande consternation, il m'a lancé un défi un peu plus grand.

Dave m'a suggéré d'écrire un billet hebdomadaire sur certains des travaux auxquels j'ai participé. Évidemment, il avait réponse à toutes mes objections :

Je suis sûre que quelqu'un quelque part connaît une meilleure façon de faire que moi, et je ne sais certainement pas tout ce qu'il y a à savoir sur ce sujet. Sa réponse : c'est justement une des raisons pour lesquelles on blogue, pour obtenir la rétroaction de la communauté.

Devrais-je être aussi directe que d'habitude, ou afficher une belle façade d'entreprise, tapissée de licornes et de papillons? Non, nous sommes dans la nouvelle ère de l'ouverture : on peut être honnête et transparent.

Qui s'intéresserait à ce que j'ai à dire? Ne sont-ce pas les petites choses drôles et légères qui font tourner le Web 2.0? Qui voudrait entendre parler de mes bidouilles? Il constate que les billets plus techniques reçoivent davantage de commentaires.

Les deux derniers projets de migration de bases de données ont été difficiles pour plusieurs raisons, notamment, à mon avis, le manque de détails sur l'ancien système et sur la façon dont les anciennes fonctionnalités et données interagiraient avec les nouvelles fonctionnalités proposées, ainsi que la conviction implicite du client que les fonctionnalités existantes (et donc les données qui s'y rattachent) devaient « évidemment » être implémentées dans le projet Drupal.

Les techniques utilisées jusqu'ici reposent beaucoup sur des scripts ponctuels utilisant node_save(), y compris pour enregistrer des champs CCK, dont des fichiers et des images (comme imagefields).

Je laisse l'architecture de l'information aux experts comme Gregory Heller. Une chose, cependant : le processus d'architecture de l'information devient beaucoup plus important lorsqu'une importation de données est en jeu.

En plus d'obtenir le plus de documentation possible sur le site actuel, y compris le schéma de la base de données, le serveur de fichiers et, si possible, le code, j'aime dresser une liste type des tables, avec leur description et des exemples de rangées.

Liste des tables de la base de données

  • Obtenir la liste des tables d'une base de données MySQL dans tables.txt, script d'une ligne :

mysql -u {username} -p {databasename} -e "SHOW TABLES" | grep -v '^+' | grep -v 'Tables_in' > tables.txt

  • Décrire chaque table de la base de données MySQL : exécuter ce script shell en redirigeant la sortie vers tables-structure.txt

#!/bin/sh
while read table
do
count=`mysql -u {username} -p{password} {database} -e "SELECT COUNT(*) FROM $table" | grep -v '^+' | grep -v 'COUNT('`;
echo "=== $table : $count rows ===";
mysql -u {username} -p{password} {database} -e "DESCRIBE $table";
echo;
done < tables.txt

  • Afficher une liste aléatoire de 5 rangées : copier le script shell ci-dessus en remplaçant « DESCRIBE $table » par « SELECT * FROM $table ORDER BY RAND() LIMIT 5 ». Exécuter le script shell en redirigeant la sortie vers tables-rows.txt
  • Obtenir la liste des tables d'une base de données PostgreSQL dans tables.txt, script d'une ligne :

psql -U -c "SELECT tablename FROM pg_tables WHERE schemaname LIKE 'public' ORDER BY tablename" | grep -v 'tablename' | grep -v '^-' | grep -v '^(' > tables.txt

  • Décrire chaque table de la base de données PostgreSQL : exécuter ce script shell en redirigeant la sortie vers tables-structure.txt

#!/bin/sh
while read table
do
count=`psql -U postgres csm_080515 -c "SELECT COUNT(*) FROM person" | grep -v '^(' | grep -v '^-' | grep -v 'count'`;
echo "=== $table : $count ===";
psql -U postgres csm_080515 -c "\d $table"
echo;
done < tables.txt

  • Afficher une liste aléatoire de 5 rangées : copier le script shell ci-dessus en remplaçant « DESCRIBE $table » par « SELECT * FROM $table ORDER BY RANDOM() LIMIT 5 ». Exécuter le script shell en redirigeant la sortie vers tables-rows.txt

Votre entreprise mérite d'être trouvée.

Parlez-nous de votre projet. Nous vous répondons en français ou en anglais, et nous nous déplaçons partout dans la MRC de Papineau.

Affichage

Vos choix restent dans ce navigateur. Rien n'est envoyé.

Taille du texte
100 %
Couleurs
Lecture
Autres aides
Accessibilité du site