2015-07-02 18 views
5

Ho bisogno di copiare mysql db da un server remoto a un server locale. L'unico modo per accedere a quel DB è collegarmi a un computer remoto (chiamiamolo X) con ssh, e poi da quel computer mi collego a mysql con mysql -h address -u username -p password. Il mio limite è che non posso fare il dump sul server mysql che esegue il DB, e non posso fare il dump sul computer X (per ragioni amministrative che non possono essere cambiate).mysqldump da un server remoto

C'è un modo per dire a mysql di eseguire il dump direttamente sul mio server locale? (Forse usando PIPE, anche se non ho familiarità con esso). Per quello che vale, il mio server gira su server Ubuntu, X gira anche su Linux.

Ho provato a cercare una soluzione ma non sono riuscito a trovare qualcosa per questo scenario esatto.

Apprezzare qualsiasi aiuto.

saluti, Elad

+0

Si potrebbe provare a utilizzare sshfs e mappare una cartella remota (forse il pc locale se è accessibile) sul server mysql. quindi usalo per la discarica. (presumo che tu stia utilizzando un server Linux mysql) –

+0

Puoi dire a ssh di eseguire un comando sul computer remoto, quindi reindirizzare l'output su un file sul tuo computer locale –

risposta

3

È possibile utilizzare funzionalità di tunneling SSH:

ssh server-x -L 12345:remote-db-server:3306 

Questo dirà il client SSH per ascoltare le connessioni TCP alla porta 12345 sulla macchina locale (quello che sei collegamento da) e per inoltrarli come connessioni da server-x alla porta 3306 (la porta predefinita del server MySQL) su remote-db-server.

Quindi è possibile eseguire solo mysqldump sul computer locale e comunicarlo per connettersi alla porta localhost 12345. Sarà effettivamente la connessione al server di database remoto, e dal punto di vista di quel server sarà come se la connessione fosse provenendo da server-x.

2

È possibile utilizzare la funzionalità di reindirizzamento STDIN/STDOUT di SSH:

$ ssh [email protected] "mysqldump -h host -u username -p dbname" > mylocalfile.sql 

Con questo comando, mysqldump scrive la sua discarica a STDOUT, che viene reindirizzato alla STDOUT dal tuo guscio locale. Con > mylocalfile.sql si scrive lo stream di STDOUT sul file locale.