WordPressのバックアップの設定(MySQLのバックアップ)


WordPressの更新通知が来た

一昨日あたりかな? WordPressのダッシュボードにログインすると、更新通知が。

ダッシュボードにWordPressの更新通知が

ダッシュボードにWordPressの更新通知が

さっそく、アップデートしようとしたところ、


重要:
アップグレードの前に データベースとファイルをバックアップしてください。アップグレードについてヘルプが必要な際はWordPress のアップグレード Codex ページをご覧ください。

と警告が。ま、おっしゃるとおりです。
ブログのバックアップを取る仕組みを入れていませんでした。これから記事をため込んでいこうとしているのに、これは大事なことです。

更新時だけとはいわず、定期バックアップの仕組みを作り込もうと思います。
想像するにバックアップ復旧が必要なシーンを考えると、

  • サーバを再インストールするとき
  • ブログを移設するとき
  • ブログをうっかりミスで消してしまったとき
  • HDDが壊れてしまったとき

でしょうか。
HDDの回転音が異常になったり、bad sectorができたり、まったく読めなくなったり、というのは経験上、割と発生します。
1~3点目は、どこにバックアップを残しておこうが問題になりませんが、4点目を考慮すると、DBが入っているのとは物理的に別のHDDにバックアップを取っておいた方がよいと言えます。

また、ブログの更新頻度は多くても一日一回程度ですので、バックアップ頻度も一日一回程度とします。

他にも、遠隔サーバにバックアップしたり、ミラーサイトを作ったり、いろいろと方法はあるかと思いますが、今回は自宅サーバ内の別ディスクに、一日一回、バックアップを残すことを目指します。

さっそく公式サイトのlinkをたどった。

 

WordPressのバックアップの方法。

webアプリは使わずより低レベルなcronでやっとこう。

WordPressはMySQLにブログ記事を含めたサイトのデータを格納していますので、DBレベルのバックアップが必要です。(ファイル丸ごとコピーでは、DB壊れるかもしれません)

バックアップ対象はDB以外にもあります。phpの設定ファイルなどは、ファイルレベルのバックアップが必要です。私の環境ではすでに全ファイル日時バックアップを組み込んでいるのでそのまま利用します

ファイルのバックアップについては詳しくは書きませんが、バックアップはcron rsync の組み合わせでやっています。サーバ筐体内に物理的に別のHDDを追加し、一日一回、rsyncで丸ごとバックアップをとっています。

公式サイトのバックアップの説明サイトのリンクをたどったところ・・・

wordpressのバックアップ

公式サイトのwordpressのバックアップの説明

phpMyAdminというwebアプリ経由でのバックアップの説明がありました。

これ、インストールしていないです。また、これを使うとバックアップしたり、復旧したりするときに、このwebアプリが必要になると考えた方がよいのでしょう。(そうでない方法もあるかも知れませんが)

バックアップの復旧は低レベルの操作でできるに越したことはないし、何でもできる自宅サーバですので、cronで直接DBをバックアップする方法を取りたいと思います。

 

採用したMySQLのバックアップ方法と自動化設定

MySQLのバックアップをするためのコマンドは、mysqldumpです。これを使います。

以下の手順でバックアップを設定しました。

  • MySQL バックアップ専用ユーザ作成、権限設定
  • バックアップコマンドと動作確認
  • シェルスクリプト作成
  • cronへの組み込み

以下、手順詳細。

バックアップ専用ユーザ作成 (ユーザ名 backup)
[root@]# mysql -u root -p
mysql> grant select,file,lock tables,show view,event on *.* to backup@’localhost’ IDENTIFIED BY ‘パスワード’;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
※SQLは大文字で書くらしいです。上は混ざっています。

コマンドラインでDBバックアップしてみる。(バックアップ先はmysql-all-db.sql)

[root@]# mysqldump -u backup -pパスワード –all-database –events > ./mysql-all-db.sql

スクリプト作成

バックアップ先のパス:/Backup/mysql_backup/
バックアップファイル名:mysql-all-db.tar.gz
としています。

バックアップ先(/Backup)は物理的に別のディスクをマウントしています。/Backupの権限は700。
lvmも使っていません。lvmを使っていると復旧が大変になる場合があります。

mysqldumpでバックアップを作成した後、tarで圧縮をかけて保存するようにしています。

—mysql_backup.sh—

#!/bin/sh
USER=”backup”
BPATH=”/Backup/mysql_backup/”
BFILE=”mysql-all-db.tar.gz”
PW=”パスワード”
mysqldump -u $USER -p$PW –all-database –events> $BPATHmysql.sql
mkdir -p $BPATH
tar cvzfP $BPATH$BFILE $BPATHmysql.sql >/var/log/mysql_backup.log
rm $BPATHmysql.sql
chmod 600 /var/log/mysql_backup.log

—mysql_backup.sh—

crontab登録

[root@]#crontab -e
30 12 * * * /パス/mysql_backup.sh
毎日12:30に起動します。

おわりに

これで、一日一回、別の物理ドライブにSQLのDBすべてをバックアップする環境が整いました。

実際には、テストDBなどを用いてバックアップからの復旧ができるか、確認をしておいた方がよいと思います。

参照サイト

参考にさせていただきました。ありがとうございます!

 


コメントを残す

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