2010-02-24 5 views
3

Quand je lance la commande suivante, la sortie consiste uniquement de la syntaxe pour créer « matable », mais aucune des données:Comment faire pour vider une seule table dans MySQL sans verrouiller?

mysqldump --single-transaction -umylogin -p mydatabase mytable > dump.sql 

Si je laisse tomber --single transaction, je reçois une erreur que je ne peut pas verrouiller les tables.

Si je supprime 'mytable' (et que je fais la base de données), il semble qu'il crée les instructions INSERT, mais le DB entier est énorme.

Y at-il un moyen que je peux vider la table - schéma & données - sans avoir à verrouiller la table?

(j'ai essayé aussi INTO OUTFILE, mais n'avaient pas accès pour cela aussi.)

Répondre

2

La réponse peut dépendre du moteur de base de données que vous utilisez pour vos tables. InnoDB prend en charge les sauvegardes non verrouillées. Compte tenu de vos commentaires sur les autorisations, il se peut que vous ne disposiez pas des autorisations requises pour cela.

La meilleure option qui vient à l'esprit serait de créer une table en double sans les indices. Copiez toutes les données de la table que vous souhaitez sauvegarder sur la nouvelle table. Si vous créez votre requête d'une manière qui permet de parcourir facilement les données, vous pouvez ajuster la durée des verrous. J'ai trouvé que 10.000 lignes par itération est généralement sacrément rapide. Une fois que vous avez cette requête, vous pouvez continuer à l'exécuter jusqu'à ce que toutes les lignes soient copiées. Maintenant que vous avez un doublon, vous pouvez soit le supprimer, le tronquer ou le conserver et essayer de le mettre à jour avec les dernières données et de l'utiliser comme source de sauvegarde.

Jacob

Questions connexes