Sauvegarde via mysqldump

Bonjour,
Suite à quelques difficultés pour restaurer ma base de données via phpmyadmin, je décide de le faire via mysqldump .
Je dispose d’ un serveur en local, et mon ordinateur portable sur lequel je souhaite récupérer mes sauvegardes.

Première tentative, en faisant un mysqldump de mon portable sur mon serveur via ssh, je récupère ma sauvegarde du premier coup.
Mais ce que je voudrais, c’ est que ce soit mon serveur qui me l’ envoi sur mon portable, et là ça coince. J’ ai rentré cette ligne sur mon serveur :

Au début cela fonctionne, on me demande mon mot de passe puis après :

Pourtant ce repertoire existe bel et bien sur mon /home
J’ ai essayé simplement une sauvegarde sur mon /home/monidentifiant… Pareil.

Je peux par contre me connecter sur mon portable depuis mon serveur sans problème.

Merci à tous pour votre aide, bon après midi !

Up,
Quelqu’ un sait d’ ou vient mon erreur ?

Salut,

Ce que tu écris ne peut pas marcher du tout.
Le chevron de redirection > sert pour rediriger la sortie standard d’un programme vers un fichier (ou descripteur de fichier).
En plus avec cette syntaxe, mysqldump croit que ton argument “/home/monidentifiant/Documents/Backups_forum/sql/nomdemabase.sql” lui est adressé, d’où ton message d’erreur.

Pour faire ce que tu veux, c’est à dire chainer la sortie standard d’un programme avec l’entrée standard d’un autre, tu dois utiliser l’opérateur | (pipe)

Il y a ensuite une deuxième erreur, cette fois dans la syntaxe de la commande ssh.
Tu passes en argument de ssh un nom de fichier que tu veux “remplir”, ce qui n’est pas bon. L’argument de ssh doit être un programme à exécuter sur la machine distante. ssh est programmé de telle façon à envoyer les données provenant du pipe à ce programme.

Ce genre de commande marcherait mieux :

Dans notre cas, le programme ‘cat’ écrit dans la sortie standard tout ce qui provient de l’entrée standard (c’est à dire ce que lui passe SSH, qui vient lui même de mysqldump), ce qui répond à notre besoin en le conjuguant avec le chevron de redirection vers ton fichier destination.
La commande cat et la redirection vers le fichier de destination se trouve entre quote ’ car il s’agit d’une seule et même commande.

Bonsoir et merci pour ta réponse.
Je n’ ai pas tout saisi, en particulier la raison pour laquelle ma commande ne fonctionnait pas.

Je suis parti de celle qui fonctionnait, et qui récupérait de mon portable ma base sql située sur mon serveur en ssh. Elle n’ est peut etre pas correcte, mais elle fonctionne :

Je l’ ai adapté pour que cela fonctionne dans l’ autre sens, à savoir en ssh du serveur vers mon portable :

mysqldump -u root -p nomdemabase > ssh@ipdemonportable /home/monidentifiant/Documents/Backups_forum/sql/nomdemabase.sql

[quote]Le chevron de redirection > sert pour rediriger la sortie standard d’un programme vers un fichier (ou descripteur de fichier).
[/quote]
Pourquoi est ce que cela fonctionnait dans mon premier cas ?

Merci pour ta patience.

Ok, je vais décrire la cinématique des tes deux commandes.

SSH est lancé en tant que processus sur ton portable. Il se connecte à ton serveur mais ne lance pas d’invite de commande, car un nom de programme lui a été passé en argument. A la place, une fois qu’il est connecté, il lance ta commande "mysqldump -u root -p nomdemabase"
SSH balance ensuite sur sa sortie standard tout le résultat que mysqldump lui lance, c’est à dire le contenu de ta base en requête SQL.
Enfin, tu as une redirection de cette sortie standard vers un fichier. Tout ce qui sort va finalement atterrir dans le fichier /home/monidentifiant/Bureau/nomdemabase.sql de ton portable.

mysqldump -u root -p nomdemabase > ssh@ipdemonportable /home/monidentifiant/Documents/Backups_forum/sql/nomdemabase.sql

Le processus mysqldump est lancé depuis ton serveur. Le chevron de redirection lui demande d’envoyer sa sortie standard vers le fichier “ssh@ipdemonportable”. En théorie tu devrais donc avoir un fichier “ssh@ipdemonportable” qui va être créé dans ton répertoire courant et qui est censé contenir ton dump mysql… C’est pas du tout ce que tu veux mais c’est ce que tu lui demandes.
Mais cela ne se produit même pas, car il y a une deuxième erreur : une fois que la syntaxe du chevron a été résolue, la chaine de caractère “/home/monidentifiant/Documents/Backups_forum/sql/nomdemabase.sql” est passée en tant que second argument à ta commande mysqldump. D’où ton message d’erreur "mysqldump: Couldn’t find table: “/home/monidentifiant/Documents/Backups_forum/sql/nomdemabase.sql”

Voyons ensuite ma commande :

mysqldump est lancé sur ton serveur.
Le SQL produit sur la sortie standard devient en fait l’entrée standard de SSH, grâce à la magie de l’opérateur | (pipe).
SSH se connecte à ton serveur mais ne lance pas de shell car un programme a été passé en argument. De plus SSH est malin, et a été conçu de façon à transmettre son entrée standard sur le serveur distant.
Du coup, SSH reçoit le dump SQL et le transmet à la commande ‘cat > /home/monidentifiant/Documents/Backups_forum/sql/nomdemabase.sql’ qu’il exécute sur ton portable.
Le programme ‘cat’, sans argument, n’est qu’un répéteur (il recopie ce qui vient de l’entrée standard sur la sortie standard). Et comme on lui donne un chevron de sortie vers un fichier, il envoie tout au final dans ton fichier de destination.