mysqldump via SSH tunnel

SigmaX picture SigmaX · Aug 20, 2012 · Viewed 8.5k times · Source

I have a server setup as follows:

  • webserver (gateway machine, accessible from the Internet via SSH)
  • dbserver (database server, not accessible from the web)

My goal is to use mysqldump to pull a backup from dbserver to my laptop via the web. Up to this point, the question is a duplicate of this question, except that webserver does not have mysqldump installed, and I don't have the rights to install it. So I'm trying to use mysqldump on my laptop to pull from a server behind a gateway that I don't have SSH rights to.

Following the discussions here and here, I'm trying to do something like this to set up the tunnel:

ssh -f -L 3306:dbserver:3306 user@webserver -N

followed by:

mysqldump -P 3306 -h localhost -u dbuser -p db

but I run into the same trouble this person did, and am not quite sure what's going on with the tunneling or how to fix it (and adding an entry to my laptop's hosts file doesn't seem to fix it like it did for him).

Answer

Paperghost picture Paperghost · Aug 29, 2012

Dump databases daily to the gateway machine then fetch from there

#!/bin/sh
# Backup the mysql Databases
 for database in $(mysql -u b4ckup -pd1psh1t --host server.database.net -e "show databases" | awk '{print $1}' | grep -v Database)
do
        mysqldump -u user -p password --lock-tables=false --host server.database.net $database > /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/server/$database.sql
done