Je voudrais écrire un script shell (utilisant actuellement bash) pour sauvegarder automatiquement le contenu de plusieurs schémas MySQL sur un serveur distant. Le serveur distant est verrouillé pour autoriser uniquement l'accès SSH, je dois donc créer un tunnel SSH avant de courir mysqldump
contre les différents schémas.
Je peux créer un tunnel sans aucun problème, mais j'aimerais pouvoir le fermer automatiquement une fois le vidage de la base de données terminé.
Actuellement mon script fait ceci:
/usr/bin/ssh -T -f -L 4444:127.0.0.1:3306 -l remoteuser 208.77.188.166 sleep 600
/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db1 | gzip > /root/backups/snapshot/db1.sql.gz
/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db2 | gzip > /root/backups/snapshot/db2.sql.gz
/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db3 | gzip > /root/backups/snapshot/db3.sql.gz
Lorsque la connexion est maintenue ouverte pendant 600 secondes, il est évident cependant que si l'un des premiers vidages prend plus de temps, la connexion est fermée avant la fin des autres vidages. Je voudrais conserver des fichiers séparés pour chaque sauvegarde de schéma (évitez donc le --databases
mysqldump pour l'instant).
Aucune suggestion?
la source
$ ssh user@host "mysqldump foobar | gzip -9" | gzip -d > foobar.sql
Ajoutez l'option -N, l'option -f et le sleep 600, cela ouvrira le tunnel sans l'exécuter en arrière-plan. Ensuite, vous pouvez exécuter la commande avec &, obtenir le PID, puis tuer le processus ssh une fois les travaux terminés.
(J'ai testé cela avec bash - vous devrez peut-être changer les choses pour un autre shell)
la source
Une légère variation sur la suggestion de sleske, vous pouvez diriger la sortie mysqldump via gzip pour compresser avant le transfert:
la source
Comme l'a dit Sleske, pourquoi s'embêter dans ce cas particulier? Cependant il existe une solution pour contrôler un tunnel ssh dans le cas général: utilisez un tube nommé. Créez d'abord le tuyau comme ceci:
Ensuite, vous écrivez (bloquant le tuyau) dans votre ssh pour créer le tunnel:
Lorsque vous souhaitez fermer le tunnel, lisez simplement le tuyau:
Et voilà!
la source
Voilà comment je l'écrirais,
Où se trouve le script,
Enfin, l'archive peut être
scp
éditée avec une autre commande.Oui, je n'ai ni pipe ni tunnel.
la source