【コピペで完了】VPSのWordPressを自動バックアップ!寝ている間にDBも保存するシェルスクリプト

Linux

明日、あなたのサイトが消えても大丈夫ですか?

こんにちは!「リナックス先生」です。
一生懸命作ったWordPressブログ、バックアップは取っていますか?

コウ君

えっ、バックアップ?
WordPressのプラグインでやろうと思ってたんですけど、設定が難しくて後回しにしてます…。

リナックス先生

VPSはレンタルサーバーと違って「自動バックアップ機能」が有料だったり、自分で設定しなきゃいけないの。
もし明日、操作ミスで画面が真っ白になったら…書き溜めた記事は全部パーよ。
今回は、サーバー側で勝手にバックアップを取ってくれる「最強のスクリプト」をプレゼントするわ!

1. 何をバックアップすればいいの?

WordPressを復旧させるには、以下の2つが絶対に必要です。

  1. Webファイル: 画像やテーマ、プラグインなど(/var/www/html の中身)
  2. データベース(DB): 記事の文章、設定、コメントなど

この2つをセットで保存しないと、元の状態には戻せません。
今回は、これを毎朝自動で圧縮保存し、「過去7日分を残して、それより古いものは自動で消す(容量パンク防止)」という仕組みを作ります。

2. 【手順1】バックアップ用スクリプトの作成

まずはバックアップを保存する場所と、プログラムファイルを作ります。

# 1. バックアップ保存用ディレクトリを作成
mkdir -p /backup/wp

# 2. スクリプトファイルを作成(Vimで開く)
vi /backup/wp_backup.sh

開いた画面(Vim)に、以下のコードを丸ごとコピペしてください。
DB_PASSWORD の部分だけ、自分のWordPressのDBパスワードに書き換えてね!

#!/bin/bash

# =================================================
# 設定エリア(ここだけ書き換えてください)
# =================================================
# 1. バックアップ保存先
BACKUP_DIR="/backup/wp"
# 2. WordPressのディレクトリ
WP_DIR="/var/www/html"
# 3. データベース接続情報 (wp-config.phpの中身と同じ)
DB_NAME="wordpress"
DB_USER="wordpress"
DB_PASSWORD="【ここにパスワードを入れる】"

# =================================================
# 処理開始(ここから下は触らなくてOK)
# =================================================
DATE=$(date +%Y%m%d)

# 1. データベースのダンプ(文章データの保存)
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/$DATE.sql

# 2. ファイルとDBをまとめて圧縮
tar -czf $BACKUP_DIR/$DATE.tar.gz -C $BACKUP_DIR $DATE.sql -C $WP_DIR .

# 3. 生のSQLファイルは消す(圧縮したから不要)
rm -f $BACKUP_DIR/$DATE.sql

# 4. 古いバックアップの削除(7日より前を消す)
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -delete

echo "Backup Complete: $DATE"

貼り付けたら、Esc キーを押して :wq で保存して終了します。

実行権限をつける

作ったスクリプトを実行できるようにします。
※パスワードが書いてあるので、他人に見られないよう権限(700)を絞ります。

chmod 700 /backup/wp_backup.sh

テスト実行してみよう

以下のコマンドで、エラーが出ないか確認します。

/backup/wp_backup.sh

何も表示されずに終わるか、Backup Complete と出れば成功です!
ls -lh /backup/wp/ で確認すると、202X0101.tar.gz のようなファイルができているはずです。

3. 【手順2】自動実行(Cron)の設定

最後に、このスクリプトを「毎朝4時」に自動実行するようにスケジュール登録します。
Linuxのスケジュール機能「Cron(クーロン)」を使います。

# Cron設定画面を開く
crontab -e

Vimのような画面が開くので、以下の1行を追記してください。

0 4 * * * /backup/wp_backup.sh

これで設定完了です!
0 4 * * * は「毎日 4時 0分 に実行せよ」という意味です。


まとめ:これで枕を高くして眠れる

お疲れ様でした!
これで、あなたが寝ている間にサーバーが勝手に:

  1. データベースを保存し
  2. 画像などもまとめて圧縮し
  3. 古いバックアップを掃除してくれる

という完全自動化環境が整いました。

コウ君

すごい!プラグインより簡単かも。
でも、バックアップデータが溜まって容量がいっぱいにならないですか?

リナックス先生

スクリプトの中に「7日より古いものは消す」という処理が入っているから大丈夫よ。
でも、もし容量エラーが出たら、以下の記事を参考に対処してね。

▼もし容量不足になったら

バックアップの設定ミスなどで「No space left on device」エラーが出た場合の対処法はこちら。

【緊急対処】VPSが動かない!「No space left on device」が出た時に空き容量を確保する完全手順
Linuxサーバーで「No space left on device」エラーが出て困っていませんか?安価なVPSでよくあるディスク容量不足の原因特定(df/duコマンド)から、肥大化したログファイル(journal/Apache)やキャッシュの安全な削除方法まで、現役エンジニアが解決手順を解説します。

▼今回のコマンドを復習したい方へ

chmodvi などの使い方が怪しい方は、こちらの辞書ページをチェック!

【初心者向け】Linux基本コマンド20選!絶対覚えるべき一覧と効率的な練習環境の作り方【実例付き】
Linux初心者必見!「コマンドが多すぎて覚えられない」という悩みを解決します。サーバー構築・運用で頻繁に使う「本当に必要な20個」だけを厳選。ファイル操作、システム確認、権限変更まで、現場で役立つコマンドを実例付きで解説します。

コメント