Téléchargement de Sauvegardes avec WinSCP

#1
Voir d'abord le script ici pour que votre serveur fasse des sauvegardes :

https://forums.planethoster.com/threads/sauvegardes-mysql-fichiers.4840/#post-18456

Pour télécharger les sauvegardes du serveur sur l'ordinateur local avec WinSCP

Ce qu'il faut :

Le port SSH - Demander au support si vous ne l'avez pas.

WinSCP : https://winscp.net/eng/download.php
(Je suggère la version "portable")

Dans WinSCP, établissez d'abord une connexion SFTP sur votre hébergement en sauvegardant le mot de passe (sinon, ce ne pourra être automatique). Acceptez la clé, etc.

Dans le menu "Session" - Choisir : Generate Session URL/Code...




Fermer la connexion/WinSCP

Coller le contenu dans un éditeur de texte (Ex: Textpad)

Entre la ligne "open" et la ligne "exit", ajouter les lignes suivantes en modifiant évidemment les adresses :

Code:
open..............

# Place WinSCP dans le dossier de sauvegarde des Bases de données
cd /home/USERCPANEL/backups/bdd

# Place WinSCP dans le dossier de sauvegarde sur l'ordinateur local
lcd M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\bdd

# synchronise le dossier local - Télécharge les fichiers du serveur dans le dossier local
synchronize local

# supprime du serveur les fichiers plus vieux que 3 jour
rm *<3D

# Même chose pour les fichiers
cd /home/USERCPANEL/backups/files
lcd M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\files
synchronize local
rm *<3D

# ... et les mails
cd /home/USERCPANEL/backups/mail
lcd M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\mail
synchronize local
rm *<3D

exit
Modifiez à votre convenance évidemment. Sauvegarder le fichier texte. Exemple M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\votrescript.txt

Pour tester votre script, ouvrir une console de commande (Menu Windows, rechercher cmd.exe) et coller la ligne suivante (modifiée)
Code:
D:\ADRESSE_DE_WinSCP\WinSCP.exe /log="M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\backup.log" /ini=nul /script="M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\votrescript.txt"
Note : On ne voit rien... ça se passe en arrière-plan.

Vérifiez si vos sauvegardes ont bien été téléchargées.

Si tout fonctionne, vous pouvez coller la ligne dans un raccourci. Ou ajouter une Tâche Planifiée dans windows en utilisant la même commande.
 
Dernière édition par un modérateur:
#2
Pour voir la progression, utiliser le WinSCP.com au lieu du WinSCP.exe

Dans un fichier texte, copier la commande:

Code:
D:\ADRESSE_DE_WinSCP\WinSCP.com /log="M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\backup.log" /ini=nul /script="M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\votrescript.txt"
Sauvegarder le fichier en QUELQUECHOSE.bat
 
#3
Petit ajout qui permet de supprimer les sauvegardes locales qui sont plus vieilles de X Jours....

Code:
D:\ADRESSE_DE_WinSCP\WinSCP.com /log="M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\backup.log" /ini=nul /script="M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups\votrescript.txt"

REM Effacer les vieilles sauvegardes locales (2017/04/28)
forfiles -p "M:\DOSSIER_LOCAL_DE_SAUVEGARDE\backups" -s -m *.gz /D -60 /C "cmd /c del @path"
Cette ligne effacera les fichiers *.gz plus vieux que 60 jours sur l'ordinateur local. Changez le -60 pour le nombre de jours désirés.
 
Dernière édition:
#4
merci, ce script fonctionne bien, toutefois je m'aperçois que j'ai un soucis à la décompression du tar.gz sous windows (tout essayé, gunzip sous DOS, 7-zip, ..), çà bloque. En fait si j'uploade à nouveau le fichier .gz sur le site et que j'essaye de le décompresser avec le cPanel, çà bloque aussi avec l'erreur:
/home/user/backups/site/1.gz: 14.0% -- replaced with /home/user/backups/site/1

curieusement le fichier perd son extension et passe de 842 Mo à 980 Mb. Cela bloque rapidement à 14%. Sous Windows cela bloque plutôt en fin de décompression (unexpected end of file)

Comme le fichier tar.gz original sur le site (avant le download par synchronize local via WinSCP) se décompresse bien via cPanel, cela veut dire que WinSCP n'effectue pas correctement le download (pourtant affichée en binary).

J'utilise souvent WinSCP pour l'upload de fichiers vers les sites de prod et je n'ai jamais de soucis au niveau d'un transfert même sur une vingtaine de sites à la fois. J'ai l'impression que c'est l'association du gz, notamment lorsque le fichier fait plusieurs centaines de méga que cela pose problème.

Auriez-vous une idée à ce sujet

merci d'avance










 
#5
Bonjour Marc,

En local, ça semble fonctionner pour moi avec Winrar mais ma plus grosse sauvegarde est de 175Mo. Je n'ai pas de quoi tester un fichier de près de 1Go.

D'après ce que vous dîtes, WinSCP semble vraiment être le coupable.

Si vous utilisez le raccourci ci-haut, il y a un log créé par WinSCP et ce log mentionnerait peut-être qu'il y a eu une connexion perdue lors du téléchargement ou quelque chose qui indique que le transfert ne s'est pas complété.

Sinon, peut-être essayer de télécharger la sauvegarde avec un Filezilla ou autre pour confirmer que WinSCP lâche la balle en cours de route. Je sais que Filezilla se coupe parfois sur les gros fichiers sans raison mais il "résume" et finit quand même le transfert correctement. (En général)

Je vois deux ou trucs sur Google en lien avec le problème de gros fichier et WinSCP comme "Optimize connection buffer size", des choses comme ça mais la première chose serait de voir si le log indique quelque chose.

A suivre...
 
#6
merci François pour toutes ces infos. Bon aujourd'hui çà a marché... 8-( donc dans le log, pas de message particulier, je ne sais pas d'ailleurs s'il y a une vérification au final du fichier uploadé. Ma version de Winscp est la 5.7.5. Je vois quelle a évolué, je vais donc effectuer une mise à jour. Ensuite si cela se reproduit je vais utilisé le paramètre /loglevel=2 qui semble fournir plus d'infos. Dans ma config le paramètre Optimize connection buffer size est coché mais je me demande si cette config est bien prise en compte aussi en mode script ou uniquement en mode interface windows.

. 2017-05-04 10:49:18.422 Copying "/backups/site/mywebsite.tar.gz" to local directory started.
. 2017-05-04 10:49:18.422 Binary transfer mode selected.
. 2017-05-04 10:49:18.422 Début du téléchargement de /backups/site/mywebsite.tar.gz
> 2017-05-04 10:49:18.422 TYPE I
< 2017-05-04 10:49:18.422 200 TYPE is now 8-bit binary
> 2017-05-04 10:49:18.422 PASV
< 2017-05-04 10:49:18.422 227 Entering Passive Mode (146,88,233,104,172,90)
> 2017-05-04 10:49:18.422 RETR mywebsite.tar.gz
. 2017-05-04 10:49:18.437 Data connection opened
< 2017-05-04 10:49:18.437 150-Accepted data connection
< 2017-05-04 10:49:18.437 150 47931.8 kbytes to download
. 2017-05-04 10:49:18.437 Data connection opened
< 2017-05-04 10:49:22.720 226-File successfully transferred
< 2017-05-04 10:49:22.720 226 4.275 seconds (measured here), 10.95 Mbytes per second
. 2017-05-04 10:49:22.735 Data connection closed
. 2017-05-04 10:49:22.735 Téléchargement réussi
. 2017-05-04 10:49:22.735 Got reply 1 to the command 4
. 2017-05-04 10:49:22.735 Transfer done: '/backups/site/mywebsite.tar.gz' [49082155]
. 2017-05-04 10:49:22.735 Session upkeep
> 2017-05-04 10:49:22.735 Script: close
. 2017-05-04 10:49:22.735 Got reply 1004 to the command 4
. 2017-05-04 10:49:22.735 Déconnecté du serveur
 
#7
Bonjour François,

bon maintenant que tout fonctionne bien au niveau des transfert des l'ensemble des sites, se pose la problématique d'accumuler des sauvegardes en local même sur un disque dur externe, c'est pas top (vu la prolifération des ramsonwares en ce moment ;-). Je voudrai créer pour chaque site un compte Google Drive qui me laisse 15Go gratuit sur le cloud et uploader ces fichiers de sauvegarde (le must serait directement depuis Winscp...). Je vois sur le web plutôt des solutions de type ftp en java comme http://www.andresoviedo.org/google-drive-ftp-adapter/. Ca marche surement, après 1 jour d'installation de compléments, de build, d'exécution sous Apache, ou pas... 8-( je cherche une solution plus simple comme http://olivermarshall.net/how-to-upload-a-file-to-google-drive-from-the-command-line/ avec wget. Est-ce que vous auriez une solution à me conseiller ?

merci d'avance
 
#8
La solution du dernier lien me semble plus facile à mettre en place et à utiliser (au bout de 5 minutes de lecture en tout cas) puisque ça reviendrait à ajouter quelques lignes à la batch file.

En gros, la batch file appelle le script winscp qui télécharge les sauvegardes localement et ensuite, appelle ce bidule pour les envoyer sur google drive. Le bidule permet plusieurs configurations donc il devient possible d'envoyer FichierA vers GDriveA et FichierB vers GDriveB et ainsi de suite.
https://github.com/prasmussen/gdrive#other (section Other, paramètre --config)

Il faut préparer d'avance chaque compte mais une fois que c'est fait, la batch file peut probablement s'occuper du reste.
 
Haut