Rediriger la sortie de mysqldump vers scp


13

J'ai travaillé avec un pro de Linux il y a des années qui a fait ce truc astucieux. Il pourrait faire un mysqldump mais rediriger la sortie vers une connexion scp / ssh plutôt que d'écrire sur le disque . Nous avons utilisé ce calme un peu là où je travaillais, mais je ne me souviens plus comment faire cela.

Je suis maintenant confronté au problème où mon disque dur dans mon serveur est sur ses derniers pieds et est, à des fins intensives, monté en lecture seule de façon permanente.

J'espérais utiliser cette supercherie en ligne de commande pour pouvoir toujours sauvegarder mes bases de données sur un nouveau serveur, car il est clairement hors de question d'écrire le vidage sur la diska locale et de le transférer.

Est-ce que cette petite astuce est réellement possible? Si oui, quelle est la syntaxe?

J'ai depuis réalisé en raison du problème de système de fichiers en lecture seule que je constate que je ne peux même pas me connecter à mysql pour faire le vidage. Mais votre retour d'information a été formidable et, je l'espère, utile à quelqu'un d'autre à l'avenir


1
"intentions et buts"
Ignacio Vazquez-Abrams

Réponses:


11

mysqldump dbname | ssh root@remoteserver.com "mysql -D dbname"

Cela devrait fonctionner :-)

Configurez également des clés entre les systèmes afin de pouvoir le faire sans avoir besoin d'un login / pass :-)


Ceci est vraiment astucieux, canalisant le vidage directement dans mysql sur le serveur distant, le clonage de la base de données est essentiellement une commande. Ai-je raison?
xzyfer

1
vous l'avez ;-) bien sûr, vous pouvez toujours simplement simplement pousser vers un fichier mais j'aime les vidages car ils vous permettent de passer à une sauvegarde si nécessaire :-) en temps réel en changeant simplement une adresse IP dans vos fichiers de configuration ... énorme avantage. Nous faisons cela sur nos trucs linode tout le temps
Glenn Kelley

Je pense qu'il pourrait y avoir des problèmes de mise en mémoire tampon des tuyaux ici?
Phil Hollenback

10
mysqldump ... | ssh ... "cat > out.dmp"

Celui-ci a très bien fonctionné pour moi. J'ai configuré l'authentification par clé publique sur mon ordinateur portable Mac OS X et mysqldump -p <dbname> | ssh <user>@<ip_address> "cat > <filename>.sql" j'ai exécuté exactement ce dont j'avais besoin.
harperville

2

J'aime la réponse de @ GlennKelley, mais je voulais souligner ce qui suit:

Nous avions une base de données de 450 Go, mais seulement 500 Go provisionnés sur l'hôte. Nous ne pouvions pas exporter localement, nous avons donc exporté à distance. Nous avons validé la sortie et il y avait des centaines d'exemples où la sortie était corrompue en raison de problèmes de mise en mémoire tampon des canaux.

La meilleure solution ici est, à partir de l'hôte cible sur lequel vous souhaitez que votre vidage se termine, exécutez mysqldumpmais utilisez l' -hoption pour l'hôte. Pointez l'hôte vers le serveur MySQL et exportez les données à l'aide d'un >.

mysqldump -u root -p -h 10.1.1.199 --all-databases ...<more options>... > dump.sql
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.