Voglio scaricare il database sul mio sito ospitato in remoto a intervalli regolari usando uno script di shell. Sfortunatamente il server è bloccato piuttosto stretto, non ha mysqldump
installato, i file binari non possono essere eseguiti da utenti normali / nelle directory home (quindi non posso "installarlo" da solo) e il database vive su un server separato, quindi io impossibile prendere direttamente i file.
L'unica cosa che posso fare è accedere al server web tramite SSH e stabilire una connessione al server di database utilizzando il mysql
client della riga di comando. Come posso scaricare il contenuto in un file a la mysqldump
in formato SQL?
Bonus: se possibile, come posso scaricare i contenuti direttamente alla mia fine della connessione SSH?
Mi piace l'idea del tunnel SSH proposta di seguito, tuttavia, dovrei raddoppiarla.
localhost -> remote web server -> remote database server
Funziona bene:
$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N
Tuttavia, il tentativo di accedere a mysql non riesce:
$ mysqldump -P 3306 -h localhost -u user -p db
Enter password:
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost'
(using password: YES) when trying to connect
Immagino che si aspetti dalle credenziali dell'utente 'user'@'mysql.example.com'
. Come posso convincerlo a usarlo al posto del "vero" host?
Ok, l'ho fatto funzionare aggiungendo 127.0.0.1 mysql.example.com
al mio file hosts e connettendomi via mysqldump -P 3306 -h mysql.example.com -u user -p db
. Problema risolto! Sarei comunque interessato a una soluzione che non mi imponga di modificare il file hosts.
'user'@'localhost'
oltre a'user'@'mysql.example.com'
MySQL, anziché modificare il file hosts.