[lolipop]WordPressを無料で毎日自動バックアップする


ロリポップでは簡単インストール機能を使って、WordPressをインストールが可能です。
ですが、インストール後の状態ではバックアップが取得されていない状態です。

ロリポップが提供しているバックアップサービスを利用すれば7日分のバックアップ取れますが、最上位のエンタープライズプラン以外では毎月300円の費用が追加で必要です。

このため今回は、ロリポップで提供されているsshアクセスとcron設定機能を利用し、作成したWordPressサイトを無料で自動バックアップできるよう設定を行います。

バックアップは7日分取得し、1週間以上前のデータは自動で上書きするようにします。
(後述のスクリプトの内容を変更すれば期間を30日分に変更したり、毎月月初にバックアップ取得して1年分のバックアップを保存する事も可能です)

WordPressのインストール先を確認する

まず、バックアップしたいWordPressがある場所を確認します。

lolipopのレンタルサーバでは、webサーバからアクセス可能なディレクトリが~/webの下になります。
インストールしたWordPressはこの下にあるはずなので、インストール先を確認します。

インストール場所を覚えていない場合は、下記のコマンドで検索できます。

find ~/web | grep "wp-config\.php$"
/home/users/0/username/web/blog/wp-config.php


上記の例だと、インストール先が/home/users/0/username/web/blogであることが分かります。

本記事では、/home/users/0/username/web/blogフォルダにwp-config.phpがあったものとして、説明を行っていきます。

まんがでわかるLinux

データベースの接続設定を確認する

WordPressは記事の保存にMySQLを使っています。
先ほど調べたwp-config.phpファイルの中にDBの接続情報があるので、下記のコマンドでデータベースの接続設定を検索します。

/home/users/0/username/web/blog/wp-config.php | grep DB
 
define('DB_NAME', 'LA99999-dbname');
define('DB_USER', 'LA99999');
define('DB_PASSWORD', 'dbpassword');
define('DB_HOST', 'mysql999.phy.lolipop.jp');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');



上記の場合、下記のデータベースの接続設定は下記のとおりです。

DBサーバ             mysql999.phy.lolipop.jp
DB名                 LA99999-dbname
DBログインユーザ     LA99999
DBログインパスワード dbpassword




手動でバックアップを取得する

これまでの確認で、バックアップに必要なインストール先とDBの接続情報が集まったので、まずは一旦、手動でバックアップを取得してみます。

バックアップ先はどこでも良いのですが、今回はホームディレクトリの下にwp-backupフォルダを作成して、その中に格納します。

~/webディレクトリの下にバックアップすると、他のユーザからもブラウザからバックアップデータにアクセスできてしまいます。
このため、~/webの下にはバックアップしないようにしてください。

下記のコマンドで、バックアップフォルダを作成します。

mkdir ~/wp-backup



次に下記のコマンドでバックアップを取得します。
1行目のtarコマンドで、WordPressのプログラム自体とアップした画像ファイルなどをパックアップし、2行目のmysqldumpでデータベースのバックアップを採取しています。
インストール先や、DBの接続情報は調査した結果の値に書き換えてください。

tar -zcvf ~/wp-backup/blog_backup.tgz ~/home/users/0/username/web/blog/*
mysqldump --default-character-set=binary -h mysql999.phy.lolipop.jp -u LA99999 -pdbpassword LA99999-dbname | gzip -9 > ~/wp-backup/blog_dbbackup.sql.gz



バックアップが完了したら、lsコマンドで、ファイルができていることを確認します。

ls -lh ~/backup
total 228M
-rw-r--r-- 1 username LolipopUser 226M Feb 20 22:16 blog_backup.tgz
-rw-r--r-- 1 username LolipopUser 707K Feb 20 22:16 blog_backup.tgz.log
-rw-r--r-- 1 username LolipopUser 2.6M Feb 20 22:16 blog_dbbackup.sql.gz



取得したバックアップはFTPで手元にダウンロードし、Lhaplusなどの解凍ツールで展開できることを確認してください。


バックアップの取得スクリプトを作成する

手動でのバックアップに成功したら、次はこの作業をスクリプトファイルに置き換えます。
同時に、世代バックアップの仕込みも行っておきます。

まずは、バックアップスクリプトを保存するために~/web/scriptフォルダを作成し、アクセス制限をかけておきます。
このフォルダの中に.htaccessファイルを作成し、下記の1行を書いておくことでブラウザ経由でアクセスされないようにします。
web/script/.htaccess

deny from all



次にこのフォルダ内に、backup.shのファイル名で下記のスクリプトファイルを作成します。
viエディタが使える場合はviで作成しても良いですし、使えない場合は一旦ftpで移動させてください。
改行文字は、Windows標準のCR+LFでは無くLFで保存します。

#!/bin/bash
 
# backup blog
tar -zcvf ~/wp-backup/blog_backup_`date '+%w'`.tgz ~/home/users/0/username/web/blog/* > ~/wp-backup/blog_backup_`date '+%w'`.tgz.log
mysqldump --default-character-set=binary -h mysql999.phy.lolipop.jp -u LA99999999 -pdbpassword LA99999999-dbname | gzip -9 > ~/wp-backup/blog_dbbackup_`date '+%w'`.sql.gz



スクリプトの中に下記のコマンドがありますが、この部分は実行すると曜日を表す数字に置き換わります。

`date '+%w'`



数字は0~6で、0が日曜日、6が土曜日になります。
実際にどうなるかは、echoコマンドで確認可能です。

$ echo `date '+%w'`
6
 
$ date
Sat Feb 20 23:02:48 JST 2016



スクリプトファイルを作成したら、スクリプトに実行許可を付与します。

chmod 700 ~/web/script/backup.sh




作成したスクリプトを手動実行し、バックアップが採取できていることを確認します。

~/web/script/backup.sh




今回は曜日で7世代バックアップしたいので、”+%w”としましたが、”+%d”とすればこの部分が日付(01~31)になるため、1か月分のバックアップが取得できます。
また、この方法だと、バックアップは一週間前のデータが順次上書きされる為、古いバックアップファイルの消しこみ処理は不要です。

バックアップ取得のスクリプトを自動実行する

最後にlolipopの管理画面より、cron設定で作成したスクリプトを自動実行させます。

ログイン後のメニューより、Webツール->cron設定を選択します。


以下のような感じで設定を行い、作成したスクリプトを毎日決まった時間に実行させます。
何時でも良いですが、アクセスが少ない午前3時あたりに設定しておくと安心です。

※初めて設定する時は、(分)の部分を”3分おき”などで試しに設定し、自動実行が行えることを事前確認するとチェックしやすいです。

翌日、再度サーバにログインし、バックアップが取れていることを確認します。

これでlolipopでバックアップの自動設定が、無料で行えるようになりました。

本当は怖い WordPress

補足:バックアップから戻すとき

ちなみにバックアップからは、下記のコマンドで戻すこと(リストア)ができます。
ただし、リストア先のDBに同名のテーブルがある場合は、上書きされてしまうので要注意です。

zcat blog_dbbackup.sql.gz  > sql.txt
mysql -u LA99999 -h mysql999.phy.lolipop.jp -pdbpassword LA99999-dbname < sql.txt


※1つ目のSQLだけ実行してsql.txtの中身を見ると、drop table/create tableがあるのが確認できます。



スッキリわかる SQL 入門 ドリル215問付き!

関連記事

コメントを残す

メールアドレスが公開されることはありません。