Je voudrais créer une archive d'une BD.
Pour copier les enregistrement de BD1 vers BD2:
boucle
- SELECT BD1
- INSERT INTO BD2
- DELETE BD1
ou il y a une solution plus simple ?
Version imprimable
Je voudrais créer une archive d'une BD.
Pour copier les enregistrement de BD1 vers BD2:
boucle
- SELECT BD1
- INSERT INTO BD2
- DELETE BD1
ou il y a une solution plus simple ?
En fait pour MySQL, si tu as accès aux fichiers, tu peux directement sauvegarder la structure de fichiers correspondants à ta base.
Renseigne toi dans la doc de la version de ton MySQL sur les moyens de BACKUP qu'ils proposent :wink:
Ce n'est pas une sauvegarde de la BD que je veux faire.
C'est la partie de la BD1 qui ne servent pas va être migrer vers la BD2 pour être consulter si besoin.
C'est un archivage pas une sauvegarde.
Ah ok, autant pour moi :) Le terme que j'aurais employé serait alors plutôt "Historisation", selon moi archivage implique la notion d'archive, qui en informatique se traduit par compression et stockage externe. Mais un débat sur les termes n'est pas ce que tu attends :D
Ton fonctionnement m'a l'air donc correct, une petite optimisation pour les deux premières étapes serait d'utiliser le insert-select.
Mais je pense que ça dépend de l'utilité que tu as. Si par exemple il s'agit d'historiser des données qui seront peu consultées, pour gagner en performance dans la base 1 et en se moquant des performances de la base 2, ok ça marche. Ca allège les index, donc les temps de réponse sont bien meilleur.
Sinon, si il s'agit seulement de "pouvoir préciser quelles sont les valeurs figurant dans l'historique ou non", peut-être que gérer deux bases peut devenir pénible, surtout dans le cas de requêtes complexes. Tu pourrais donc auquel cas utiliser un champ supplémentaire dans ta table, par exemple un booleen "histo", que tu incluerais dans toutes tes requêtes afin de filtrer. Tu ne perdras pas beaucoup en vitesse d'execution, mais par contre en facilité de gestion, tu y gagneras énormément.
Bon courage :wink:
Non, je ne vais pas faire de débat sur les termes.
T'inquiète pas, la BD sera peu consulté.
Je note la petite optimatisation.
Avec mysql_select_db, on peut choisir qu'une seule BD.
Comment on fait pour avoir accès à 2 BD (sur la même connection) ?
INSERT ...BD2 SELECT ...BD1 ?
ou
Y a-t-il une astuce pour déplacer les enregistrement d'une DB vers l'autre ?
Hmm excellente question, peut-être ( mais je suis pas sûr ) un prefixage des tables avec le nom de la base pourra marcher, mais oops il se peut que tu aies deux bases avec le même nom ?
J'ai 2 BD avec un nom différents et chaque table (des 2 BD) a un nom unique.
Donc je n'ai aucune confusion dans le nommage.
Sinon, au pire, je met les tables d'archivage (historique) dans la même BD et comme çà j'aurais qu'une seul BD.
Es ce une bonne solution ?
Je pense qu'il vaut mieux avoir une seule BD par application personnellement. Ca simplifie énormément le travail.
Ok, je vais tout mettre dans une seul BD
Bonne chanceCode:
1
2 create table matable engine=archive as select * from maSecondeBase.matable;