LoginSignup
5
4

More than 5 years have passed since last update.

【シェルスクリプト】ssh 接続先サーバーで mysqldump した結果を gzip で圧縮し、標準出力して保存する

Last updated at Posted at 2018-12-28

やりたいこと

サーバー A で mysqldump した結果をサーバー B に保存したい。

このとき、サーバー A で直接実行するのではなく、サーバー B からサーバー A へ SSH して mysqldump を実行し、その結果を gzip で圧縮のうえ標準出力してサーバー B に保存します。

┏━━━━━━━━━━━━━━━━━┓                   ┏━━━━━━━━━━━━━━━━━┓
┃    サーバー B    ┃ ━━━━━ SSH ━━━━━▶  ┃    サーバー A    ┃
┃ (バックアップ用)┃ ◀━━━ 標準出力 ━━━  ┃ mysqldump(圧縮)┃
┗━━━━━━━━━━━━━━━━━┛                   ┗━━━━━━━━━━━━━━━━━┛

やり方

今回は backup.sh というファイル名で下記のシェルファイルを作成しました。

~/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 としました。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4