プラグインを使わない WordPress のバックアップ方法についてご紹介します。WinSCP と phpMyAdmin を使って手動でバックアップする方法と、WinSCP スクリプトを使ってバッチ処理する方法をご紹介しています。
プラグインを使えばもっと手軽にバックアップできますが、お金をかけずにローカルPCにデータをバックアップしたい場合、こちらでご紹介する方法を使うことで、プラグインを使うよりも少ない手数で実現できます。
プラグインでバックアップする方法は以下の記事をご覧ください。
- WinSCP を使えば WordPress のバックアップがバッチファイル一発できる。
- WinSCP なら同期機能で更新されたファイルだけバックアップできる。
バックアップのタイミング
自分の操作によってリスクが高くなる次のような場面でバックアップすることをおすすめします。
- WordPressをアップデートする前
- サーバーのPHPのバージョンを変更する前
- プラグインをアップデートする前
- サイトのデザインを変更する前
WordPress、PHP、プラグインは、それぞれのバージョンの組み合わせによってサイトに問題が生じる場合があります。そのため、バージョンアップする前にデータをバックアップしておくと安心です。
また、サイトのデザインを変更する場合も、意図せずサイトの設計を壊してしまう可能性があるため、サイトのデザインを変更する前にバックアップしておくとより安心です。
他にも、災害や外部要因による事故など、いつ発生するかわからないリスクに備えるなら定期的にバックアップしておきましょう。多くのレンタルサーバーではサーバーの機能として自動バックアップ機能が備えられています。私が利用している ConoHa WING では、何も設定しなくても毎日自動的にバックアップしてくれます。

ConoHa WING についてはこちらの記事で詳しく説明しています。
バックアップ対象
WordPress でバックアップしておくべき対象は次の2つです。
- ファイル
- データベース
WordPress は 、Webページの要求を受けてからWebページを作る仕組みになっています。具体的には、データベースから記事の内容などを取得してテンプレートに差し込み、Webページを生成します。そのおかげでデザイン変更が簡単になり、サーバーで使用するデータ容量も少なくて済みます。
ファイルのバックアップはコピーすればいいのですが、データベースはエクスポートして保存する必要があります。
ファイルをすべてバックアップするのは大変です。効率よくやるには、自分で変更を加えた部分に絞ってバックアップするとよいです。具体的には、記事の内容、サイトのデザイン、プラグインに関わる部分です。それらは以下のフォルダに入っています。
- wp-content/plugins
- wp-content/themes
- wp-content/uploads
一方、WordPress をインストールすることによって作られたファイルは、壊れたとしてもまた WordPress をインストールし直せば復元できるので、バックアップする必要性は低いです。
データベースのデータは、データベース管理システムである MySQL(と互換性のあるDB)に強く依存したデータになっていて、復元する際、元の環境と少し違っていると復元できなくなる可能性があります。そのため、標準的なデータ形式にエクスポートしてバックアップします。
バックアップ方法
ファイル
コピーして PC に保存しておけば OK です。ただ、ファイルマネージャーでコピーするのは少し手間であるのと、更新されていないファイルはコピーしたくないので、そういう場合は、WinSCP で同期するのがおすすめです。
WinSCP はオープンソースのファイル転送アプリで、FFFTP や Filezilla Client などと似ていますが、同期機能があることと、スクリプトで操作できることが特徴です。
WinSCP では 様々なファイル転送プロトコルを利用できますが、FTP はパスワードが丸見えなので使ってはいけません。FTPS、SFTP、SCP のいずれかを使いましょう。ここでは、少し速度が早くて設定も簡単な SCP を使う方法をご紹介します。
WinSCP をインストールする
WinSCPを以下のリンク先からダウンロードしてインストールしてください。二種類ありますが、Portable版はインストール不要で、解凍して出てきた実行ファイルを直接起動できるものです。
WinSCP を日本語化する
WinSCP のメニューから [Options]、[Preferences]をクリックします。

[Languages]の[Get more]ボタンをクリックします。ブラウザが立ち上がり、日本語化ファイルのダウンロードページが表示されます。WinSCP の Preferences 画面に戻り[Cancel]ボタンでダイアログを閉じます。

Japanese の [Download]リンクをクリックし、ファイルをダウンロードします。

ダウンロードしたファイルを解凍すると WinSCP.jp というファイルができるので、WinSCP.exe と同じディレクトリに置きます。

WinSCP のメニューから [Options]、[Preferences]をクリックし、[Languages]をクリックします。
[Japanese – 日本語(日本)]が追加されているので選択し、[OK]ボタンをクリックします。

アプリを閉じて開き直すと日本語になります。
SSH Key を生成する
SCP は SSH を使った通信なので、サーバーにログインするためには、ユーザー名とパスワードあるいは秘密鍵(SSH Key)が必要です。
また、接続先の情報として、ホスト名とポート番号も必要です。
SSH のログイン方法はレンタルサーバーによって異なるため、レンタルサーバーのヘルプを確認してください。
私が使っている ConoHa WING では秘密鍵を使います。ConoHa WING での秘密鍵の生成方法は以下のリンク先をご覧ください。SSH Key 、ホスト名、ポート番号、ユーザー名はその次の手順で使います。

WinSCP で SCP接続する
WinSCP を起動します。
新しいサイトの登録画面で、[ホスト名]、[ポート番号]、[ユーザー名]を入力します。次に、SSH Key を設定するため、[設定]ボタンをクリックします。

高度なサイトの設定画面の左のツリーから[認証]をクリックし、秘密鍵のパスを入力するため、[秘密鍵]の左の[…]ボタンをクリックします。

ダウンロードした SSH Key を表示させるためにファイルの形式を[PuTTY 秘密鍵ファイル(.ppk)]から[すべての秘密鍵ファイル(.ppk;.pem;.key;id_*)]へ変更します。
ダウンロードした SSH Key を選択し、[開く]ボタンをクリックします。

秘密鍵の形式変換を確認する画面が表示されるので[OK]ボタンをクリックします。

変換した秘密鍵の保存場所を指定し[保存]ボタンをクリックします。

秘密鍵が変換されたことの確認画面が表示されるので[OK]ボタンをクリックします。

高度なサイトの設定画面を[OK]ボタンをクリックして閉じます。

以上で設定が完了したので、今後も繰り返し利用できるように[保存]ボタンをクリックして保存しておきましょう。
次に[ログイン]ボタンをクリックしてログインします。

初めてのサーバーに接続するときに次の警告が表示されるので[はい]をクリックします。

バックアップする
WinSCP で同期する
WinSCPを立ち上げてサーバーに接続します。
下の画像は WinSCP でサーバに接続した画面です。左側にローカルPC、右側にサーバーのファイル一覧が表示されます。この画像では[ツリー]ボタンをクリックしてディレクトリのツリーを表示しています。

バックアップするフォルダは以下の三つで、それぞれやることは同じなので、plugins ディレクトリを例にバックアップ方法を説明します。
- wp-content/plugins
- wp-content/themes
- wp-content/uploads
画面左側で、保存先となるローカルPCのディレクトリに移動します。画面右側で、サーバーの plugins ディレクトリに移動します。次に[同期]ボタンをクリックして同期の設定画面を開きます。

同期の設定画面が表示されるので、[ローカル ディレクトリ]と[リモート ディレクトリ]のパスが正しいことを確認します。二回目以降はプルダウンで開いたところに過去に利用したパスが記憶されているので、そこから選択すると少し楽です。
[方向]には注意が必要です。サーバーのファイルをローカルPCにバックアップする場合は必ず[リモート→ローカル]にしてください。
[ファイルを削除する]にチェックすると、サーバーで削除されたらローカルのファイルも削除されるようになります。
[OK]ボタンをクリックすると、ファイルの比較が始まります。

しばらく待つと下の画面のような比較結果の画面が表示されます。ここで[OK]ボタンをクリックすると動機が始まります。

同期中は以下のようなダイアログが表示されます。

動機が完了すると以下の画面が表示されるので[OK]ボタンをクリックして閉じてください。

上記の手順を、themes ディレクトリと uploads ディレクトリに対しても同様に実施します。
以上の手順によってファイルのバックアップができました。
最後に WinSCP を閉じる際、先にセッションを閉じておきましょう。メニューの[セッション]、[セッションを閉じる]をクリックしてください。

