WordPressバックアップファイルが大量でもUpdraftPlusでダウンタイムなく復元し移行

最新の更新日
Mar 18, 2022 1:22 PM
Target Keywords
vol.
image

やりたいこと・移行前後のサーバー環境などの状況

  • メディアファイル(uploads)がバックアップファイル数にして54と大量にあり、ブラウザ経由でダウンロードしているとダウンロードエラーが頻発。
  • FTP経由も同様に一括ダウンロードするとDL時エラーが生じたため、ターミナルからscpコマンドでリモートサーバー上からローカルに一旦ダウンロード。
  • 移行元サーバー: ロリポップ
  • 移行先サーバー: エックスサーバー
  • ドメイン管理(ドメイン購入元レジストラ): ムームードメイン

Updraft Backup Plusでサーバー移行

今回はWordPressのバックアップ&リストアプラグイン、”Updraft Backup Plus”を利用してサイト移転を実施しました。

Updraft Backup Plusとは

Updraft Backup Plusは基本的には無料で、比較的簡単にWordPressサイトを移転させることが可能なバックアッププラグインです。

UpdraftPlus WordPress Backup Plugin – WordPress plugin | WordPress.org

ただし、WordPressをマルチサイト化している場合など、一部特殊な設定をしている場合には有料プランを契約したうえで移転を実施する必要があります。

Updraft Backup Plusでのサーバー移行の大まかな流れ

  • 移行先のエックスサーバーにドメイン名を追加設定
    • ドメイン反映まで時間がかかることもあるため、最初にドメインを追加しておく
    • ムームードメインでのDNS設定はまだ変更しない
  • 移行先エックスサーバーにWordPressをインストール、移行
    • 移転前後のPHPバージョンを合わせる
    • エックスサーバー機能の“WordPress簡単移行”を試すも失敗。UpdraftPlusプラグインによる引っ越し移転を目指す
  • 移転元のロリポップサーバーよりscpコマンドでバックアップファイルをローカルに一括取得
  • 一瞬だけムームードメインのDNSをエックスサーバーに向け、SSL化を申請。申請後にすぐムームードメインのDNS設定を元のサーバー(ロリポップ)へ戻す
    • これをやらないと、httpsのまま移転できない。httpのままUpdraftで復元すると、復元実行後にログイン不能になる
  • hostsファイル設定により、DNS変更前に自身のPCからのみエックスサーバーへの移転後の状況を確認・復元
  • 移行先WordPressにログインし、UpdraftPlusプラグインでバックアップから復元
    • WordPressダッシュボード > 設定 > 一般 でURLを”https://~” としてSSL設定
    • scpコマンドでローカルにあるバックアップファイルをエックスサーバーへアップロード
    • アップロード時はブラウザ経由でもエラーが生じにくいので、WordPress管理画面 > UpdraftPlusのバックアップファイルをアップロードからそのままアップロードしてもいいかも
  • DNS設定変更
  • 確認・テスト
  • メールアドレス移行

エックスサーバーのWordPress簡単移行を試すも、タイムアウトエラーで断念

当初はエックスサーバーのWordPress簡単移行を利用して、半自動での移転を検討していました。

しかし、下記のエラーメッセージが。

image

“移行元サーバーとの通信に失敗している可能性があります。 時間を空けてもう一度お試しいただくか、「WordPressの移行について」をご参照のうえ、手動で移行作業を行ってください。 また、移行用データファイルの作成に時間がかかりすぎてタイムアウトしている可能性も考えられます。 移行元WordPressのwp-contentディレクトリ内の容量が極端に大きい場合などに発生するため、不要なファイル(バックアップデータ等)を削除して容量を減らしてから再度お試しください。”

移行実行ログを確認。

  • タイムアウトにより中止
  • image

Updraft Backup Plusで移行を実施。移行先のサーバーおよびWordPress設定

このようにエックスサーバーのWordPress簡単移行はタイムアウトエラーとなってしまったため、WordPressのバックアップ用プラグインである”Updraft Backup Plus”でバックアップを取得。移行先サーバーで復元させるという手法をとりました。

エックスサーバーにWordPressをインストール

  • ドメインを追加
  • エックスサーバーにWordPressをインストール
  • WordPressかんたんインストールを実行するも、 “既に別のプログラムが設置されているか、インストール済みです” とエラーが出たので、ドメイン設定よりドメイン初期化
    • 恐らくファイル容量が膨大だったことがエラー原因
    • 移行前と移行後でPHPバージョンが異なるとエラーになることもあるらしい
  • 初期化後、WordPressかんたんインストールで問題なくインストール完了

移行前後のPHPバージョンを合わせておく

  • 移行前のPHPバージョンは、WordPress管理画面 > サイトヘルスで
  • エックスサーバー管理画面 > PHP ver 切り替え

hostsファイルでDNS切り替え前に動作確認

scpコマンドで移転元サーバー:ロリポップからupdraftフォルダごと一括ダウンロード(一括コピー)

UpdraftPlusはWordPress管理画面から、下記5種類のバックアップデータをダウンロード可能です。

  • データベース
  • テーマ
  • プラグイン
  • アップロード
  • その他

バックアップ内容が少なければ、そのままWordPressの管理画面上でダウンロードを実行してOK。

しかし、大規模サイト等、上記バックアップファイルの数が膨大になってきた場合にはファイルをダウンロードするのに非常に時間がかかってしまいます。

また、レンタルサーバーの性能が弱いとダウンロードしきる前にタイムアウトになってしまったり、ダウンロード中にエラーが発生してダウンロードできなかったりと、バックアップファイルのダウンロードに不都合が生じる場合があります。

今回の移行元サーバー: ロリポップがそれでした。最下位プランではなく中位プランあたりだったのですが、バックアップファイルをダウンロードすることが難しかったです。

php.ini設定を変更すればできた…?このあたりはロリポップサーバーの仕様にあまり詳しくなかったため、下記のようにscpコマンドで一括コピーする方法をとりました。

そのため、scpコマンドを利用してバックアップファイルをローカルに一括ダウンロード(一括コピー)する方法を下記に記載します。

scpコマンド使い方

-r オプション(recruisive)でupdraftフォルダごとコピー

-P オプション: ポート番号を指定

scpの場合は大文字の-Pであることに注意。SSHの場合は-p。

ロリポップの場合、SSH接続ポートとして2222を指定

updraftバックアップファイルのサーバー保存場所

updraftで保存されたバックアップファイルは、設定を変更していなければ wp-content/updraftの中にあります。

updraftフォルダの中身はデータベースや画像、テーマなどのファイルとなっており、下記ファイル名のzip形式で保存されています。

backup_バックアップ取得日_サイト名_識別ID-ファイルタイプ(uploads, dbなど).zip

ファイル名は変更しないようにしましょう。

wp-content/updraftフォルダまでのパスをpwdで表示、メモしておきます。

メモを取得したらSSH接続を切断し、ログアウトします。

Updraftバックアップファイルをscpでローカルに一括ダウンロード

Updraftフォルダの保存先はローカルのデスクトップとした場合、メモしたパスを利用してローカルで下記のように記述。フォルダをローカルにダウンロードします。

$ scp -P 2222 -r [email protected]:/home/users/2/kikirara.jp-present/web/wp-content/updraft ~/Desktop

scp書式

$ scp -P ポート番号 [-i 秘密鍵パス] -r ログインユーザー名@コピー元ホスト:パス コピー先パス

※ SSHと異なり、SCPでのポート番号指定オプションは-P(pの大文字)です。注意してください。

後述しますが、wp-content/updraftの箇所、updraftの部分の最後のスラッシュはつけないようにしておきましょう。

scpコマンドの挙動で、スラッシュなしの場合にはフォルダのコピー、スラッシュありの場合はフォルダ直下のファイルをコピーするという意味になります。

基本的にはこれでupdraftのバックアップファイルを一括ダウンロードできます!

※ 参考: 取得元サーバーがエックスサーバーの場合

$ scp -P 10022 -i ~/.ssh/key.pem -r [email protected]:/home/xs928651/yoursite\.com/public_html/wp-content/updraft ~/Desktop

本当はリモートサーバー間でscp転送できればいいのだけれど…

  • scpコマンドでは、保存元と保存先のパスを異なるリモートサーバーにすることで、ローカル(scpコマンド実行クライアント)をハブとしてコピーすることができます。
$ scp [option] [email protected]:xxxxx/xxxx [email protected]:xxxxx/xxxxx

scpコマンドでは保存元パス末尾の/(スラッシュ)の有無で挙動が異なる

  • cp, scpコマンドは保存元パスの末尾の / (スラッシュ) 有無によって挙動が異なります。
  • / 有りの場合
    • updraft/ の場合
    • updraft配下のファイル・ディレクトリがコピー先のディレクトリ配下にコピーされる
      • コピー先に"updraft"ディレクトリは作成されず、中身のファイルのみコピーされる
  • / なしの場合
    • updraft の場合
    • “updraft”ディレクトリごと、コピー先のディレクトリ配下にコピーされる
      • コピー先に"updraft"ディレクトリが作成される

ファイル名をscpコマンドで複数指定したい場合には、“ブレース展開” を活用する

  • scpでのダウンロード実行中に、wifi接続が切れてしまってファイルが途中までしかダウンロードできませんでした…
  • ダウンロードできなかったファイルは、大量にあるuploadファイルの一部。
  • そこで、ブレース展開を利用しuploadファイルを範囲指定して、残りのuploadファイルをダウンロードします。
    • そのままscp -rでディレクトリ指定するだけだと、すべて一括で再ダウンロードされてしまいます。既にダウンロード済のファイルまでもう一度DLする必要はないため、範囲指定してDLしました。
  • たとえば、下記のように記述します。uploadsファイルのうち34〜56までの番号のファイルを指定してコピーしたい場合。コピー先はローカルのDesktopとしています。
  • ロリポップはポート番号指定を2222にする必要があるので-Pオプションで接続ポート番号を指定。
$ scp -P 2222 [email protected]:/~/web/wp-content/updraft/backup_2021-01-04-2308_sitename_fffb0e0ffaaa-uploads{34..56}.zip ~/Desktop
  • 実際には上記コマンドだと1ファイルDLするごとにパスワードを聞かれてしまい、その度に手続が止まってしまいます。そのため後述する“公開鍵認証”を利用して、都度パスワードが聞かれることを阻止しました。
  • ブレース展開の基本は“数式の掛け算”ようなもの。下記の記事が分かりやすかったです。

scp, sshの際にパスワードを省略するために公開鍵認証で接続

移行前後でドメイン(URL)が異なる場合、UpdraftPlusデータベースファイル(~.db.gz)内URLを一括置換して手元で編集

UpdraftPlusのデータベースファイルを書き換える手順

UpdraftPlusの復元時、URL変更を伴う場合にはデータベースファイル(~.-db.gz)の一部、URLを書き換える必要があります。

  • db.gzファイルを解凍して、.-dbの形に。
  • コマンドラインで解凍する場合は下記コマンド。
  • $ gzip -d filename-db.gz
  • dbファイル内に記述がある移行元サイトのURLを、すべて移行先URLに書き換えて保存。
  • 通常は、VS code等のテキストエディタの置換機能を使って書き換えればOK。
  • その後、下記コマンドで圧縮して再び~-db.gzの形に。
  • $ gzip filename-db
  • この~-db.gzデータベースファイルと一緒に、テーマやプラグイン、アップロード画像等のバックアップファイルをWordPress管理画面のUpdraftPlus設定の画面からアップロードして復元します。

URL置換箇所が多い場合は、sedコマンドで一括置換

  • dbファイルの書き換えで置換数が多い場合は、sedコマンドを用いてターミナル上で一括置換を行う
  • 私の場合は2,000記事以上あるメディアサイトの移行でしたので、そもそもエディタでdbファイルを開くのも時間がかかる状態でした…! この状態で置換を行いましたが、置換箇所が2万箇所以上に。このようにdbファイルの内容が膨大な場合には、エディタではなくsedコマンドでの置換を推奨します。

sedコマンドでのdbファイル内URL書き換え例

aaa.comの箇所が移転元URL、bbb.comの箇所が移転先URLです。

$ sed -i -e "s|https://aaa.com|https://bbb.com|g" backup_filename-db

-i オプションで上書き指示です。(または —in-placeオプション)

-i オプションの直後に拡張子名を指定すれば、指定された拡張子名でバックアップファイルを作成してくれます。

$ sed -i.bak -e "s|https://aaa.com|https://bbb.com|g" backup_filename-db

基本的には上記でOK。

他の方法として、リダイレクトを利用して、元のデータベースファイルを変えず残したまま置換したデータベースファイルを新たに作成したい場合には下記。

バックアップファイル作成とやっていることは一緒です。

$ sed -e "s|https://aaa.com|https://bbb.com|g" input_db > output_db

この場合、UpdraftPlusはリストア時にファイル名で識別をしているようなので、input_dbとoutput_dbの名前はあとで同一になるようにしましょう。たとえば一旦、output_dbには~-db2という名前をつけて、圧縮後に2をトルなど。

上手順で書き換え完了後、output_dbを圧縮してUpdraftPlusにアップロードする際には、元のデータベースファイルと同じ名前になっているか確認してください。

# 圧縮して .gzファイルに
$ gzip filename-db

hostsファイル設定変更により、自分のPCからのみ移転後のサーバーへアクセス

# hostsファイルで下記のように参照先IPを指定して記述
xxx.xxx.xxx.xxx example.com
xxx.xxx.xxx.xxx www.example.com
xxx.xxx.xxx.xxx test.example.com

移行先サーバーのWordPressにログイン。UpdraftPlusから復元する

移行先サーバーのWordPressにログインし、UpdraftPlusプラグインをインストール。

WordPressダッシュボード > 設定 > 一般 でURLを”https://~” としてSSL設定を実施。

http:~のままの状態でUpdraftで復元処理をさせてしまうと、致命的なエラーとなる可能性があります。

その後、ここまでの手順で準備してきたバックアップファイルを管理画面上でアップロードし、復元手続きを進めれば完成です。

この記事の気になった箇所に戻る:

category: