mysqldump avec un fichier sql par table d`une base de données

mysqldump avec un fichier sql par table d'une base
de données
Objectif
Nous voulons qu'un fichier SQL, résultat d'une commande des données des différentes tables de la base, soit éclaté en autantmysqldump
de fichiers sql contenant les commandes SQL relatives à une seule table de cette base à chaque fois. Nous ne voulons que les insertions à
faire et nom la structure des tables. Il serait aisé de modifier l'opération pour faire cet éclatement sur un fichier SQL contenant aussi les
commandes de création des tables elles-mêmes.
Solution 1 (compliquée)
Dump de la base NOM_BASE_A_DUMPER (seulement les données des tables).
mysqldump --defaults-file=/etc/mysql.secret --host=localhost --port=3306
--protocol=tcp --user=root --quick --tables --skip-add-drop-table
--skip-add-drop-database --skip-create-options --no-create-info -c
NOM_BASE_A_DUMPER > /tmp/NOM_BASE_A_DUMPER.sql
Éclatement du fichier obtenu en autant de fichiers SQL que de tables dans la base considérée.
perl -e 'while(<>){ my $ligne=$_; chomp($ligne) ; if ( /^-- Dumping data for table
\`([^`]+)\`$/ ) { close SQL; open SQL, ">", "$1.sql" or die ("Impossible d ouvrir
$1.sql"); print SQL "$ligne\n"; } else { print SQL "$ligne\n"; } }'
/tmp/NOM_BASE_A_DUMPER.sql
Le résultat donnera une liste de fichiers ayant des noms du type .<NOM TABLE>.sql
Solution 2 (plus simple)
Au lieu d'éclater le résultat obtenu, on peut simplement utiliser les bonnes options de .mysqldump
for table in $(mysql -u root -p<mot de passe mysql> NOM_BASE_A_DUMPER -e 'show
tables;' | tail -n +3)
do
mysqldump --user=root NOM_BASE_A_DUMPER "$table" >
/tmp/NOM_BASE_tables/"$table".sql
done
Annexe
Pour un fichier SQL d'un complet :mysqldump
Il ne faut dumper qu' pour que ça fonctionne et faire attention de mettre l'ensemble des fichiersune seule base de données à la fois
SQL générés dans un de celui contenant le dump original car un nom de table identique au nom de la baserépertoire différent
pourrait conduire à des erreurs.
Dump SQL d'une base mysql avec mysqldump
La commande précédente ne fonctionne pas si les noms de tables contiennent des espaces.
# dump de la base
mysqldump --tables -c NOM_BASE_A_DUMPER > /tmp/NOM_BASE_A_DUMPER.sql
# éclatement
perl -e 'while(<>){ my $ligne=$_; chomp($ligne) ; if ( /^-- Table structure for
table \`([^`]+)\`$/ ) { close SQL; open SQL, ">", "$1.sql" or die ("Impossible d
ouvrir $1.sql"); print SQL "$ligne\n"; } else { print SQL "$ligne\n"; } }'
/tmp/NOM_BASE_A_DUMPER.sql
La seule différence entre les deux, c'est de faire une découpe de fichier sur au lieu de couper sur -- Table structure for table --
.Dumping data for table
1 / 2 100%

mysqldump avec un fichier sql par table d`une base de données

La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !