UpdraftPlus大量バックアップをscpコマンドで一括ダウンロード、WordPressをダウンタイムなく復元し移行

Last Edited Time
Nov 13, 2021 7:26 AM
Category
WordPress
Not yet (Unpublish)
Podcast
Super Published
Tag Library
image

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

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

移行の大まかな流れ

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

エックスサーバーのWordPress簡単移行はタイムアウトエラー

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

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

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

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

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

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

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

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

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データベースファイル内URLを一括置換

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

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

  • db.gzファイルを解凍して、.-dbの形に。
  • コマンドラインで解凍する場合は下記コマンド。
  • $ gzip -d filename-db.gz
  • dbファイル内に記述がある移行元サイトのURLを、すべて移行先URLに書き換えて保存。
  • 通常は、VS code等のテキストエディタの置換機能を使って書き換えればOK。
    • 置換する場所が多い場合には、後述のsedコマンドで置換する。
  • その後、圧縮して再び~-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です。input_dbはデータベースファイル名、output_dbは書き換え後に生成されるデータベースファイルです。
$ 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にアップロードする際には、元のデータベースファイルと同じ名前になっているか確認してください。

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

$ xxx.xxx.xxx.xxx example.com xxx.xxx.xxx.xxx www.example.com xxx.xxx.xxx.xxx test.example.com

category: