mysqldumpでssh(多段)ごしにリモートサーバにmysqlのバックアップを取得する
はじめに
リモートのDBサーバ(多段sshの先にある)から手元の環境にssh越しにバックアップを取得しました。
ネットワーク的にはこんな感じ
ローカル → [fumidai]踏み台(ssh入り口) → [webserver]Webサーバー → [mydatabase]DB
※DBには、Webサーバーからしか接続できない
仮にこうします)
※ DBのホスト名(IP)= AAA.BBB.CCC.DDD
※ DB接続ユーザー名= root
※ DB接続パスワード= prootpassword
セットアップ
ssh経由でのリモートサーバーの接続する際に利用される設定ファイルを使います。
[.ssh/config]には、以下のように多段の設定を行います。
Host fumidai
HostName xxx.xxx.xxx.xxx # 踏み台のアドレス
User qiita_tarou # 踏み台にログイン許可されたユーザー(sshのキーは登録されている前提)
Host webserver
HostName xxx.xxx.xxx.xxx # Webサーバーのアドレス
User centos # Webサーバーにログイン許可されたユーザー(今回は、centosユーザーとする)
IdentitiesOnly yes
IdentityFile ~/.ssh/webserver.pem # pemキー
ProxyCommand ssh -W %h:%p fumidai
この状態で、sshで、webserverにログインできることを確認
$ ssh webserver
[centos@webserver ~]$
ローカルから実行するコマンド
ssh {.ssh/configに設定している接続先名} 'mysqldump --single-transaction -h {DBのホスト名 or IPアドレス} -u{DBユーザー名} -p{DBパスワード} {データベース名} | gzip' | cat > ./backup.sql.gz
なので、今回の例だと以下の様になる
ssh webserver 'mysqldump --single-transaction -h AAA.BBB.CCC.DDD -uroot -prootpassword mydatabase | gzip' | cat > ./mydatabase.sql.gz