Reindirizza l'output di mysqldump su scp


13

Ho lavorato con un professionista di Linux anni fa che ha fatto questo trucco ingegnoso. Potrebbe fare un mysqldump ma reindirizzare l'output su una connessione scp / ssh piuttosto che scrivere su disco . Abbiamo usato un po 'questa quiete in cui lavoravo ma non ricordo più come farlo.

Ora sto affrontando il problema in cui il mio disco rigido nel mio server è alle sue ultime gambe ed è, per scopi intensivi, montato permanentemente in sola lettura.

Speravo di utilizzare questo trucco della riga di comando per poter ancora eseguire il backup dei miei database su un nuovo server, dal momento che scrivere il dump sul disco locale e trasferirlo è chiaramente fuori questione.

È davvero possibile questo piccolo trucco? In tal caso, qual è la sintassi?

Da allora mi sono reso conto a causa del problema del file system di sola lettura, esperienza che non riesco nemmeno a connettermi a MySQL per eseguire il dump. Ma il tuo feedback è stato fantastico e si spera possa essere utile a qualcun altro in futuro


1
"intenzioni e scopi"
Ignacio Vazquez-Abrams,

Risposte:


11

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

dovrebbe funzionare :-)

Imposta anche le chiavi tra i sistemi in modo da poterlo fare senza bisogno di un login / pass :-)


Questo è davvero elegante, il piping del dump direttamente in mysql sul server remoto, essenzialmente clonare il database è un comando. Ho ragione?
xzyfer,

1
hai capito ;-) ovviamente puoi sempre semplicemente fare un push su un file ma mi piacciono i dump perché ti permettono di passare a un backup se necessario :-) in tempo reale semplicemente cambiando un ip nei tuoi file di configurazione ... ENORME vantaggio. Lo facciamo sempre sulla nostra roba linode
Glenn Kelley,

Sento che potrebbero esserci dei problemi di buffering delle pipe qui?
Phil Hollenback,

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

Questo ha funzionato alla grande per me. Ho impostato l'autenticazione con chiave pubblica sul mio laptop Mac OS X e mysqldump -p <dbname> | ssh <user>@<ip_address> "cat > <filename>.sql" ho eseguito esattamente ciò di cui avevo bisogno.
Harperville,

2

Mi piace la risposta di @ GlennKelley, ma ho voluto sottolineare quanto segue:

Avevamo un database di 450 GB, ma solo 500 GB di provisioning sull'host. Non abbiamo potuto esportare localmente, quindi abbiamo esportato in remoto. Abbiamo convalidato l'output e c'erano centinaia di casi in cui l'output era corrotto a causa di problemi di buffering delle pipe.

La soluzione migliore qui, è, dall'host di destinazione in cui vuoi che il tuo dump finisca, esegui mysqldumpma usa l' -hopzione per host. Puntare l'host sul server MySQL ed esportare i dati utilizzando a >.

mysqldump -u root -p -h 10.1.1.199 --all-databases ...<more options>... > dump.sql
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.