MYSQL Dump uniquement certaines lignes

96

J'essaye de faire un vidage mysql de quelques lignes dans ma base de données. Je peux ensuite utiliser le vidage pour télécharger ces quelques lignes dans une autre base de données. Le code que j'ai fonctionne, mais il vide tout. Comment puis-je demander à mysqldump de ne vider que certaines lignes d'une table?

Voici mon code:


mysqldump --opt --user=username --password=password lmhprogram myResumes  --where=date_pulled='2011-05-23' > test.sql
Shattuck
la source

Réponses:

142

Corrigez simplement votre --whereoption. Il doit s'agir d'une clause SQL WHERE valide, comme:

--where="date_pulled='2011-05-23'"

Vous avez le nom de la colonne en dehors des guillemets.

UN J.
la source
1
Merci a fait exactement ce dont j'avais besoin. Merci pour l'aide!
Shattuck
@AJ, super info! Merci!
Roman Newaza
2
Pour IN condition, nous pouvons simplement utiliser --where="id IN(1,2,6,10)". Où id est la colonne dans la table. Ref --where
Yogesh
9
Juste une note à toute personne comme moi qui l'utilise pour diriger un gros vidage de données vers un autre serveur qui s'est cassé au milieu, si vous ne spécifiez pas --no-create-infoavec votre clause where, le nouveau vidage recréera la table et supprimera les données déjà transférées! Cela peut être évident, mais cela m'a attrapé deux fois maintenant
georgiecasey
Notez que le problème n'est pas que le nom de la colonne est en dehors des guillemets. Il s'agit d'une commande shell, vous devez donc écrire la syntaxe shell pour la chaîne date_pulled='2011-05-23'. Cela signifie que vous devez citer ou échapper les guillemets simples, afin qu'ils soient inclus dans la chaîne plutôt que d'être interprétés comme des guillemets dans la syntaxe du shell. L'ajout de guillemets doubles autour de l'ensemble fait cela, mais il en serait de même --where=date_pulled="'2011-05-23'"(ou --where=date_pulled=\'2011-05-23\', ou même --where=date_pulled"'"2011-05-23"'").
Ben
32

Vous devez citer la clause «where».

Essayer

mysqldump --opt --user=username --password=password lmhprogram myResumes  --where="date_pulled='2011-05-23'" > test.sql
Neville Kuyt
la source
1
C'était exactement ce dont j'avais besoin. Une autre personne a répondu juste avant vous et j'ai choisi sa réponse, mais je vous ai voté pour l'aide.
Shattuck
1
Il existe une autre façon d'utiliser une requête comme celle-ci: CREATE TABLE new_table AS (SELECT * FROM myResumes WHERE where = date_pulled = '2011-05-23'); Ensuite, vous pouvez simplement exporter cette table via mysqldump.
Vinayagam
1

Utilisez ce code pour des lignes de table spécifiques, en utilisant la condition LIKE.

mysqldump -u root -p sel_db_server case_today --where="date_created LIKE '%2018
%'" > few_rows_dump.sql
Rokonz Zaz
la source