12
votes

Puis-je importer une structure mise à jour dans une table MySQL sans perdre son contenu actuel?

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.

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?

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.

Y a-t-il un moyen de faire ce dont j'ai besoin avec MySqldump ou un autre outil?


0 commentaires

6 Réponses :


4
votes

Ce que je fais habituellement est de stocker chaque alter Table Écrancé sur la table (s) de développement et appliquez-les à la table (s) cible si nécessaire.

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.


5 commentaires

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 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



0
votes

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


0 commentaires

0
votes

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

Ouvrez-le dans un texte EDIOR (Gedit ) Vous verrez quelque chose comme ceci: xxx

après simplement retirer:

  • n'importe quoi après la fermeture) parenthèse
  • créer une table s'il n'existe pas localtable (
  • changer tout , à ; dans chaque ligne comme celle que vous exécutez tout cela une fois (, \ n à; \ n)
  • Supprimer toutes les touches AddPrimary ( ID ); AddKey créé_by ( créé_by )!
  • et il suffit de garder des champs vous êtes intéressé par

    Vous aurez ceci xxx

    ajouter au début de chaque ligne alter table localtable Ajouter xxx

    C'est ainsi que nous pouvons faire ce script automatisé AB en ajoutant un script shell pour faire ce travail.

    Après que vous sachiez ce que vous avez à faire Importez-le dans le «remotique»;)

    merci


0 commentaires

0
votes

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.

exécutez ce code pour le premier fichier "update.sql" doit être modifié en fonction de votre nom de fichier exporté. xxx < p> Exécutez la même commande pour le deuxième fichier xxx

exécutez cette commande pour trouver les différences dans les fichiers de sortie xxx

Dans le fichier update_db.sql, le code que vous recherchez.


0 commentaires

0
votes

non, cela n'est pas possible car MySQL utilise la version mariadb . Dans la structure de version de Mariadb d'une table est disposée en mémoire et cette mémoire partagée avec vos données d'octets. Donc, lorsque nous essayons d'importer une structure (ou une table), il modifier ce bloc de mémoire entier.


0 commentaires

2
votes

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.


1 commentaires

Avec MySqldump --No-Data une fois et --No-Create-info autres fois, grande idée mec. génial :)