やりたいこと
サーバー A で mysqldump
した結果をサーバー B に保存したい。
このとき、サーバー A で直接実行するのではなく、サーバー B からサーバー A へ SSH して mysqldump
を実行し、その結果を gzip で圧縮のうえ標準出力してサーバー B に保存します。
┏━━━━━━━━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━━━━┓
┃ サーバー B ┃ ━━━━━ SSH ━━━━━▶ ┃ サーバー A ┃
┃ (バックアップ用)┃ ◀━━━ 標準出力 ━━━ ┃ mysqldump(圧縮)┃
┗━━━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━━━━┛
やり方
今回は backup.sh というファイル名で下記のシェルファイルを作成しました。
#!/bin/bash
date=$(date "+%Y%m%d")
ssh server_a "mysqldump -u root -ppassword DBname | gzip -c" > ~/backup/${date}.sql.gz
これを sh ~/backup.sh
で実行すれば、サーバー B の ~/backup ディレクトリ内にバックアップファイルが作成されます。
各コマンドを簡単に解説していきます。
ssh host_name
~/.ssh/config 内に設定を書いて ssh server_a
で ssh できるようにしています。
設定の書き方はこちらの記事とかを参考にしてみてください。
ssh host_name "hogehoge"
ssh
コマンドに続けて "hogehoge"
と書くと、ssh 接続先で "hogehoge"
コマンドが実行できます。
mysqldump -u root -ppassword DBname
MySQL のデータベースを dump するコマンドです。
オプションがいろいろありますので、こちらの記事を参考にしてみてください。
mysqldump | gzip
mysqldump
の出力結果を渡して gzip
を実行します。
パイプとかの説明についてはこちらにまとめられています。
gzip -c
gzip
コマンドに -c
オプションをつけることで圧縮結果を標準出力してくれます。
> ~/backup/${date}.sql.gz
gzip
で圧縮した結果を標準出力してサーバー B に保存します。
なお、ここのコマンドはサーバー A 側で実行されます。
${date}
には日付が入りますので、20181228.sql.gz という感じのファイル名になります。
今回はデータベースのバックアップファイルなので、わかりやすいようにファイル名の最後を .sql.gz としました。