【WordPress】プラグインを使わない移行方法(From さくらのレンタルサーバー To エックスサーバー)

どうも、Tです。

とあるWordPressサイトをさくらのレンタルサーバーからエックスサーバーへ移行しました。プラグインを使わずにやってみて、手順が多かったので忘れないように備忘録です。

スポンサーリンク
アドセンス1

移行の要件

今回移行を行うにあたり、下記が必須事項になりました。

  • レンタルサーバーを変更する(DBが変わる)
  • 移行先ではSSL化を行う
  • 新規ドメインを取得する
  • 移行元の記事を全部移行する
  • 移行元のアクセスを集約したいため301リダイレクトを行う

なんでWordPressの移行プラグインを使わないのか?

WordPressの移行用プラグインで「duplicator」や「All-in-One WP Migration」などがあり、いくつか試しましたが、下記のような問題にぶち当たったため諦めました。

  • 移行容量に制約がある(有料版が必要)
  • ドメイン変更に制約がある(有料版が必要)
  • なんかエラーが出る

結局のところ、有料版が必要になったりエラーが出た場合にプラグインのソースを追う必要があり労力に見合わないと考えました。

移行関連プラグインのメリット・デメリットは、下記でうまくまとめてくれていました。

WordPressの引っ越し・移転プラグイン3選比較、おすすめはどれ?
数サイトレンタルサーバーを移転したため、Wordpressの引っ越しプラグインをまとめていきます。duplicatorのメリット・デメリット● メリット メリットをあまり感じることができず、他のものにしました。。 ただし、ぐぐるとエックスサ

環境

移行元

以下、さくらのレンタルサーバーを移行元記載します。

  • サーバー:さくらのレンタルサーバー
  • プラン:スタンダード

移行先

以下、エックスサーバーを移行先記載します。

  • サーバー:エックスサーバー
  • プラン:X10

移行概要

移行の流れは上記フローになります。レンタルサーバー出ない場合も上記の流れは基本的に同じで対応できます。

事前準備

移行元

特になし。

移行先

下記の部分までは、事前に準備しました。

  • 移行先レンタルサーバーの契約済み
  • レンタルサーバーの構築
  • 新規ドメインの取得
  • 新規ドメインをSSL化

移行に使ったツール

  • サクラエディタ(設定ファイル編集に利用)
  • Filezilla(レンタルサーバーとファイル転送に利用)
  • phpMyAdmin(DB操作用)
  • Search Replace DB(DBのドメイン書き換えに利用)

【移行元】バックアップ取得

概要

移行元のWordPressを構成するフォルダ・ファイル・データベースのバックアップファイルを自分のPCへ保存します。

ファイルバックアップ取得

さくらインターネットの「サーバーコントロールパネル」へログインし、「運用に便利なツール」->「ファイルマネージャー」をクリックします。

左欄から移行対象のドメインを選択し、右欄のフォルダ・ファイルにすべてチェックをします。チェック後にメニューの「ダウンロード」をクリックします。

確認画面がでるので「開始」をクリックします。これで自分のPCへファイルがダウンロードされるので、フォルダ・ファイルのバックアップは完了です。

データベースバックアップ取得

さくらインターネットの「サーバーコントロールパネル」へログインし、「アプリケーションの設定」->「データベース設定」をクリックします。

「管理ツールログイン」をクリックします。

「ユーザー名」「パスワード」「Server Choice」を入力して「実行」をクリックし、phpMyAdminにログインします。

ユーザ名:データベースユーザーです。

パスワード:データベースユーザーのパスワードです。

Server Choice:自動入力されたままでOK。

左欄から対象のデータベースを選択し、「エクスポート」タブをクリックします。「詳細 – 可能なオプションをすべて表示」を選択し、すべてのテーブルがチェックされていることを確認します。

画面下の「実行」ボタンをクリックします。SQLのダンプファイルが自分のPCへダウンロードされるので、データベースのバックアップは完了です。

【移行先】新規データベース作成

概要

移行先でWordPressをリストアするために空のデータベースを準備します。

MySQLデータベース作成

エックスサーバーの「サーバーパネル」へログインし、「データベース」->「MySQL設定」をクリックします。

「MySQL追加」タブをクリックし、「MySQLデータベース名」に任意の名前を入力し、「MySQLの追加(確認)」ボタンをクリックします。

ここで入力する「MySQLデータベース名」は移行元のデータベース名と異なっても問題ありません。

確認画面が表示されるので「MySQLデータベース」の項目を確認し間違いがなければ「MySQLデータベースの追加(確定)」ボタンをクリックします。

「MySQLデータベースの追加おを完了しました。」が表示されればデータベースの作成は完了です。