スクリプトで同期する
WinSCP を操作して同期する手順を示しましたが、操作量がそこそこあるので、スクリプトで実行できるようにしておきましょう。
事前の準備として、まずは以下のような、サーバーに接続したらすぐに閉じるスクリプトを用意してください。ファイルの文字コードは UTF-8 か UTF-16 で BOM ありとする必要があります。
open "セッション名"
exit
例えば、下の画像のように”dekuno.blog”というセッション名の場合、

スクリプトは下のようになります(スペースやマルチバイト文字のような文字がなければダブルクォーテーションは省略可能です)。
open dekuno.blog
exit
コマンドプロンプトを開き、作成したスクリプトを実行するため、下のコマンドを実行します。winscp.com は wiscp.exe と同じディレクトリにあります。
>"winscp.com のフルパス" /script="スクリプトのフルパス"
私の場合の場合は以下のようなコマンドになります。
>E:\tool\WinSCP-5.17.7-Portable\winscp.com /script=E:\tool\WinSCP-5.17.7-Portable\test.txt
実行すると下のような結果が表示されます。“スクリプトでは、保存されたサイトを当てにせず、以下のようなコマンドを使用すべきです”と叱られますが、次の行にこうすればよいという具体的なコマンドを示してくれるので、これをコピーしておきます(コマンドの hostkey の部分は暗号化方式の差で文字列が異なる場合があります)。
スクリプトでは、保存されたサイトを当てにせず、以下のようなコマンドを使用すべきです:
open scp://ユーザー名@ホスト名:ポート番号/ -hostkey="ssh-ed25519 255
********************************************" -privatekey="ssh-keyのフルパス"
サーバを探索中・・・
サーバに接続しています・・・
認証しています・・・
ユーザ名"ユーザー名" を使用中
公開鍵 "imported-openssh-key" で認証中
認証されました
セッションを開始しています・・・
セッションを開始しました
アクティブ セッション: [1] セッション名
最初のスクリプトの1行目をコピーした内容で書き換えると下のようになります。
open scp://ユーザー名@ホスト名:ポート番号/ -hostkey="ssh-ed25519 255 ********************************************" -privatekey="ssh-keyのフルパス"
exit
次に、plugins, themes, uploads を同期する synchronize コマンドを追加します。具体的には、下のようになります。
open scp://ユーザー名@ホスト名:ポート番号/ -hostkey="ssh-ed25519 255 ********************************************" -privatekey="ssh-keyのフルパス"
synchronize local -delete "ローカルPCの plugins 保存先フルパス" "サーバーの plugins フルパス"
synchronize local -delete "ローカルPCの themes 保存先フルパス" "サーバーの themes フルパス"
synchronize local -delete "ローカルPCの uploads 保存先フルパス" "サーバーの uploads フルパス"
exit
synchronize コマンドで指定している local オプションは、同期の設定画面の[リモート→ローカル]と同じ意味で、サーバーからローカルPCへの同期が実行されます。
synchronize コマンドの -delete オプションは、同期の設定画面の[ファイルを削除する]と同じ意味で、同期元でファイルが削除されたら、同期先のファイルは削除されます。
あとは以下のようなバッチファイルを作っておけば、バッチファイルを実行するだけで同期が完了します。”cmd /k”はバッチファイル終了後にコマンドプロンプトを閉じないようにしているだけなので、削除しても大丈夫です。
E:\tool\WinSCP-5.17.7-Portable\winscp.com /script=E:\tool\WinSCP-5.17.7-Portable\test.txt
cmd /k
WinSCP のコマンドの詳細は以下のリンク先をご覧ください。
データベース
phpMyAdmin でバックアップする
phpMyAdmin は MySQL や MariaDB を Webブラウザで操作するためのツールです。大抵のレンタルサーバーには用意されています。
私が利用している ConoHa WING でも用意されていて、ログイン方法は下のリンク先を見てください。

phpMyAdmin にログインしたら[データベース]をクリックします。

データベース名をクリックします。データベース名が複数ある場合は、WordPressをインストールしたときに作成した方をクリックします。

[エクスポート]をクリックします。

[エクスポート方法]が[簡易]になっていることを確認して[実行]をクリックします。

エクスポートするデータの保存先を指定して[保存]をクリックします。保存先はローカル PC になります。

