J'essaie de charger un petit échantillon d'enregistrements d'une grande base de données dans une base de données de test.
Comment dire à mysqldump de ne vous donner que n enregistrements sur 8 millions?
Merci
Comme le dit skaffman, utilisez l' option --where :
mysqldump --opt --where="1 limit 1000000" database
Bien sûr, cela vous donnerait le premier million de lignes de chaque table.
SELECT * from table WHERE
, donc dans ce cas, vous obtenezSELECT * from table WHERE 1 limit 1000000
. Sans le 1, vous auriez une requête non valide. Spécifier 1 pour une clause where (puisque 1 est toujours vrai) sélectionne simplement tous les enregistrements.mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database
pour obtenir la deuxième page de 1 million d'enregistrements. Assurez-vous d'utiliser l' indicateur --no-create-info sur les pages autres que la première pour vider uniquement les données et laisser de côté les éléments de création de table .Si vous souhaitez obtenir des
n
enregistrements à partir d'une table spécifique, vous pouvez faire quelque chose comme ceci:Cela videra les premières
1000000
lignes de la table nomméetable
dans le fichierdump.sql
.la source
mysqldump peut recevoir une requête SQL à exécuter, à partir de laquelle il prendra les données pour le vidage. Vous pouvez ensuite utiliser la clause «limit X» dans votre requête pour limiter le nombre de lignes.
la source
Comme l'ordre par défaut est ASC, ce qui est rarement ce que vous voulez dans cette situation, vous devez avoir une conception de base de données appropriée pour que DESC fonctionne immédiatement. Si toutes vos tables ont UNE colonne de clé primaire avec le même nom (naturel ou substitut), vous pouvez facilement vider les n derniers enregistrements en utilisant:
C'est une raison parfaite pour laquelle vous devriez toujours nommer l' id de votre PK et éviter les PK composites, même dans les tables d'association (utilisez plutôt des clés de substitution).
la source