先日、レンタルサーバーを契約するなら遠隔地へのバックアップを行うことがあなたの大切な資産ともいえるブログやwebサービスのデータを守るために必要ということをお伝えしました。

大切なことは分かったけど実際にどうやって遠隔地へのバックアップを取るの?と思う方も多いと思います。

そこで今回は、私が行っているエックスサーバーのレンタルサーバーからさくらインターネットのサーバーへ自動で定期的にバックアップする方法をシェアします。

自分のレンタルサーバーの所在地を調べる方法

まず、遠隔地にバックアップするためにはレンタルサーバーの所在地がどこにあるのか把握する必要があります。

別のレンタルサーバーサービスを契約してもどちらもたとえば東京にあった場合、あまり意味が無くなってしまいます。(一定の意味はありますが、大災害には耐えられませんね)

自分が契約しているレンタルサーバーの所在地を調べるにはこちらの記事を参考に調べていただければと思います。

参考:ビズサバ レンタルサーバーの実際のスペックとサーバーの所在地を調べてみた

私の場合は調べてみると関東と関西に2つのレンタルサーバーがありました。

バックアップの概要

今回のバックアップはエックスサーバーから定期的にさくらインターネットのサーバーへバックアップデータを自動でコピーするという作業を自動化します。

その中で使用する主な仕組みこちらです。

  • cron(クーロン):定期的(1日1回、毎週1回など)に何かの処理を自動実行させる仕組み。
  • シェルスクリプト(シェル):コマンドを自動的に実行することのできるテキストファイル。Windowsでいうバッチファイルに相当。
  • scp:リモートのサーバーへセキュアにデータをコピーするコマンド。シェルの中に記述する。

その他にもディレクトリ(フォルダ)を作成するmkdirなどを使用しますが、細かく書くとキリがなくなりますのでここでは省略します。

バックアップの処理の流れ

エックスサーバー内に作成するシェルとcronを組み合わせてこのような処理の流れでバックアップを行います。

  1. エックスサーバーのcronによって一定期間(データベースは毎日、その他のデータは週一)ごとにシェルが起動される。
  2. 当日のバックアップフォルダをさくらインターネットのサーバーへ作成する。
  3. さくらインターネットのサーバーへデータのコピーを行う。
  4. 一定期間が経過(1カ月間)したさくらインターネットのサーバー内のバックアップは削除します。

バックアップ処理の構築

では実際にバックアップ処理の構築を行っていきます。

0. 事前準備

SSH(セキュアシェル)というリモートでに必要なユーザー名、パスワード、公開鍵認証方式でのアクセス用の秘密鍵を準備します。

エックスサーバーの場合はこちらの公式サイトをご覧ください。

さくらインターネットの場合は契約時に送られてきたメール内の「契約サービスの接続情報」の「FTPアカウント」「サーバパスワード」になります。

WindowsパソコンからSSH接続を行うためのクライアントソフトはいろいろありますが、私はTera Term(フリーソフト)が好きなのでこちらをオススメします。

何度もSSHで両サーバーへ接続することになりますのでTera Term Menuなどに登録しておくことをオススメします。

Tera Term Menuの説明はこちらの「サーバ管理の必需品!SSH接続なら自動ログインできるTeraTerm Menuで効率化!」に記載していますのでご覧ください。

1. さくらインターネットのサーバーにバックアップ用ディレクトリ作成

まずはさくらインターネットのサーバーにバックアップ用のディレクトリ(フォルダ)を作成します。

今回はワードプレスのデータをバックアップすることを想定し、データベース用のバックアップディレクトリとワークスペース用のバックアップディレクトリを作成します。

さくらインターネットのサーバーにSSHでログインするとこのような表示になります。

さくらインターネット SSH接続

そのままpwdとコマンドを打ち、Enterキーを押すと現在の自分がいる場所が表示されます。

/home/[ユーザー名]と表示されるはずです。

そのまま「mkdir db-backup」「mkdir wp-backup」の2つのコマンドを打ち、ディレクトリを作成します。

lsというコマンドを打ち、Enterキーを押すととディレクトリが作成されたことが分かります。

さくらインターネット ディレクトリ確認

2. シェルスクリプトを作成

パソコン上でデータベースバックアップ用とワードプレスデータバックアップ用のシェルスクリプトを作成します。

