Tout d'abord, je peux vous donner la réponse pour une tableau :
Le problème avec tous ces INTO OUTFILE
ou --tab=tmpfile
(et -T/path/to/directory
) les réponses sont qu'il faut exécuter mysqldump sur le même serveur en tant que serveur MySQL et disposant de ces droits d'accès.
Ma solution était simplement d'utiliser mysql
(pas mysqldump
) avec le -B
paramètre, intégrez l'instruction SELECT avec -e
, puis massez la sortie ASCII avec sed
, et terminez avec CSV incluant une ligne de champ d'en-tête :
Exemple :
mysql -B -u username -p password database -h dbhost -e "SELECT * FROM accounts;" \
| sed "s/\"/\"\"/g;s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"
"identifiant","identifiant","mot de passe","dossier","email""8","mariana","xxxxxxxxxx","mariana","""3","squaredesign","xxxxxxxxxxxxxxxxx"," squaredesign","[email protected] ""4","miedziak","xxxxxxxxxx","miedziak","example@sqldat .com ""5","Sarko","xxxxxxxxx","Sarko","""6","LogitransPologne","xxxxxxxxxxxxxx","LogitransPologne","""7","Amos","xxxxxxxxxxxxxxxxxxxx"," Amos","""9","Annabelle","xxxxxxxxxxxxxxx","Annabelle","""11","Brandfathers andSons","xxxxxxxxxxxxxxxxx","BrandfathersAndSons","""12","ImagineGroup", "xxxxxxxxxxxxxxxx","ImagineGroup","""13","EduSquare.pl","xxxxxxxxxxxxxxxxx","EduSquare.pl","""101","tmp","xxxxxxxxxxxxxxxxxxxxx","_","exemple@sqa "
Ajouter un > outfile.csv
à la fin de cette ligne, pour obtenir votre fichier CSV pour cette table.
Ensuite, obtenez une liste de tous vos tableaux avec
mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"
À partir de là, il ne reste plus qu'une étape pour créer une boucle, par exemple, dans le shell Bash pour itérer sur ces tables :
for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
echo .....;
done
Entre le do
et ; done
insérez la longue commande que j'ai écrite dans la partie 1 ci-dessus, mais remplacez votre nom de table par $tb
à la place.