Mysql
 sql >> Base de données >  >> RDS >> Mysql

Vider toutes les tables au format CSV en utilisant 'mysqldump'

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.