Nous utilisons des tables MySQL sur lesquelles nous ajoutons de nouveaux champs de temps à autre car notre produit évolue. Je cherche un moyen d'exporter la structure de la table d'une copie de la DB, à une autre, sans effacer le contenu de la table que j'importe vers. P>
Par exemple, disons que j'ai des copies A et B d'une table, et j'ajoute champs x, y, z à la table A. Existe-t-il un moyen de copier la structure modifiée (champs x, y, z) au tableau B Garder son contenu intact? P>
J'ai essayé d'utiliser mysqldump, mais il semble que je ne puisse copier la table entière avec son contenu, remplacer l'ancien, ou je peux utiliser le drapeau "-D" pour éviter de copier des données (structure de dumping uniquement), mais ceci créera une table vide lorsqu'il importait, remplaçant à nouveau les anciennes données. P>
Y a-t-il un moyen de faire ce dont j'ai besoin avec MySqldump ou un autre outil? P>
6 Réponses :
Ce que je fais habituellement est de stocker chaque Il existe des moyens plus sophistiqués de faire cela (comme des outils de comparaison de structure et tels), mais je trouve que cette pratique fonctionne bien. Ce faisant sur une base manuelle étape par étape aide également à prévenir la modification accidentelle ou la destruction des données par des changements structurels qui modifient le type ou la longueur maximale de champ. P> alter Table code> Écrancé sur la table (s) de développement et appliquez-les à la table (s) cible si nécessaire. p>
Comment fait-on le script automatique pour le faire?
@Jack qu'entendez-vous par "script automatique" exactement, en utilisant quelle plate-forme?
en utilisant mysql. Script générique qui décharge une structure sur le développement, puis est importé sur la production, sans écraser les données sur la production, mais appliquant uniquement des changements de structure du développement.
@Jack Je ne sais pas comment faire cela, peut-être que cela vaut une question distincte. Ce que j'aime faire, c'est garder les énoncés alter code> et simplement les exécuter sur la table cible
Le script automatisé consiste à ajouter des fichiers phpmyadmin lors de la modification de toute table pour la stocker dans une RDMBS Inscrivez-vous où vous enregistrez toutes les requêtes, mais simplement la table altérée
Pour votre cas, il peut simplement nécessiter d'effectuer une mise à jour
alter table B add column x varchar(255); alter table B add column y varchar(255); alter table B add column z varchar(255); update A,B set B.x=A.x, B.y=A.y, B.z=A.z where A.id=B.id; <-- a key that exist on both tables
Il y a une façon pratique de le faire, mais il faut un petit édition de bits dans un éditeur de texte: Cela prend environ 10 minutes à Gedit sous Linux !!
Exporter vous table et enregistrez-la dans: localtable.sql strong> p> Ouvrez-le dans un texte EDIOR (Gedit ) Vous verrez quelque chose comme ceci: p> après simplement retirer: p> Vous aurez ceci em> p> ajouter au début de chaque ligne alter table C'est ainsi que nous pouvons faire ce script automatisé AB en ajoutant un script shell pour faire ce travail. P> Après que vous sachiez ce que vous avez à faire Importez-le dans le «remotique»;) p> merci p> p>
localtable code> ( li>
ID CODE>); AddKey
créé_by code> (
créé_by code>)! LI>
localtable code> Ajouter p>
Je viens d'avoir le même problème et je l'ai résolu de cette façon:
Exporter la structure de la table à mettre à jour. Exportez la structure de la table de développement. P>
exécutez ce code pour le premier fichier "update.sql" doit être modifié en fonction de votre nom de fichier exporté. P> exécutez cette commande pour trouver les différences dans les fichiers de sortie p> Dans le fichier update_db.sql, le code que vous recherchez. P> p>
Voie paresseux: Exportez vos anciennes données et struct, importez votre structure réelle, importer uniquement vos anciennes données. Travaille à moi dans le test. P>
Avec MySqldump --No-Data une fois et --No-Create-info autres fois, grande idée mec. génial :)