7
votes

Modifier le nom de champ MySQL dans une énorme table

J'ai une table avec 21 millions de rangées.Je devons changer l'un des noms de la ligne.Lorsque j'essaie avec la requête "ALTER TABLE COMPANY Change ID NEW_ID INT (11)"; La requête ne finit jamais.

Y a-t-il un moyen simple de changer le nom de champ de Big MySQL de la table?


11 commentaires

Avez-vous essayé de le faire dans phpmyadmin? Qui pourrait utiliser une méthode plus efficace


J'ai essayé avec Phpmyadmin et Commandline.


Vous pouvez faire un mysqldump et modifier le fichier de vidage. Puis réimportez les données.


La colonne est-elle définie comme int (11) sans autre attributs? Si vous ne changez que le nom MySQL ne devrait que mettre à jour les métadonnées sans toucher les lignes. Quel moteur de stockage utilisez-vous?


Je suis sûr que votre suggestion se termine mais je veux juste changer le nom de champ. La vidage de la table sera de près de 10 Go. Cela ne semble pas être un moyen efficace.


Effectivement vider / importation est assez rapide. Surprenant donc.


Joni oui c'est juste int (11).


Si vous utilisez Innodb, je suppose que vous devez simplement attendre qu'il finit: "Les modifications qui modifient uniquement des métadonnées de table et non des données de table peuvent être formulées immédiatement en modifiant le fichier .FRM de la table et ne touche pas le contenu de la table. Les modifications suivantes sont des modifications rapides qui peuvent être fabriquées de cette façon: renommer une colonne, à l'exception du moteur de stockage InnoDB. " dev.mysql.com/doc/refman/5.5/fr/ alter-table.html


Le moteur de stockage est myisam.


La documentation indique la renommation d'une colonne, à l'exception du moteur de stockage InnoDB modifie uniquement des métadonnées de table et non des données de table peuvent être effectuées immédiatement en modifiant le fichier .FRM de la table et ne touche pas le contenu de la table. Mais ce n'est pas le cas pour moi.


Êtes-vous capable de résoudre ce problème?


5 Réponses :


0
votes

Que pensez-vous de:

  1. Exportez toutes les données et TRONCER TABLE
  2. alter Table
  3. Modifier le nom de la ligne dans le fichier exporté
  4. fichier d'importation

    C'est juste une idée rapide, mais ce ne sera pas rapide (exportateur / importateur).

    ou juste essayer de faire de l'alter pendant la nuit de quelques heures d'entretien? :)


0 commentaires

5
votes

Tout d'abord, avant quoi que ce soit, sauvegarde la table:

ALTER TABLE big_table MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;


4 commentaires

Également si l'alter dégage pour une raison quelconque pour une raison quelconque, vous pouvez rechercher et remplacer le champ ID INT (11) INTERNE DU TABLE DE CRISE INTERNE INCL dans le BIG_TABLE.BACKUP .sql Fichier de sauvegarde pour correspondre à ce que vous voulez, puis l'importe normalement à l'aide de mysql -uroot -p dB .


Thank.Je essaye.Je postera le résultat.


J'ai essayé la recommandation.Oui ça marche comme prévu.J'ai utilisé Split and Cat afin d'éditer le fichier BIG SQL.


Super. Ajouter peut-être les changements et les étapes que vous avez dû faire pour le faire fonctionner complètement et laisse ensuite fermer la question :)



1
votes

Vous pouvez simplement effectuer ce qui suit:

Table MyISAM H1>
DROP TABLE big_table;
ALTER TABLE big_table_bak RENAME big_table;


2 commentaires

Ce n'est pas si simple si vous avez 21 millions de lignes ...


Ouais j'ai 77 millions d'enregistrements. cela peut prendre trop de temps que je pense, commentera tard depuis combien de temps il faut



1
votes

La méthode de consommation moins de temps pour modifier le nom d'un champ dans une énorme table MySQL consiste à:

Créer une table new_big_table Sélectionnez ID comme New_id, Field1, Field2, Field3 de Big_Table.


0 commentaires

5
votes

Utilisez PT-Online-Schema-Change pour faire des modifications de table Alter à long terme, sans vous enfermer de la table.

http://www.percona.com/ Doc / Percona-Toolkit / Pt-Online-Schema-Change.html

Il faut généralement plus longtemps pour compléter le changement, mais vous pouvez toujours lire et écrire à la table pendant que cela fait son travail.

Vous pouvez également écouter un webinaire de l'auteur en parlant de la façon dont cela fonctionne et certaines de ses mises en garde:

http: // www. percona.com/webinars/2012-05-02-zzero-downtime-schema-changes-in-mysql


0 commentaires