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
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.
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
.
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.
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).