J'essaye de vider un sous-ensemble d'une table dans MySQL avec mysqldump. J'ai les valeurs d'identification des lignes que je veux sélectionner dans la table, stockées dans un fichier. Lorsque j'utilise ces valeurs comme une variable comme suit:en utilisant mysqldump avec l'option where et une longue liste d'arguments dans le script bash
ids=`cat ids.csv`
mysqldump -u root -p db Table --where="id in ($ids)" >> dump.sql
Je reçois:
x.bash: ligne x:/usr/bin/mysqldump: liste d'arguments trop longue
Je pourrais essayer de diviser la variable de ligne unique $ ids (1,2,3,4, ..) en listes plus courtes et appeler mysqldump dans une boucle mais je ne suis pas très bon avec les boucles dans les scripts bash. Ou il pourrait y avoir une meilleure façon de résoudre ce problème.
Merci d'avance pour toute aide.
EDIT
Considérant @ suggestion de ajreal, Si je
mysql -u root -p -e "select * into outfile ./dump.sql from db.Table where id in ($ids)"
je reçois "liste d'arguments trop longue" à nouveau.
Je récupère les valeurs d'id d'un autre environnement. La base de données avec laquelle je lance ce script et la base de données dans laquelle j'obtiens les valeurs d'id à utiliser dans la clause where se trouvent dans des environnements distincts. En outre, avant cette étape, je crée le fichier de vidage avec l'option --ignore-table, en ignorant la table "Table" que j'utilise à l'étape suivante. Par conséquent, je préférerais utiliser mysqldump pour cette étape aussi.
négatif, enregistrez-le dans le fichier et utilisé ** mysql -u root -p ..
ajreal
Après quelques modifications, la réponse de @Dennis a été très utile. Merci encore. – eaykin