MySQLユーザ作成

引き続き「MySQLユーザ追加」タブをクリックします。「MySQLユーザID」「パスワード」に任意の値を入力し、「MySQLユーザの追加(確認)」ボタンをクリックします。

確認画面が表示されるので「MySQLユーザ」の値を確認し、問題なければ「MySQLユーザの追加(確定)」ボタンをクリックします。

「MySQLユーザの追加を完了しました。」が表示されることを確認します。

作成したデータベースにユーザの紐づけをします。「MySQL一覧」タブをクリックし、「アクセス権未所有ユーザ」から先ほど作成したユーザを選択し「追加」ボタンをクリックします。※ここに表示されている「MySQL5.7ホスト名」は後程使用するのでメモしておきます。

「MySQLデータベースへのアクセス権の追加を完了しました。」が表示されることを確認します。

「MySQL一覧」タブを再度表示し、「アクセス権所有ユーザ」に先ほど設定したユーザが表示されていることを確認できればユーザ作成は完了です。

ここで設定した、「データベース名」「ユーザID」「ユーザパスワード」「MySQL5.7ホスト名」は、後の設定に必要になるためメモしておきます。

【移行先】リストア

概要

バックアップで取得したフォルダ・ファイルおよびデータベースを移行先にリストアします。操作は、移行先になるので注意しましょう。

フォルダ・ファイルのリストア

.htaccessファイルを避難

移行元から取得したフォルダ・ファイルのバックアップファイルはzipファイルになっているので、解凍します。

さくらインターネットのファイルマネージャーを利用した場合、WindowsZipでは解凍できません。7zなどほかの圧縮・解凍ツールを利用してください。

解凍した中に「.htaccess」ファイルがあります。移行先にも同じ名前のファイルがあり上書きするのは望ましくありません。しかし、後の設定で「.htaccess」ファイルの中身を確認する必要があるため、いったん別のフォルダへ避難しておいてください。

wp-config.phpの編集

解凍した中に「wp-config.php」ファイルがあります。テキストエディタで開いてデータベース接続の定義部分を編集します。

/** WordPress のためのデータベース名 */
define('DB_NAME', '移行先で作成したデータベース名');

/** MySQL データベースのユーザー名 */
define('DB_USER', '移行先で作成したデータベースユーザ');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', '移行先で作成したデータベースユーザパスワード');

/** MySQL のホスト名 */
define('DB_HOST', '移行先で確認したMySQL5.7ホスト名');

上記設定後に保存します。

「wp-config.php」の編集にはメモ帳は使わず、UTF-8対応のサクラエディタなどの高機能テキストエディタを使用しましょう。 

FTP接続用アカウント作成

エックスサーバーの「サーバーパネル」の、「FTP」->「FTPアカウント設定」をクリックします。

対象となるドメインを確認し「選択する」をクリックします。

「FTPアカウントの追加」タブを選択し「FTPユーザーID」「パスワード」に任意の値を入力したら、「FTPアカウントの作成(確認)」ボタンをクリックします。

確認画面が表示されるので、内容を確認後「FTPアカウントの作成(確定)」ボタンをクリックします。

「FTPアカウント『入力したユーザーID』を追加しました。」が表示されればFTPアカウントは作成されました。

「FTPアカウントの一覧」タブをクリックしユーザーが存在することを確認しましょう。

「FTPソフト設定」タブでFTPソフトの設定に必要な情報を確認できます。

初期FTPアカウントは、使用を避け追加FTPアカウントを利用しましょう。

セキュリティの面から作業完了後に、追加FTPアカウントは削除しましょう。

フォルダ・ファイルのアップロード

僕は、FileZillaを利用して接続しました。左欄が僕のPCで解凍したWordPressのバックアップフォルダで右欄がエックスサーバーになります。エックスサーバーの「/ドメイン名/public_html/」に接続します。デフォルトで用意されている「default_page.png」「index.html」ファイルは不要なので削除します。

左欄のWordPressのバックアップフォルダをエックスサーバー側にドラッグ&ドロップでファイルを移動します。すべてのファイルの移動が完了したらフォルダ・ファイルリストアは完了です。

データベースリストア

エックスサーバーの「サーバーパネル」の、「データベース」->「phpmyadmin」をクリックします。

「ユーザー名」「パスワード」を入力し「ログイン」ボタンをクリックします。

ユーザ名:データベースユーザーです。

パスワード:データベースユーザーのパスワードです。

左欄から作成したデータベースを選択し、「インポート」タブをクリックします。

「アップロードファイル」をチェックし、「ファイルを選択」から移行元で取得したデータベースのバックアップファイルを選択します。

画面下にある「実行」ボタンをクリックします。

