こんにちは、ふろいどです。
前回WordPressをロリポップサーバに手動でインストールする方法を紹介しました。
【WordPress】ロリポップサーバに手動でWordPressをインストールする方法
今回はロリポップサーバでWordPressサイトのバックアップをオプションプラン(月額¥300)を使うことなく手動で保存する方法をご紹介します。
また、バックアップを保存しても、これを使って戻す方法がわからなければ宝の持ち腐れです。保存したバックアップファイルを使ってリストア(元に戻す)する方法も合わせてご紹介します。
- 新しいプラグインを入れるとWordPressが動かなくなった!
- 誤ってファイルやデータを消してしまった!
などなど、せっかく書き溜めたブログ記事を失うことは大変な損失です。
しっかりバックアップを保存しリスクに備えましょう。
そもそもなぜ手動でバックアップするのか?
そもそも、私はなぜオプションプランのバックアップサービスを使わずに手動でバックアップ保存することにしたのか?
それには2つの理由があります。
1つ目はそもそもブログ運営のコストを下げたかったから。これは当たり前ですよね。
もう1つは何を保存する必要があるのかを知り、ブログサイトを構成するファイルやデータを手元に残したかったからです。
これをやっておくことにより、将来的にサーバを引越しするなどの選択肢が持てるようになります。
このようにブログサイトの運営を長く続けていきたいなら、基本は押さえておいた方が良いだろうと考え、手動でインストールする事にしました。
バックアップの概要
ここでは、既に前回紹介した[【WordPress】ロリポップサーバに手動でWordPressをインストールする方法]でロリポップサーバ上にWordPressでサイトを構築済みであることを前提に手順をご説明します。
また、今回手順で利用した環境は以下のとおりです。
レンタルサーバ :ロリポップ スタンダードプラン WordPressバージョン: 4.7.1 利用したPC :mac book (OS X El Capian)
手順は大まかには以下の段階を踏んでいく事になります。
1.SSH接続の有効化 2.バックアップ用シェルの作成と実行 2.1 バックアップ用ディレクトリ作成 2.2 シェルスクリプトの保護設定 2.3 バックアップ用シェルスクリプトの作成 2.4 シェルスクリプトの実行と結果の確認 3.リストアの検証 3.1 下準備 3.2 データベースのリストア 3.3 Webディレクトリのリストア 3.4 リストア後の確認 4.cronの登録
【重要】免責事項
手順の実践にはmacの[ターミナル]やUNIXコマンド、シェルスクリプトの知識が必要となります。ここから先の手順はこれらの知識が無くてもできるだけ実践できるように書きますが、各コマンドやシェルスクリプトの意味はご自身で理解して利用されることをお勧めします。
また、ご紹介する手順の実践は全て自己責任でお願いします。この記事で紹介する手順を実践したことによりブログデータ消失などの損失・トラブル・損害・情報流出などが生じても、[おれじんブログ]運営者は一切の責任を負いません。
1.SSH接続の有効化
ロリポップサーバにおいて、コマンドラインからサーバを操作するために必要なSSH接続を有効にする設定をする必要があります。SSHでレンタルサーバに接続することにより、レンタルサーバをコマンドで操作することが可能なります。
本章では、このSSHで接続可能な状態にロリポップサーバの設定を変更します。
ロリポップサーバのユーザー専用ページにログインし、左のメニューから[WEBツール]-[SSH]を選択
次に、[SSHを有効にする]をクリックする
SSH接続に必要なパラメータが表示されるため、メモしておく。
以上でSSHでサーバに接続可能な状態となりました。
2.バックアップ用シェルスクリプトの作成と実行
次は、実際にSSHでサーバに接続し、バックアップ用のシェルスクリプトを作成していきます。
2.1 バックアップ用ディレクトリ作成
まずはSSHでサーバに接続します。
macのターミナルを開き、先ほどメモした内容を使って以下のコマンドを実行する
$> ssh [アカウント]@[サーバー] -p [接続ポート]
例: ssh main.jp-hogehoge@hoge.lolipop.jp -p 2222
コマンド実行後、パスワード入力を求められるため、先ほどメモした[パスワード]を入力してください。
SSHでロリポップサーバに接続され、以後、サーバに対してコマンドが実行可能な状態となります。
次にバックアップデータ用のディレクトリを作成していきます。
ターミナルからpwdコマンドを実行します。
これは現在自分がおかれているディレクトリの位置を表示するコマンドです。
ログイン直後だと /home/user/2/[アカウント] ディレクトリになっていると思います。
入力例:
$> pwd
/home/users/2/main.jp-hogehoge
この状態で[アカウントディレクトリ]配下に バックアップデータ格納用の
backupディレクトリを作成します。
$> mkdir backup
コマンド実行後にlsコマンドを実行し、backupディレクトリが正しく作成されていることを確認してください。
2.2 シェルスクリプトの保護設定
この後の手順でWordPressデータのバックアップ用シェルを作成し、このシェルをcronという機能を使って定期的に実行することでバックアップを実現します。
ロリポップサーバではcronで実行するシェルはwebディレクトリ配下に配置する必要があるのですが、何も対策せずにwebディレクトリ配下にシェルを置いてしまうと、第三者がブラウザからURLを指定しこのシェルを入手することができてしまいます。
シェルにはパスワードなど、重要情報も記載されるため、第三者からは見えない状態にしておく必要があります。
まずは外から見えてしまっても良いダミーファイルを配置して、シェルスクリプトが外から見えてしまう事を確認します。
以下のようにコマンドを実行し、webディレクトリ配下に backup.shファイルを作成します。
$> cd /home/users/2/[アカウントディレクトリ]/web
$> echo aaa > backup.sh
入力例:
$> cd /home/users/2/main.jp-hogehoge/web
$> echo aaa > backup.sh
これでwebディレクトリ配下にbackup.sh というダミーファイルが作成されます。
この状態でSafariなどのWebブラウザから以下のようなURLにアクセスしてみてください。
URL : http://[サイトのドメイン]/backup.sh
例 :http://hogehoge.net/backup.sh
するとどうでしょう。」backup.shファイルがダウンロードされてしまったのではないでしょうか?これでは大変に危険です!!!!
では、外部からbackup.shファイルを参照できないようにWordPressに設定を追加していきます。設定ファイル[.htaccess]に記述を追加することによりbackup.shファイルにアクセスを制限します。
webディレクトリ上で
$> vi .htaccess
とコマンドを実行することで viエディタで.htaccessファイルを編集することができます。
編集前にバックアップを保存しておいてください。
※viエディタの利用法はこちらのサイトに丁寧に解説されています
初心者のためのviエディタの使い方 – Tamo’s blog
viエディタで.htaccessの最後に以下の文言を書き加え保存します。
<files backup.sh> order allow,deny deny from all </files>
※既に書かれている内容は絶対に消さないでください。
ここまでやって先ほどと同じようにブラウザから backup.shの取得を試みてください。
ブラウザに「403 ERROR」などと表示されたのではないでしょうか?
2.3 バックアップ用シェルスクリプトの作成
それではいよいよ、実際にバックアップ処理を実行するシェルスクリプトを作成します。
先ほどwebディレクトリ上で作成したダミーファイルbackup.shをviエディタで編集し、バックアップ処理を記述します。
$> vi backup.sh
作成するシェルスクリプト例を以下に掲載します
<バックアップ用シェルスクリプトの例>
#!/bin/bash STATUS=0 datestr=`date +%Y%m%d-%H%M%S` #ホームディレクトリのパス webpath=/home/users/2/main.jp-hogehoge #バックアップ保存ディレクトリ backpath=/home/users/2/main.jp-hogehoge/backup #dbの接続諸元 dbserver=[データベースホスト] dbname=[データベース名] dbid=[ユーザー名] dbpw=[パスワード] # 関数: ファイルの削除を行う。 # $1: 削除対象のファイルパス(ワイルドカードは引数に指定する) # 10世代分のファイルを残し、それより古いファイルは削除します。 function deletefile(){ CNT=0 for file in `ls -1t ${1}` # 更新日付が新しい順にファイル名のリストを作る do CNT=$((CNT+1)) if [ ${CNT} -le 10 ] # 10世代より過去のバックアップは削除する then echo "残置: ${file}" continue fi eval "rm ${file}" echo "削除: ${file}" done return } # MAIN処理 # /var/www/html以下のファイルを # /backup/wordpressfile_YYYYMMDD-HHMMSS.tar.gzとして保存します。 eval "tar czf ${backpath}/${datestr}-wordpressfile.tar.gz -C ${webpath} web" if [ $? -ne 0 ] then echo "[ERROR]tar error." STATUS=1 fi eval "mysqldump -u ${dbid} -${dbpw} -h ${dbserver} ${dbname} |gzip -c > ${backpath}/${datestr}-mysqldb.sql.gz" if [ $? -ne 0 ] then echo "[ERROR]mysqldump error." STATUS=1 fi #10世代より前のファイルを削除 echo "wordpressバックアップのクリーニング" deletefile "${backpath}/*wordpressfile.tar.gz" echo "mysqldbバックアップのクリーニング" deletefile "${backpath}/*mysqldb.sql.gz" exit ${STATUS}
シェルスクリプト作成時に赤字で書かれた部分の値をご自分の環境に合わせて修正してください。
#ホームディレクトリのパス
webpath:ホームディレクトリを指定。
→/home/users/2/[アカウント]
#バックアップ保存ディレクトリ
backpath:バックアップファイルの保存先ディレクトリ
→今回の手順では /home/users/2/[アカウント]/backup となる前提
#dbの接続諸元
dbserver=[データベースホスト]を指定
dbname=[データベース名]を指定
dbid=[ユーザー名]を指定
dbpw=[パスワード]を指定
<シェルスクリプトの動作概要>
backup.shを実行すると、以下の2種類のバックアップがそれぞれ1ファイルに圧縮されて、バックアップ保存ディレクトリに保存されます。
・webディレクトリ(ファイル名 :[日付時間]-wordpressfile.tar.gz)
・データベースのエクスポートデータ(ファイル名 : [日付時間]-mysqldb.sql.gz)
保存ファイルが10世代になると、それ以上古いファイルが削除されます。
2.4 シェルスクリプトの実行と結果の確認
backup.shの作成が完了しましたら、早速バックアップを実行してみましょう。
webディレクトリ上で以下のコマンドを実行し、backup.shを実行します。
$> cd /home/users/2/[アカウントディレクトリ]/web
$> sh backup.sh
実行後、backupディレクトリにバックアップファイルが作成されていることを確認します。
$> cd /home/users/2/[アカウントディレクトリ]/backup
$> ls
これでバックアップファイルができていればOKです。
また、バックアップファイルが10世代以上できてきますと、backup.sh実行時に10世代より前のファイルが削除されます。
これでバックアップ用のシェルスクリプトが正しく作成できました!
3.リストアの検証
では、バックアップが正しく保存されているか確認するため、実際にリストア(復元)してみましょう。
リストア時に現在のデータを消してしまうため少し恐ろしいですが、ブログを作成したばかりの時点で一度試してみてください。
【注意!!】 リストアに失敗するとこれまで作成したサイトデータが全て消失します。 まだ作成たばかりのコンテンツが少ないサイトなど、消失しても構わないサイトでの確認をお勧めします。 本手順に則り作業してサイトデータが消失しても、[おれじんブログ]運営者は一切責任を負いませんので、自己責任でお願い致します。
3.1 下準備
まず、リストア前にダミーの投稿をしておきます。
これは、リストア後にダミーの投稿がなくなっていることを確認することにより、バックアップ時点の状態に戻ったことを確認するためです。
3.2 データベースのリストア
データベースが健在の場合は以下の手順でバックアップ作成時点のデータベース状態に復旧することができます。
データベース環境も壊れてしまった場合は、ロリポップサーバにてデータベースを新たに作成し、以下の手順を実行してください。
ターミナル上でバックアップファイルの保存先ディレクトリにカレントを移します。
$> cd [バックアップ保存先ディレクトリ]
入力例:
$> cd /home/users/2/main.jp-hogehoge/backup カレントディレクトリがバッックアップファイル保存先に移る
次にデータベースバックアップファイルを解凍します。
先ほど作成したシェルでバックアップした場合、データベースのバックアップファイルはzip圧縮されていますので、以下のコマンドで解凍します。
$> gzip -d [解凍したいデータベースファイル]
入力例:
$> gzip -d 20170218-000000-mysqldb.sql.gz →エラーが出なければok
$> ls
→ ファイルの一覧を表示
ファイル名末尾の”.gz”が外れていたら解凍成功です。
解凍がうまくいきましたら、次はデータベースのインポートをします。
先ほど解凍したファイルを以下のコマンドでインポートします。
$> mysql -u [ユーザー名] -p[パスワード] -h [サーバー名] [データベース名]< [ファイル名]
注意!:パスワード指定時に -pとパスワードの間にスペースを入れてはいけないようです。
-u や -h は後ろにスペース1文字いれてください。
入力例:
$> mysql -u hogeuser -phogepw -h mysql999.phy.lolipop.lan hogeuser-db < 20170218-000000-mysqldb.sql
→Warning: Using a password on the command line interface can be insecure.
とだけ表示されて実行が終了すればインポート成功
以上でデータベースのリストアは完了です。
3.3 Webディレクトリのリストア
次にWebディレクトリ配下のファイルのリストアを行います。
リストアの試験をするにあたり、まずは解凍先のWordPressファイル群をきれいさっぱり消してしまいましょう。
怖いですがリストアテストのためやむをえません。実施はくれぐれも自己責任でお願いします。
以下のコマンドでwebディレクトリ配下のファイルを全て消削除します。
$> cd home/users/2/[アカウント]/web (webディレクトリに移動)
$> rm -r *
入力例:
$> cd home/users/2/main.jp-hogehoge/web
$> rm -r *
これでwebディレクトリからは全てのファイルが消失しました。
それではこれからリストアの手順に移ります。
ターミナル上でバックアップファイルの保存先ディレクトリにカレントを移してください。
$> cd [バックアップ保存先ディレクトリ]
入力例:
$> cd /home/users/2/main.jp-hogehoge/backup カレントディレクトリがバッックアップファイル保存先に映る
次に、webディレクトリ配下にファイルの復元します。
先ほど作成したシェルでバックアップした場合、WordPressのバックアップファイルはtar圧縮されていますので、解凍が必要です。
ここでは、以下のコマンドで復元先のディレクトリ(先ほどファイルを全て消したwebディレクトリ)を指定し、一挙にリストアを完了します。
$> tar xzf [解凍したいファイル名] -C [ホームディレクトリのパス]
入力例:
$> tar xzf 20170218-000000-wordpressfile.tar.gz -C /home/users/2/main.jp-hogehoge
コマンドが成功すると、解凍されたファイルのリストがどばーっと表示されます。
解凍が完了したら、以下のコマンドで先ほど削除したwebディレクトリ配下のファイルが全て復元されていればokです。
$> cd home/users/2/[アカウント]/web (webディレクトリに移動)
$> ls
入力例:
$> cd home/users/2/main.jp-hogehoge/web
$> ls
3.4 リストア後の確認
これまでの作業でバックアップからのリストアが全て完了しました。
では、本当にリストアされたのか確認してみましょう。
WordPressの管理画面から[投稿一覧]を開いてください。
バックアップ後に作成したダミー投稿がなくなっていればリストア成功です。
4.cronの登録
これまでの手順でバックアップを保存するシェルスクリプトは完成しました。
しかし、シェルを準備しただけではバックアップしたいタイミングで自身が手で実行しなければなりません。
できれば毎日決まった時間に勝手に実行してくれる仕組みがあるとありがたいところです。
これを実現できる仕組みがロリポップサーバ用意されています。
それが「cron」です。
「cron」を使うと、シェルスクリプトを決まったサイクル・決まった時間に定期的に実行することができます。
ロリポップサーバのユーザー専用ページにログインし、左のメニューから[WEBツール]-[cron設定]を選択します。
cronの設定画面が表示されるので、バックアップを実行したいサイクルと、実行したいシェルスクリプトの名前(今回の場合はbackup.sh)を指定してください。
画像の例では毎日 AM3:00にバックアップが実行されるように設定しています。
以上でWordPress手動バックアップの設定は全て完了です。
これで安心してブログ更新できますね!
それではまた。