2010-09-24 13 views
1

J'essaye d'importer une base de données volumineuse mais comme il y a un index, importer la base de données prend une éternité. J'ai essayé de copier les fichiers bruts sur une machine différente, mais pour une raison quelconque, la plus grande table n'est pas en train de lire ce qui me donne une erreur: can't read file: 'tablename.MYD. Donc, j'ai mysqldumped mon ancienne base de données, mais il l'a fait avec un index. Je ne peux pas le refaire parce que ça prend vraiment beaucoup de temps.Avoir un mysqldump avec des index. Comment puis-je l'importer en les désactivant?

J'essaie d'importer la base de données, mais je ne suis pas sûr de savoir comment le faire sans index. Je pensais que l'ajout d'un index après l'importation serait beaucoup plus rapide. Est-ce que quelqu'un a des suggestions?

Répondre

4

Pour désactiver les index et l'importation d'un fichier de vidage:

alter table tablename disable keys

Et puis quand l'importation est faite:

alter table tablename enable keys

Bien que la copie du fichier de la manière que vous avez mentionné devrait marcher. Vous venez d'avoir une erreur d'autorisation. Sur la coque faire:

chown mysql.mysql tablename.* puis redémarrez votre base de données. (Assurez-vous que vous êtes dans le dossier où la table existe lorsque vous utilisez cette commande) Cela devrait résoudre le problème.

Edit: clarifiées où vous devez utiliser la commande

+0

Bonjour désolé pour le commentaire TRÈS tardif. mais j'ai le même problème que le PO et cherchait SO pour une solution avant de demander. J'ai une question, est-ce que votre solution affecterait la vitesse de la requête plus tard ou non? Merci. – CodeBird

+0

lorsque vous activez les clés, les index seront reconstruits. Donc, aucune vitesse de requête future ne devrait être affectée. – Cfreak

+0

hmmm donc la reconstruction de l'index prendra du temps, n'est-ce pas? Je veux dire la seule différence est qu'à l'endroit des insertions prenant trop de temps, ce sera la reconstruction de l'index en prenant ce temps ou un peu moins. Désolé trop de questions. – CodeBird

11

Par défaut, mysqldump produit SQL qui désactive les index lors de l'importation de masse et les applique ensuite. Il ressemble à ceci:

/*!40000 ALTER TABLE `my_table` DISABLE KEYS */; 
INSERT INTO `my_table` VALUES (...), (...); 
/*!40000 ALTER TABLE `my_table` ENABLE KEYS */; 
+0

Y a-t-il un moyen d'empêcher cela? – pahnin

+0

Pour éviter cela, appelez mysqldump avec '--skip-disable-keys' –