- Updraft Backup Plusでサーバー移行
- Updraft Backup Plusとは
- 今回やりたいこと・移行前後のサーバー環境などの状況
- Updraft Backup Plusでのサーバー移行の大まかな流れ
- エックスサーバーのWordPress簡単移行を試すも、タイムアウトエラーで断念
- Updraft Backup Plusで移行を実施。移行先のサーバーおよびWordPress設定
- エックスサーバーにWordPressをインストール
- 移行前後のPHPバージョンを合わせておく
- hostsファイルでDNS切り替え前に動作確認
- scpコマンドで移転元サーバー:ロリポップからupdraftフォルダごと一括ダウンロード(一括コピー)
- scpコマンド使い方
- updraftバックアップファイルのサーバー保存場所
- Updraftバックアップファイルをscpでローカルに一括ダウンロード
- 本当はリモートサーバー間でscp転送できればいいのだけれど…
- scpコマンドでは保存元パス末尾の/(スラッシュ)の有無で挙動が異なる
- ファイル名をscpコマンドで複数指定したい場合には、“ブレース展開” を活用する
- scp, sshの際にパスワードを省略するために公開鍵認証で接続
- 移行前後でドメイン(URL)が異なる場合、UpdraftPlusデータベースファイル(~.db.gz)内URLを一括置換して手元で編集
- UpdraftPlusのデータベースファイル内URLを書き換える手順
- db.gzファイルを解凍して -dbの形にする
- URL置換箇所が多い場合は、sedコマンドで一括置換
- sedコマンドでのdbファイル内URL書き換え例
- ふたたび-db.gzの形に圧縮して戻し、移行先サイトWordPressのupdraftへアップロードできる形にする
- hostsファイル設定変更により、自分のPCからのみ移転後のサーバーへアクセス
- 移行先サーバーのWordPressにログイン。UpdraftPlusから復元する
Updraft Backup Plusでサーバー移行
今回はWordPressのバックアップ&リストアプラグイン、”Updraft Backup Plus”を利用してサイト移転を実施しました。
Updraft Backup Plusとは
Updraft Backup Plusは基本的には無料で、比較的簡単にWordPressサイトを移転させることが可能なバックアッププラグインです。
UpdraftPlus WordPress Backup Plugin – WordPress plugin | WordPress.org
ただし、WordPressをマルチサイト化している場合など、一部特殊な設定をしている場合には有料プランを契約したうえで移転を実施する必要があります。
今回やりたいこと・移行前後のサーバー環境などの状況
- メディアファイル(uploads)がバックアップファイル数にして54と大量にあり、ブラウザ経由でダウンロードしているとダウンロードエラーが頻発。
- FTP経由も同様に一括ダウンロードするとDL時エラーが生じたため、ターミナルからscpコマンドでリモートサーバー上からローカルに一旦ダウンロード。
- 移行元サーバー: ロリポップ
- 移行先サーバー: エックスサーバー
- ドメイン管理(ドメイン購入元レジストラ): ムームードメイン
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簡単移行を利用して、半自動での移転を検討していました。
しかし、下記のエラーメッセージが。
“移行元サーバーとの通信に失敗している可能性があります。 時間を空けてもう一度お試しいただくか、「WordPressの移行について」をご参照のうえ、手動で移行作業を行ってください。 また、移行用データファイルの作成に時間がかかりすぎてタイムアウトしている可能性も考えられます。 移行元WordPressのwp-contentディレクトリ内の容量が極端に大きい場合などに発生するため、不要なファイル(バックアップデータ等)を削除して容量を減らしてから再度お試しください。”
移行実行ログを確認。
- タイムアウトにより中止
Updraft Backup Plusで移行を実施。移行先のサーバーおよびWordPress設定
このようにエックスサーバーのWordPress簡単移行はタイムアウトエラーとなってしまったため、WordPressのバックアップ用プラグインである”Updraft Backup Plus”でバックアップを取得。移行先サーバーで復元させるという手法をとりました。
エックスサーバーにWordPressをインストール
下記の順番で、エックスサーバー上の領域にWordPressをインストールします。
- ドメインを追加
- エックスサーバーにWordPressをインストール
- WordPressかんたんインストールを実行するも、 “既に別のプログラムが設置されているか、インストール済みです” とエラーが出たので、ドメイン設定よりドメイン初期化
- 恐らくファイル容量が膨大だったことがエラー原因
- 移行前と移行後でPHPバージョンが異なるとエラーになることもあるらしい
- 初期化後、WordPressかんたんインストールで問題なくインストール完了
移行前後のPHPバージョンを合わせておく
- 移行前のPHPバージョンは、WordPress管理画面 > サイトヘルスで
- エックスサーバー管理画面 > PHP ver 切り替え
hostsファイルでDNS切り替え前に動作確認
- hostsファイルを編集して確認する方法 を参照
- hostsファイルの設定を即時反映させる方法 - Qiita
- hostsファイルが反映されない場合の対処法 | okuden-labo
- Macでhostsファイルを編集して設定を確認する方法 | Rriver
- mac環境でhostsを設定、反映されない時はDNSキャッシュをリセット | WEBコンサルティング・WEB制作のフリーランス uiuifree
scpコマンドで移転元サーバー:ロリポップからupdraftフォルダごと一括ダウンロード(一括コピー)
UpdraftPlusはWordPress管理画面から、下記5種類のバックアップデータをダウンロード可能です。
- データベース
- テーマ
- プラグイン
- アップロード
- その他
バックアップ内容が少なければ、そのままWordPressの管理画面上でダウンロードを実行してOK。
しかし、大規模サイト等、上記バックアップファイルの数が膨大になってきた場合にはファイルをダウンロードするのに非常に時間がかかってしまいます。
また、レンタルサーバーの性能が弱いとダウンロードしきる前にタイムアウトになってしまったり、ダウンロード中にエラーが発生してダウンロードできなかったりと、バックアップファイルのダウンロードに不都合が生じる場合があります。
今回の移行元サーバー: ロリポップがそれでした。最下位プランではなく中位プランあたりだったのですが、バックアップファイルをダウンロードすることが難しかったです。
php.ini設定を変更すればできた…?このあたりはロリポップサーバーの仕様にあまり詳しくなかったため、下記のようにscpコマンドで一括コピーする方法をとりました。
そのため、scpコマンドを利用してバックアップファイルをローカルに一括ダウンロード(一括コピー)する方法を下記に記載します。
scpコマンド使い方
-r オプション(recruisive)でupdraftフォルダごとコピー
-P オプション: ポート番号を指定
scpの場合は大文字の-Pであることに注意。SSHの場合は-p。
ロリポップの場合、SSH接続ポートとして2222を指定
- ロリポップでSSHアクセス
- ロリポップSSH接続コマンド:
- ssh お客様のSSHアカウント名@お客様のホスト名 -p 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] userA@serverA:xxxxx/xxxx userB@serverB:xxxxx/xxxxx
ただし、ロリポップおよびエックスサーバーともにポート番号が異なること、エックスサーバーでは公開鍵認証がサーバー側生成の鍵ペア(管理画面より生成)でないと上手くいかなかったことから試さなかった
scp -3 オプションで、scp実行クライアントをハブとしてリモートサーバー間でscpコピーできるとのこと(未検証)
また、移転元のロリポップサーバーからエックスサーバーにSSH接続することはできませんでした。
- ロリポップからSSH接続しようとすると、下記のエラーメッセージ。
- ssh: Could not resolve hostname ssh: Name or service not known
- 踏み台サーバーとして使えないようにSSH発コマンド不可の設定をしてある様子。
- 【Linuxコマンド】scpコマンドでサーバ間転送!いちいちローカルにダウンロードするのは億劫だ! - ENZO.NET(えんぞーどっとねっと)
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の際にパスワードを省略するために公開鍵認証で接続
ブレース展開によるコピーの際に問題が発生。-rオプションで再帰的にディレクトリを指定しているときと異なり、ブレース展開による複数指定は1つのファイルのコピーが完了するごとにパスワードを聞かれてしまいました。
そこで、パスワード入力を省略するために“公開鍵認証”による接続を行い、scpコマンドを実行するようにします。
下記の記事が図表入りで、流れが分かりやすかったです。
- ローカルからリモートサーバーにssh, scp接続する場合。
- ローカルPC(クライアント側)で“ssh-keygen”コマンドを実行し、秘密鍵、公開鍵を作成する
- このとき、秘密鍵 = id_rsa 公開鍵 = id_rsa.pub
- パスワードを省略したいので、パスフレーズには何も入力せず空白(null)で実行。
- リモートサーバーに生成した公開鍵(id_rsa.pub)をscpコマンドで送付。(※)
- authorized_keysに、下記コマンドで送付した公開鍵情報を追記
- なお、(※)の段階でscpコマンドではなくssh-copy-idを使用すると、authorized_keyへの追記まて処理してくれます。
$ ssh-keygen -t rsa
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
scpコマンドの代わりにssh-copy-idコマンドを使うと、 (ローカルPCで公開鍵を生成してそれをリモートサーバに持って行って.ssh/authorized_keysに追記しないといけないといった)面倒な作業を一遍に行ってくれます。
- 結論として、ブレース展開を活用のうえ公開鍵認証を用いてscpを行う場合、ロリポップでは下記のコマンドでリモートサーバー→デスクトップへダウンロード(コピー)できました。
- パスワード設定なしの秘密鍵・公開鍵はセキュリティ的にやや不安なので、作業が完了したらrmコマンドで削除するようにしましょう。
- expectコマンドでIDとpasswordを自動入力させる方法も
- expectコマンドを利用して、SSH, scp時のIDとpassword入力を自動化させるという方法もあるようです。
- 私もexpectコマンドを試してみたのですが、どうも上手く動作しなかったので上記の公開鍵認証で解決させた次第です。
- パスワード入力を省略させたいだけなら、ssh-agentあるいはSSH_ASKPASSを利用する方法もあるとのこと。
- 現在ではscpよりもrsyncが推奨されているとのこと
- rsyncに関する参考記事:
- rsyncコマンドにより増分・差分バックアップをとることができる。ファイルのバックアップとして活用したい。
$ scp -P 2222 -i ~/.ssh.id_rsa [email protected]:/~/web/wp-content/updraft/backup_2021-01-04-2308_sitename_fffb0e0ffaaa-uploads{34..56}.zip ~/Desktop
scpプロトコルはすでに古く柔軟性を欠いており、直ぐに修正することができないため、scpではなくよりモダンなプロトコルであるsftpやrsyncを利用することを推奨している。
OpenSSH 8.0登場、scpよりsftpやrsyncプロトコルの利用を | マイナビニュース
移行前後でドメイン(URL)が異なる場合、UpdraftPlusデータベースファイル(~.db.gz)内URLを一括置換して手元で編集
UpdraftPlusのデータベースファイル内URLを書き換える手順
UpdraftPlusの復元時、URL変更を伴う場合にはデータベースファイル(~.-db.gz)の一部、URLを書き換える必要があります。
db.gzファイルを解凍して -dbの形にする
db.gzファイルを解凍して、.-dbの形に。
コマンドラインで.gzファイルを解凍する場合は下記コマンド。
$ gzip -d filename-db.gz
-dは decompress (解凍)のオプションです。
元のファイルを保持しておきたい場合には、下記のように -k (keep) オプションをつけます。
$ gzip -dk filename-db.gz
dbファイル内に記述がある移行元サイトのURLを、すべて移行先URLに書き換えて保存。
通常は、VS code等のテキストエディタの置換機能を使って書き換えればOK。
置換する場所が多い場合には、後述のsedコマンドで置換する。
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
sedで置換してファイルを上書きする | ITを使っていこう
基本的には上記で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
ふたたび-db.gzの形に圧縮して戻し、移行先サイトWordPressのupdraftへアップロードできる形にする
dbファイル内のドメイン名(URL)書き換えが完了したら、下記コマンドで圧縮して再び~-db.gzの形に。
$ gzip filename-db
ファイル名が filename-db.gz の圧縮されたファイルが出来上がります。
このfilename-db.gzデータベースファイルと一緒に、テーマやプラグイン、アップロード画像等のバックアップファイルを移行先サイトWordPress管理画面のUpdraftPlus設定の画面からアップロードして復元します。
ダウンタイムが発生しても大丈夫なら、下記hostsファイルの設定部分はスキップしても大丈夫です。ドメイン管理パネル等からDNS設定を変更して新規サイトへ切り替えましょう。
hostsファイル設定変更により、自分のPCからのみ移転後のサーバーへアクセス
下記のように、hostsファイルの末尾に IPアドレス, サイトアドレス(FQDN)の形で記述する。間には空白スペース。IPアドレスはエックスサーバーのサーバー情報から確認。
参考: colorfulboxの場合:
# hostsファイルで下記のように参照先IPを指定して記述
xxx.xxx.xxx.xxx example.com
xxx.xxx.xxx.xxx www.example.com
xxx.xxx.xxx.xxx test.example.com
hostsファイルの場所:
- Mac OS X
- /etc/hosts
- Windows 10 / 8 / 7 /
- C:32
hostsファイルの設定は、DNS切り替え後に削除しておく。
以上について、下記リンクより“hostsファイルを編集して確認する方法” を参照
colorfulboxの場合: hostsファイルの設定方法 – ColorfulBox(カラフルボックス) サポートサイト
移行先サーバーのWordPressにログイン。UpdraftPlusから復元する
移行先サーバーのWordPressにログインし、UpdraftPlusプラグインをインストール。
WordPressダッシュボード > 設定 > 一般 でURLを”https://~” としてSSL設定を実施。
http:~のままの状態でUpdraftで復元処理をさせてしまうと、致命的なエラーとなる可能性があります。
その後、ここまでの手順で準備してきたバックアップファイルを管理画面上でアップロードし、復元手続きを進めれば完成です。
WordPress管理画面 > 設定 > UpdraftPlus バックアップ から「バックアップファイルをアップロード」。
すべての圧縮ファイルをアップロード完了したら、「復元」をクリックすれば復元手続きがスタート。
復元させるコンポーネントにチェックをいれて、「次へ」をクリック。
警告として、「ドメイン(URL)の変更を伴う復元作業になるけど、いい?」のように表示されます。 問題ないので、「復元」をクリック。
あとは問題なければ復元が完了します。バックアップファイルが多いと時間もかかります。
復元作業が進行しているあいだは、ページを閉じないように注意しましょう。
無事にバックアップが完了すると、ログイン画面が表示されるのでログインします。
以上で完了です。おつかれさまでした!
この記事の気になった箇所に戻る:
- Updraft Backup Plusでサーバー移行
- Updraft Backup Plusとは
- 今回やりたいこと・移行前後のサーバー環境などの状況
- Updraft Backup Plusでのサーバー移行の大まかな流れ
- エックスサーバーのWordPress簡単移行を試すも、タイムアウトエラーで断念
- Updraft Backup Plusで移行を実施。移行先のサーバーおよびWordPress設定
- エックスサーバーにWordPressをインストール
- 移行前後のPHPバージョンを合わせておく
- hostsファイルでDNS切り替え前に動作確認
- scpコマンドで移転元サーバー:ロリポップからupdraftフォルダごと一括ダウンロード(一括コピー)
- scpコマンド使い方
- updraftバックアップファイルのサーバー保存場所
- Updraftバックアップファイルをscpでローカルに一括ダウンロード
- 本当はリモートサーバー間でscp転送できればいいのだけれど…
- scpコマンドでは保存元パス末尾の/(スラッシュ)の有無で挙動が異なる
- ファイル名をscpコマンドで複数指定したい場合には、“ブレース展開” を活用する
- scp, sshの際にパスワードを省略するために公開鍵認証で接続
- 移行前後でドメイン(URL)が異なる場合、UpdraftPlusデータベースファイル(~.db.gz)内URLを一括置換して手元で編集
- UpdraftPlusのデータベースファイル内URLを書き換える手順
- db.gzファイルを解凍して -dbの形にする
- URL置換箇所が多い場合は、sedコマンドで一括置換
- sedコマンドでのdbファイル内URL書き換え例
- ふたたび-db.gzの形に圧縮して戻し、移行先サイトWordPressのupdraftへアップロードできる形にする
- hostsファイル設定変更により、自分のPCからのみ移転後のサーバーへアクセス
- 移行先サーバーのWordPressにログイン。UpdraftPlusから復元する
category: WordPress
tag: WordPress