Je suis développeur PHP, alors ne soyez pas strict. J'ai une grande table ~ 5.5 Go de vidage. Notre PM a décidé de faire une nouvelle colonne pour effectuer une nouvelle fonctionnalité. La table est InnoDB donc ce que j'ai essayé:
Modifier la table en écran avec verrou de table. A pris environ 30 heures et rien. Alors je l'ai juste arrêté. J'ai d'abord fait une erreur parce que je n'ai pas mis fin à toutes les transactions, mais la deuxième fois, il n'y a pas eu de verrouillage multiple. Le statut était
copy to tmp table
.Puisque j'ai également besoin d'appliquer le partitionnement pour cette table, nous décidons de faire un vidage, de renommer et de créer une table avec le même nom et une nouvelle structure. Mais le vidage fait une copie stricte (au moins je n'ai pas trouvé autre chose). J'ai donc ajouté pour vider une nouvelle colonne avec
sed
et l'interroger. Mais d'étranges erreurs ont commencé. Je crois que cela a été causé par charset. La table dans utf-8 et le fichier sont devenus us-ascii aprèssed
. J'ai donc eu des erreurs (commande inconnue '\' ') sur 30% des données. C'est donc aussi une mauvaise façon.
Quelles sont les autres options pour accomplir cela et accélérer les performances (je peux le faire avec un script php, mais cela prendra des siècles). Quelle sera la performance de INSERT SELECT
dans ce cas.
Merci pour toute avance.
SET NAMES utf8
et.COLLATION
Mais meh idk pourquoi 30% des données sont corrompues aprèssed
. Je pense que la charge en vrac sera la plus rapide mais peut-être que quelque chose de plus existe qui me manque. Merci Mark