左欄にテーブルがリストアされ、「インポートは正常に終了しました。」が表示されます。これでデータベースのリストアは完了です。

【移行先】データベースのドメイン情報書き換え

概要

データベースはリストアできましたが、データベースの中には、移行元URL情報(http://oldsite.co.jp)が入っています。この情報を移行先URL情報(https://newsite.net)に書き換える必要があります。

ここでは、書き換え用ツールとしてSearch Replace DBを利用します。

なんか怪しそうだなと思いましたが、WordPress Codexでも公開されている情報なので使って問題ありません。

一部引用します。赤太字の部分がSearch Replace DBの紹介になります。

When your domain name or URLs change there are additional concerns. The files and database can be moved, however references to the old domain name or location will remain in the database, and that can cause issues with links or theme display.

If you do a search and replace on your entire database to change the URLs, you can cause issues with data serialization, due to the fact that some themes and widgets store values with the length of your URL marked. When this changes, things break. To avoid that serialization issue, you have four options:

Use the Velvet Blues Update URLs plugin if you can access your WP Admin Dashboard.
Use the Better Search Replace plugin if you can access your WP Admin Dashboard.
Use WP-CLI’s search-replace if your hosting provider (or you) have installed WP-CLI.
Use the Search and Replace for WordPress Databases Script to safely change all instances on your old domain or path to your new one. (** only use this option if you are comfortable with database administration ** )

Search Replace DBを利用した本手順では、設定関連・記事本文に至るまでのドメイン情報を変更しているので注意してください。例えば、記事に移行元URLが記載されなければいけない場合でも、移行先URLに置き換えられます。

Search Replace DBダウンロード

Database Search and Replace Script in PHP | interconnect/it
Search Replace DB is a powerful tool for developers, allowing them to run a search replace against their database where CLI tools or WP plugins can’t work.

上記のサイトからSearch Replace DBをダウンロードします。

3つのチェック項目にチェックを入れます。ちなみにこの項目は下記のようなことを言っています。詳しくは翻訳してみてください。

I accept this script can be a security risk

このスクリプトを使うことによってセキュリティリスクがあること了承しますよ!

I understand that this script must not be left in a public facing web server

このスクリプトを公開されているWebサーバーに残しちゃいけないことをわかってますよ!

I am a developer and I know what I’m doing!

開発者なので、このスクリプトが何をするものなのか知っていますよ!

上記の3つのチェック項目に同意できたら、その下の「Name(First・Last)」「Email」に任意の値をいれて「SUBMIT」ボタンを押します。

入力したメール宛てにメールを送付したメッセージが表示されます。

メールが届いていますので、本文中の「here」をクリックしてSearch Replace DBをダウンロードします。赤字で重要文が記載されています。

簡単に説明すると、「このスクリプトは簡単にデータベースを破損させるから理解しろよ!わからないならプロフェッショナルの人を雇えよ!それとこのスクリプトを公開したWebサーバーに置くとハッカーにも狙われるからな!http認証をかけろよ!」のようなことが書かれています。気を付けて利用しましょう。

Important: Search Replace DB is a professional developer tool, usually for helping with migrations where command line tools are not available. If you do not understand that this tool can easily damage your database then please do not use it and hire a professional. You should ensure that the script is placed in an obfuscated subdirectory that cannot easily be reached from the front end. If you wish to keep the script online permanently for some reason, make sure that as a bare minimum you set up http authentication for the folder in which it resides, otherwise you will leave your site open to hackers. And we don’t want that, do we?

Search Replace DB利用した書き換え

ダウンロードSearch Replace DBを解凍すると「Search-Replace-DB-master」というフォルダがあります。「Search-Replace-DB-master」フォルダを移行先のDocumentRoot(エックスサーバーの場合、「/ドメイン名/public_html/」)フォルダにコピーします。

Webブラウザから「https://ドメイン/Search-Replace-DB-master」にアクセスします。

「replace」の項目に移行元のURL」「with」の項目に移行先のURL」を入力します。「database」の各項目にはデータベースに接続するための情報が自動的に入ります。各項目が入力できたら「dry run」ボタンをクリックします。

「dry run」は実行(書き換え)はされず、実行した場合の想定の変更点の確認が行えます。
「replace」「with」のURLの末尾に「/」を入れては行けません。
NG例:http://oldsite.co.jp/
OK例:http://oldsite.co.jp

「view changes」をクリックすることによってどのように変更されるか確認することができます。

変更内容に問題がないようであれば、「live run」ボタンをクリックします。これで実際に変更処理が行われます。

「処理を行います。バックアップを行いましたか?」の確認メッセージが表示されるので、「OK」ボタンをクリックします。

「Updates」列に変更結果が出力されます。

WordPressのサイト画面を開くと使用しているテーマやプラグインによって上記のようにWarningやErrorが出力される場合があります。これは、httpなどがつかないドメイン名のみの部分が変更されていないなどが考えられます。

このような場合、「replace」の項目に移行元ドメイン名のみ(http://を付けない)「with」の項目に移行先ドメイン名のみ(https://を付けない)を入力し、再度「dry run」「live run」を実行してみてください。

更新が終わったら、「delete me」ボタンをクリックし「Search-Replace-DB-master」フォルダを削除します。

削除確認画面が表示されるので「OK」ボタンをクリックします。

こちらの画面は、ニュースレターの登録なので無視して問題ありません。

エックスサーバーのファイル一覧からも「Search-Replace-DB-master」フォルダが削除されていることを目視で確認しておきましょう。これで、データベースのドメイン情報の書き換えは完了です。

【移行先】.htaccess書き換え

概要

「.htaccess」ファイルにはWordPressやWordPressプラグインが書き込んだ設定があります。移行元の.htaccessの内容で必要な部分を移行先の.htaccessに追記します。

.htaccess書き換え

エックスサーバーの「サーバーパネル」の、「ホームページ」->「.htaccess編集をクリックします。

対象のドメインを選択し「選択する」をクリックします。

上記は、エックスサーバーで常時SSL化とbasic認証を行ったところまでの情報です。

移行元ファイルバックアップで取得していた「.htaccess」の内容を確認し、必要な部分を追記します。今回は、上記の内容を追記しました。プラグインによって内容は異なりますが、「# BEGIN WordPress」「# END WordPress」で囲まれた部分はWordPressの動作に必須のものになりますので忘れずに設定しましょう。設定後、右下の「.htaccessを編集する(確認)」ボタンをクリックします。

確認画面が表示されるので、「.htaccessを編集する(確定)」ボタンをクリックします。以上で、.htaccessの書き換えは完了です。

【移行先】WordPressの設定変更

概要

ここでは、WordPressが正しく表示できているか確認します。これといった手順などは特にありません。移行によって不要になったプラグインの削除・動作確認などを行います。

真っ先に気になるのが「一般設定」「WordPressアドレス(URL)」の変更ですが、手順「【移行先】データベースのドメイン情報書き換え」にて変更されています。

【移行元】301リダイレクト設定

概要

このまま移行元を放置してしまうと、移行元移行先で閲覧が分散してしまいます。移行元のページにアクセスがあった場合、移行先のページに移動(リダイレクト)する設定を行います。リダイレクトの設定は、移行元「.htaccess」ファイルに設定します。

リダイレクト設定

移行元のファイルバックアップ時に退避しておいた「.htaccess」ファイル末尾に下記を追記します。

Redirect permanent / https://newsite.net/
この設定は、移行元移行先でドメイン以下の階層が全く同じページ構成を前提としています。移行元Aページにアクセスがあった場合は、移行先Aページへリダイレクトするイメージになります。移行元移行先でページ構成が変更される場合は、「mod_Rewrite」を利用し正規表現を用いた方法に置き換えてください。

さくらインターネットの「サーバーコントロールパネル」の、「運用に便利なツール」->「ファイルマネージャー」から「.htaccess」ファイルをアップロードします。

確認画面が表示されるので「はい」ボタンをクリックします。

【移行元・先】アクセス確認

概要

ここまでで、移行先サイトは正常に動作し、移行元からのリダイレクトも行えているはずなのでどちらのサイトにアクセスしても移行先が表示されることを確認しましょう。

参考情報

以下のサイトを参考にさせていただきました。ありがとうございました。

Moving WordPress « WordPress Codex
WordPressサイトのドメイン一括置換には「Search Replace DB」が良い!
WordPressサイトのドメイン一括置換には「Search Replace DB」を使うと良いです。通常の置換だとシリアライズされたデータが入ってることもあるので、プラグインなどに不具合が出る場合があるとのことです。また、SSLへの対応にも使えますよ。
WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう | infoScoop開発者ブログ

まとめ

当初の予定では、データベース引っ張ってきて、SQLクエリで置換をかけるだけだろうと考えていましたが、Search-Replace-DB-masterを使う必要があったりと色々発見がありました。

この移行方法では、「301リダイレクトにより移行元サイトのSEOを移行先サイトでも活用できる」「(リダイレクトの設定ミスらなければ)ダウンタイムほぼなし」というのが魅力ですね。

細かいところでは、Adsenceの再審査や再設定などもあるのですが、細かすぎるので割愛しました。ともあれ、ドメインの引っ越しによりどの程度アクセス数に影響があるのか今後の楽しみです。