web-dev-qa-db-fra.com

Limiter le nombre d'enregistrements de mysqldump?

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 dites-vous à mysqldump de ne vous donner que n enregistrements sur 8 millions?

Merci

131
Phil

Comme le dit skaffman, utilisez l'option - où:

mysqldump --opt --where="1 limit 1000000" database

Bien sûr, cela vous donnerait le premier million de lignes de chaque table.

205
Adam Bellaire

Si vous voulez obtenir les enregistrements n d'une table spécifique, vous pouvez faire quelque chose comme ceci:

mysqldump --opt --where="1 limit 1000000" database table > dump.sql

Cela videra le premier 1000000 lignes de la table nommée table dans le fichier dump.sql.

55

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.

8
skaffman

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 faire fonctionner DESC hors de la boîte. 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:

mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql

C'est une raison parfaite pour laquelle vous devriez toujours nommer vos PK id et éviter les PK composites, même dans les tables d'association (utilisez plutôt des clés de substitution).

3
Andreas Bergström