一般ユーザでBLOGを自動バックアップ(crontabコマンド)

UpdraftPlusとは別に、一般ユーザでBLOGデータのバックアップを行えるようにしましょう。ってゆーか、これだとtar.gzでバックアップ毎に一つのデータにまとめておけるので、管理の煩雑さを考えてもこちらのほうがいいかな、と。

さて、書きやすくするために一般ユーザの名称をhogeとします。

そしてBLOGデータ(つまりWordPress)は便宜上/web/blogにあるとします。
また、バックアップを保存するディレクトリは、こちらも便宜上/backup_directoryとしましょう。
なお、こちらのディレクトリ(/backup_directory)はhogeで書き込める権限が必要なので、必要に応じて設定しておきます(所有者をhogeにするとか、hogeを本ディレクトリ所有グループに所属させるとか)。

他方、hogeでBLOGデータをバックアップする際には同データの「読み取り」しか行わないので、/web/blogの所有者は他のユーザでも構いません。もちろんその場合でも他のユーザから読み取れる権限は与えておく必要があります(755など)。

まずはhogeのホームディレクトリに以下のシェルスクリプトを作成します。

$ vi backup.sh
#!/bin/bash
cd /backup_directory

TODAY=`date ‘+%F’`
tar zcf hogehoge.$TODAY.tar.gz -C /web/ blog

プロンプトが一般ユーザになっていることに注目!(笑)
最終行のblog(ディレクトリ)は第二引数なので、第一引数の/web/との間にスペースが入ります

念のためbackup.shを手動で実行させ、バックアップデータが取れることを確認したら(これを書き込むから/backup_directoryにはhogeの書き込み権限が必要になる)、これを定期的に自動実行させるため、cronに登録します。
以前、rootでcronに定期実行内容を登録していた時には直接/var/spool/cron/rootファイルを編集していましたが、実はこの/var/spool/cronディレクトリはrootしかアクセスが許されていません

$ cd /var/spool
$ ls -l
・・・
drwx——.  2 root   root   4096  7月 27 20:53 2016 cron
・・・

ここにhogeで実行内容を登録するには、crontabコマンドを使用します

$ crontab -e
0 3 * * 0 /home/hoge/bin/backup.sh

作成したbackup.shには実行権限をつけてあるので、スクリプト本体で実行可能になっています(だからshコマンドをつけていない)。
crontab内の書き方は、以前に/var/spool/cron/rootを編集した時と同様で、頭から分・時・日・月・曜日です(曜日は0〜6で日〜土に対応)

こちらも念のため編集時の直近の時間を指定して試しに実行して確認します。

問題なくバックアップファイルが作成されていれば、BLOGのデータのバックアップはクリアなので、最後にバックアップスケジュールを戻しておきます(今実行したのはスケジュール作成時直近での試運転ですからね!)。

BLOGの中身のバックアップはこれで完了ですが、WordPressはデータベースにmysqlを利用しているので、このデータベースのバックアップも行わなければ、後々リストアできません。
これもまた以前試しているので、それと同じ手順を行います。もちろん、こちらもユーザhogeでcronに登録し、自動実行させなければ意味がありません。
それも、できればBLOGデータのバックアップと(ほぼ)同時に。

BLOGのデータベース名はあらかじめ確認しておきます(mysqlにログインし、show databases;で確認できます)。ここでは例示的にdbnameとしておきましょう。これをhogeでバックアップ可能かどうかをまずは確認です。

$ mysqldump -u root -p > blogdump.sql
Enter password:(mysqlのrootのパスワードを入力)

ホームディレクトリにblogdump.sqlが作成されていれば、バックアップ可能であることが確認できます。

そうしたら最後にこれをcronに登録するのですが、パスワードの入力も自動で実行できなければ意味がありません(入力待ちで止まっちゃいますからね)。
コマンドラインでパスワードをそのまま入力するという方法もあるのですが、それはそれでちょっと不安なので、こちらもまたスクリプトを組んでおくことにしましょう。

$ vi dbbackup.sh
#!/bin/bash

cd /backup_directory
dbuser=’root’
dbpasswd=’password for database’
dbname=’dbname’
TODAY=`date ‘+%F’`
/usr/bin/mysqldump -u$dbuser -p$dbpasswd $dbname > db_data.$TODAY.sql

気をつけることと言ったら、mysqldumpコマンドで-uと-pのオプションで引数を入れますが、コマンドラインでこれを入れるとき、オプションと引数の間には空白を入れますが、ここでは一気に(つなげて)入れる、ということくらいでしょうか?
(そうしないとパスワードの入力が求められてしまう)

そうしたら最後にこのスクリプトをcronに登録します。

$ crontab -e
0 3 * * 0 /home/hoge/bin/backup.sh
0 3 * * 0 /home/hoge/bin/dbbackup.sh

データベースのバックアップは容量も少ないし、多分同時実行で問題ないでしょう。

あとは実データとしてバックアップが取れるかどうかを週明けに確認しておしまいです(バックアップを日曜日に取得するようにスケジューリングしてあるため)。

うまくいきますように!

こういう自由度があるから、自前サーバはやめられませんよね(笑)
←Yahoo!ブログじゃこうはいかないもんね(たぶん)。

boota

いろんなモノに、いろんな意味で、ヲタ。なのかも?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)