phpMyAdmin の画面左上の扉のアイコンをクリックし、phpMyAdmin からログアウトします。

WinSCP のスクリプトでバックアップする
phpMyAdmin の方法はとても簡単ですが、何回かやると面倒になってきますので、スクリプトで実行できるようにしておきたいです。
また、phpMyAdmin ではデータの容量が大きすぎるとエクスポートできないという問題があり、コマンドラインから操作することでこの問題を回避できます。
最初に、サーバーにアクセスしてすぐに閉じる WinSCP スクリプトを用意します。このページ内の[ スクリプトで同期する]で作成した下のようなスクリプトです。もしご覧になっていなければ[WinSCP をインストールする]あたりからご覧ください。
open scp://ユーザー名@ホスト名:ポート番号/ -hostkey="ssh-ed25519 255 ********************************************" -privatekey="ssh-keyのフルパス"
exit
データベースをエクスポートして圧縮し、ローカルPCに移動するコマンドを追加します。WinSCP スクリプトは以下のようになります。
open scp://ユーザー名@ホスト名:ポート番号/ -hostkey="ssh-ed25519 255 ********************************************" -privatekey="ssh-keyのフルパス"
cd 一時保存先のディレクトリ
call mysqldump --defaults-extra-file=設定情報ファイルのフルパス データベース名 | gzip > 圧縮後のデータファイル名
get -delete 圧縮後のデータファイル名
保存先のディレクトリ\
exit
追加した行を一行ずつ説明します。
cd 一時保存先のディレクトリのフルパス
データベースからエクスポートするデータを一時的に保存するディレクトリへ移動します。このディレクトリは書き込み可能である必要があります。
call mysqldump --defaults-extra-file=設定情報ファイルのフルパス データベース名 | gzip > 圧縮後のデータファイル名
call コマンドで WinSCP から mysqldump コマンドを呼び出します。データベースにアクセスするにはパスワードが必要ですが、スクリプトで mysqldump コマンド実行する場合、引数にパスワードを直接指定できません。そこで、データベースにアクセスするための設定情報ファイルを用意し、–defaults-extra-file オプションでコマンドに渡します。設定情報ファイルについては後ほど説明します。
圧縮後のデータファイル名は、sql を gz 圧縮したという意味で、例えば blog.bak.sql.gz のように、拡張子を .sql.gz としておくとよいです。
get -delete 圧縮後のデータファイル名
保存先のディレクトリのフルパス\
get コマンドでファイルをサーバーからローカルPC へコピーします。-delete オプションを指定すると、コピー元であるサーバー側のファイルは削除されます。保存先のディレクトリ名の後ろに「\」を付け忘れないようにしてください。
設定ファイルについて、以下の内容でファイルを作成し、レンタルサーバーの適当な場所に置いておきます。例えば mysqldump.conf というようなファイル名にします。パスワードに記号が含まれている場合はダブルクォーテーションで囲っておきましょう。
[mysqldump]
user=ユーザー名
password="パスワード"
host=ホスト名
あとは以下のようなバッチファイルを作っておけば、バッチファイルを実行するだけでデータベースのバックアップが完了します。下の例ではスクリプトの名前を test.txt としています。
E:\tool\WinSCP-5.17.7-Portable\winscp.com /script=E:\tool\WinSCP-5.17.7-Portable\test.txt
cmd /k
さらに、以下のように、ファイルの同期とデータベースのバックアップを一つのスクリプトにまとめておけば、WordPress のバックアップがスクリプト一発で済むようになります。
open scp://ユーザー名@ホスト名:ポート番号/ -hostkey="ssh-ed25519 255 ********************************************" -privatekey="ssh-keyのフルパス"
synchronize local -delete "ローカルPCの plugins 保存先フルパス" "サーバーの plugins フルパス"
synchronize local -delete "ローカルPCの themes 保存先フルパス" "サーバーの themes フルパス"
synchronize local -delete "ローカルPCの uploads 保存先フルパス" "サーバーの uploads フルパス"
cd 一時保存先のディレクトリ
call mysqldump --defaults-extra-file=設定情報ファイルのフルパス データベース名 | gzip > 圧縮後のデータファイル名
get -delete 圧縮後のデータファイル名
保存先のディレクトリ\
exit
コメント