メモ帳などのエディタを開き、以下のデータベースバックアップ用コードを入力します。

【】で囲まれている箇所はご自身の環境に合わせて変更ください。

#!/bin/sh

passwd="【さくらインターネットのサーバーのSSH接続用パスワード】"

# 現在日付
date=`/bin/date '+%Y%m%d'`

# データベースのアクセス情報
DBhost="【エックスサーバーのデータベースのホスト名】"
DBuser="【エックスサーバーのデータベースのアクセス権所有ユーザー名】"
DBpass="【エックスサーバーのデータベースのパスワード】"

# データベースのダンプ
mysqldump -u ${DBuser} --password=${DBpass} -h ${DBhost} 【データベース名】 > /home/【エックスサーバーのユーザー名】/DBtmp/【ドメイン名】.${date}.sql

# データベースをコピー
expect -c "
set timeout 1000
spawn scp -r /home/【エックスサーバーのユーザー名】/DBtmp/【ドメイン名】.${date}.sql 【さくらインターネットのユーザー名】@【さくらインターネットのサーバー名】:/home/【さくらインターネットのユーザー名】/db-backup/.
expect \"password:\"
send \"${passwd}\n\"
expect \"$\"
exit 0
"
# ダンプファイルを削除
rm -rf /home/【エックスサーバーのユーザー名】/DBtmp/*

# -------------------------------
# 32世代以上前のバックアップは削除
# (31世代だけバックアップを残す)
# -------------------------------
expect -c "
set timeout 1000
spawn ssh 【さくらインターネットのユーザー名】@【さくらインターネットのサーバー名】
expect \"password:\"
send \"${passwd}\n\"
expect \"%\"
send \"cd /home/【さくらインターネットのユーザー名】/db-backup/\n\"
expect \"%\"
send \"ls -r /home/【さくらインターネットのユーザー名】/db-backup/ | tail -n +32 | xargs -r rm -rf\n\"
expect \"%\"
exit 0
"

echo "DB backup finish!!"

変更後、ファイル名をbackupDB.shとして保存してください。

再度メモ帳を開き、ワードプレスデータバックアップ用シェルスクリプトを作成します。

【】で囲まれている箇所はご自身の環境に合わせて変更ください。

#!/bin/sh

passwd="【さくらインターネットのサーバーのSSH接続用パスワード】"

# 現在日付
date=`/bin/date '+%Y%m%d'`


# -------------------------
# ディレクトリ作成
# -------------------------
expect -c "
set timeout 1000
spawn ssh 【さくらインターネットのユーザー名】@【さくらインターネットのサーバー名】
expect \"password:\"
send \"${passwd}\n\"
expect \"%\"
send \"mkdir /home/【さくらインターネットのユーザー名】/wp-backup/${date}\n\"
expect \"%\"
exit 0
"

# -------------------------
# テーマなどをバックアップ
# -------------------------
expect -c "
set timeout 1000
spawn scp -r /home/【エックスサーバーのユーザー名】/【ドメイン名】/public_html 【さくらインターネットのユーザー名】@【さくらインターネットのサーバー名】:/home/【さくらインターネットのユーザー名】/wp-backup/\"${date}\"/.
expect \"password:\"
send \"${passwd}\n\"
expect \"$\"
exit 0
"

# -------------------------------
# 5世代以上前のバックアップは削除
# (4世代だけバックアップを残す)
# -------------------------------
del_date=`/bin/date -d '31 day ago' +%Y%m%d`

expect -c "
set timeout 1000
spawn ssh 【さくらインターネットのユーザー名】@【さくらインターネットのサーバー名】
expect \"password:\"
send \"${passwd}\n\"
expect \"%\"
send \"cd /home/【さくらインターネットのユーザー名】/wp-backup/\n\"
expect \"%\"
send \"ls -r /home/【さくらインターネットのユーザー名】/wp-backup/ | tail -n +5 | xargs -r rm -rf\n\"
expect \"%\"
exit 0
"

echo "WP backup finish!!"

変更後、ファイル名をbackupWP.shとして保存してください。

3. エックスサーバーにシェルスクリプトを配置

作成したシェルスクリプトをエックスサーバーに配置します。

こちらのエックスサーバー公式ページをご覧いただき、お好きなディレクトリへbackupDB.shとbackupWP.shをアップロードしてください。

ちなみに私は、/home/[ユーザー名]のディレクトリに置いています。

4. エックスサーバーにディレクトリを作成

データベースを一時的にダンプ(ファイル化)するためのディレクトリを作成します。

エックスサーバーにSSH接続し、pwdコマンドを打ちます。

/home/[ユーザー名]と出力されると思いますのでそこで「mkdir DBtmp」と入力します。

lsコマンドを打ち、DBtmpディレクトリが作成されたことを確認します。

DBtmpディレクトリ作成

5. シェルスクリプトを実行してテストを行う

アップロードをした2つのシェルを実行してちゃんと動くかテストを行います。

シェルを実行するには「sh backupDB.sh」「sh backupWP.sh」というコマンドで行います。

実行中は多くの文字が出力されますが、問題ありません。

正常にシェルが終了すると「DB backup finish!!」「WP backup finish!!」という文字が出力されます。

もしこれらが出力されない場合、もう一度「2. シェルスクリプトを作成」に戻り間違いがないかチェックしてください。

正常に終了した場合、さくらインターネットのサーバーにSSH接続し、先ほど作成したdb-backup、wp-backupディレクトリにデータが格納されているか確認します。

さくらインターネットのサーバーにSSH接続し、「cd db-backup」と入力するとdb-backupディレクトリ内に移動できます。

lsコマンドで中身を確認するとシェルを実行した日付のバックアップができていることを確認してください。

バックアップ実行確認

※上の画像では複数のバックアップができていますが、私の環境ではすでに定期的にバックアップを稼動させているためです。

同様にwp-backupディレクトリの中身も格納されているか確認しましょう。

wp-backupの中はさらに日付のディレクトリが作成されていますのでその中に再度移動すると中身が入っていることを確認できます。

6. cronへの登録

長くなりましたが、こちらの作業が最後になります。

cronへ先ほどのシェルの実行を登録することで自動でシェルを実行してくれます。

エックスサーバーの場合、webのサーバーパネルのcron設定から行います。

サーバーパネル cron設定

cron設定追加タブからまずはデータベースのバックアップ設定を行います。

DBのバックアップ設定

私はデータベースのバックアップは毎日深夜3時40分にしています。

この3時40分という中途半端な数字には大きな意味はありません。

コマンドの入力欄には「sh /home/【ユーザー名】/backupDB.sh」のようにフルパスで入力してください。

私のこのブログではこの時間帯にアクセスが少ない時間帯のため、この時間帯にしています。

そのため、ご自身のブログやwebアプリのアクセスが少ない時間帯にすることをオススメします。

続いてワードプレスのバックアップ設定です。

ワードプレスのバックアップ設定

ワードプレスのバックアップ設定は、毎週月曜日の深夜4時にしています。

曜日は月曜日が1、火曜日が2・・・のように入力します。

コマンドの入力欄には「sh /home/【ユーザー名】/backupWP.sh」のようにフルパスで入力してください。

こちらは土日はアクセスが基本的に多いので月曜日、深夜4時はデータベースのバックアップが終わった後にワードプレスのバックアップが開始されるようにしています。

お好きなように変更してください。

最後に:バックアップデータはこまめに確認しましょう

サーバーバックアップ

今回は簡易的にエックスサーバーからさくらインターネットのサーバーにバックアップを行う方法をご紹介しました。

バックアップは通常は問題なく成功すると思いますが、失敗する可能性もあるため、こまめに上記「5. シェルスクリプトを実行してテストを行う」で行ったとおり、さくらインターネットのサーバーにアクセスしてバックアップがうまくいっているか確認してください。

慣れれば1分もかからないうちに終わると思います。

エックスサーバー自体にも自動バックアップ機能がありますが、遠隔地にバックアップが取られている確証がありませんし、データの復元をするのが有料、最大48時間待たされるというデメリットがあります。

今回ご紹介した方法であればさくらインターネットのサーバーはスタンダードプランは月額515円で利用できますし、データの復元はもちろん無料で待たされるということもなく、復旧可能です。

また、今回はエックスサーバーとさくらインターネットのサーバーでしたが、SSH接続が可能なレンタルサーバーであればどのサーバーでも多少変更を加えるだけで使用可能だと思いますのでぜひご利用ください。

ご自身の大切なデータはしっかりと遠隔地にバックアップして安心してコンテンツ作成に注力しましょう。