【エラー対応あり】WordPressサーバー移設・移転方法【プラグインなしで全てのデータを移動、マルチサイトも対応】

この記事では、作業中発生しやすいエラーの解説も行いながら、Wordpressの引っ越し(サーバー移設・移転)の方法を解説します。

 

プラグインを利用しない方法となり、マルチサイトの移設にも対応します。

 

WordPressのコンテンツ以外の主な変更点は:

  1. サーバーのOSをCentOSからUbuntuへ
  2. WebサーバーをApacheからNginxへ

の2点です。

 

今回のWordpressサーバー移設に利用するOS、ミドルウェア等は以下のとおりです。

サーバーOS:CentOS 7.6
Webサーバー:Apache/2.4.6
PHP:7.1.31
Mysql:Ver 15.1 Distrib 5.5.60-MariaDB
Wordpress:5.7
SSL(HTTPS): Let’s encrypt※マルチサイト化(2サイト)
サーバーOS:Ubuntu 20.04.2 LTS
Webサーバー:nginx/1.18.0
PHP:7.4
Mysql:mysql Ver 15.1 Distrib 10.3.25-MariaDB
各種バーション確認コマンドは以下のとおりです

 

*マルチサイトの移設を例に解説していますが、シングルサイト(マルチサイト化していない)でも、基本同じ方法となります。

 

シングルサイトの移設を行う場合、目次の「【STEP-6】マルチサイトの表示対応」 をとばして作業してください。

 

スポンサード

【STEP-1】移設元サーバーのデータ取得(バックアップ)

 

まず、移設元のデータを取得します。

よく、wordpressのアップデートを行う時などに、「データのバックアップを行ってください」と言われますが、このような時に行うバックアップのとり方と同様です。

 

取得するデータは

  1. WordPressのデータ(“wp-“で始まるファイル・フォルダ)
  2. データベースのデータ

の2種類となります。

スポンサード

WordPressのデータの取得

  • 移設元のサーバーからデータを取得するには、FTPソフトを利用すると便利です。

今回は、Macを利用して作業するためFilezillaを利用します。

 

移設元のサーバーに接続したら、ドメインルート以下のファイル、フォルダをダウンロードし、ローカル環境に取得します。

 

私の環境の場合、ドメインルートへのパスは以下のとおりです。

 

以下の範囲のファイル、フォルダをダウンロードします。

 

スポンサード

データベースのデータの取得

データベースの取得には、phpMyAdmin を利用し、対象の管理ページへアクセスします。

デフォルトでは、サイトURL/phpMyAdmin(https://sample.com/phpMyAdmin/ )などですが、セキュリティ対策でphpMyAdminの部分を変更する場合もあるので、それぞれの環境に合わせアクセスします。

 

ユーザー名や、パスワードをお忘れの方は、先程ダウンロードしたwordpressのデータの中のwp-config.php を開くと以下のような情報が記載されているので、そちらを参考にします。

 

ログインし管理ページにアクセスしたら、①左のメニュー欄より移設元のデータベースを選択し、②エクスポートを選択します。

 

 

エクスポート方法がデフォルトでは、「簡易-最小限のオプションだけ表示」になっているので「詳細-可能なオプションをすべて表示」を選択し、設定を変更します。

↓↓↓

 

生成オプションの設定変更

追加コマンド:内の「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER コマンドを追加する」にチェックを加えます。

 

スポンサード

データ作成オプション

作成するクエリの最大長を[1000]に変更します。

 

以上のように、設定を変更したら[実行]をクリックしてデータをダウンロードします。

 

対象のデータベース名.sql(wordpress.sql等)のファイルがダウンロードされます。

 

これで移設元のデータの準備は完了です。

 

【STEP-2】移設先サーバーの環境構築

 

移設先サーバーの環境構築の手順としては、大きく以下のようになります。

  1. VPSサーバーなど移転先サーバーへのOSインストールと初期設定(セキュリティー対策)
  2. WordPressをインストールするためのミドルウェア等のインストールと初期設定

 

移転先サーバーへのOSインストールと初期設定

 

今回はさくらのVPS サーバーを利用し、OSとしUbuntuを利用する方法とします。

*エックスサーバーのWordpress専用クラウド型レンタルサーバーwpX Speed は設定が簡単で、表示速度が早い特徴がありますが、利用するリモートサーバーへのSSH接続ができないため、今回は利用していません。

 

OSのインストール及び、インストール後のセキュリティーの対策についてはこちらの記事を参考にしてください。

【Ubuntu20.04】VNCコンソールでの初期設定(ユーザーネーム、パスワード、パーティション)
サーバーセキュリティー対策【秘密鍵を用いたSSHログイン設定(ubuntu,mac)】

 

WordPressをインストールするためのミドルウェア等のインストールと初期設定

今回は、PHP、Nginx、MariaDBを利用する方法とします。

ミドルウェア等のインストールと初期設定についてはこちらの記事を参考にしてください。

【wordpressの環境構築】Ubuntu20.04,Nginx,PHP7.4,MariaDB

注意)サーバー移設の際は、移設元のデータにwordpressも含まれているため、上記の記事で紹介しているwordpressのインストールをする必要はありません。対象の箇所(wordpressのダウンロード以降)をとばして設定を行ってください。

 

【STEP-3】移設先サーバーへのデータ移行(データベース)

 

移設先サーバーへのデータ移行する手順は、以下のようになります。

  1. 移設先サーバーのデータベースに移設元で取得したデータベースデータのインポート
  2. 移設先サーバーに移設元で取得したWordpressデータをアップロード

 

移設先サーバーでデータベースデータのインポート

 

phpMyAdminのインストール

データのインポートをphpMyAdminを利用して行うために、まずはphpMyAdminのインストールを行います。

インストール作業の中でコンソール画面が以下のような表示になりますので、必要な情報を設定し進めます。

 

チェックは入れず[OK]を選択

 

[Yes]を選択

 

パスワードを入力して[OK]を選択

 

確認用のパスワードを入力して[OK]を選択

 

phpMyAdminのインストール後の初期設定

移設先のIPアドレス(設定予定のドメイン)を利用してphpMyAdminのページへアクセスできるように、下記の設定を行います。

 

phpMyAdminファイルのシンボリックリンクの作成

 

ファイル権限の設定

 

ファイル所有者の設定

 

wordpressコンフィグファイルの作成

NGINXの場合、/etc/nginx/sites-available/ こちらのディレクトリにdefault ファイルがありますが、今回はwordpress用にコンフィグファイルを作成します。

ファイル作成後は、以下のように編集します。

 

ファイル作成後はsites-enabled ディレクトリにシンボリックリンクを作成します。

 

NGINXの設定ファイルの削除

 

NGINXの再起動

 

コンフィグファイルの確認

以下のコマンドで、編集したコンフィグファイルの内容を確認します。

 

以下のように表示されれば確認OKです。(エラーが表示される場合はメッセージ内容を参考に修正します)

 

phpMyAdminの動作確認

ブラウザにhttp://サーバーのIPアドレス/phpmyadmin/ を入力します。

こちらのログイン画面が表示されればOKです。

この記事で紹介しているデータベースの設定では、rootでのログインはできない設定なので、登録したユーザー名でログインします。

ログイン後画面を確認すると、作成したデータベースが表示されていません

 

これは、rootでログインしていなく、表示の権限がないためです。

登録したユーザーに権限を与えて、表示や編集を行えるようにします。

ユーザーに権限を付与するため、rootでログイン

 

以下のコマンドでユーザーに権限を与えます。

 

設定の変更を保存し、データベースを抜けます。

 

もう一度、登録したユーザーでログインすると、すでに作成したデータベースを確認する事ができます。

 

データベースデータのインポート

移設先サーバーでphpmyadminが利用できるようになったので、移設元で取得したデータを移設先へインポートさせます。

 

移設先サーバーにてphpmyadminを開きます。

左側メニューから、作成したデータベースを選択します。

 

上部のメニューから[インポート]を選択します。

 

次にアップロードするファイルに移設元でエクスポートしたファイルを選択します。

 

[実行]を選択し、インポートを完了させます。

 

以下のように表示されればインポートの完了です。

 

エラーが発生する場合の対処

発生しやすいエラーとして、データベース内のデータ容量が大きすぎるケースがあります。

インポートの実行を行うと以下のような表示になります。

こちらのエラーに対応するために、アップロードできるデータの上限を上げる作業を行います。

php-fpmの設定

 

ファイル最後の行に以下の内容を追加して編集します。

 

編集後後は、nginxとphp-fpmを再起動しもう一度インポートを試します。

 

【STEP-4】移設先サーバーへのデータ移行(Wordpressデータ)

 

移転先サーバーへのWordpressデータのアップロード

wp-config.phpの編集

wordpressのデータをアップロードする際に移設先で新規に作成したデータベースの情報と、移設元から取得したデータベースの情報を共通のものにする必要があるので、確認及び編集を行います。

すでにダウンロードしているwp-config.phpを確認し、移設先のデータベース情報に共通させます。

 

WordPressデータのアップロード

FTPソフトを利用してデータのアップロードを行います。

データの設置場所は、今回は/var/www/html としています。

 

権限エラーが出る場合

以下のコマンドで権限の設定を変更します。

 

データのアップロードが終わった後は、/var/www/htmlの権限をwww-data にします(所有者が管理ユーザーのままだた、画像のアップロード等の時エラーとなります)。

 

【STEP-5】ネームサーバーの変更

 

データベース、Wordpressのデータの移設が完了しましたら、ネームサーバーを変更し、移設先のサーバーで利用していたドメインを利用できるよう編集します。

ローカル環境で動作、表示の確認

移設先の本番環境のネームサーバーを変更する前に、ローカルの環境で移設先での動作、表示が正しく行われるか確認します。

今回はMacのhostsファイルを使用する方法で確認します。

Macの場合、hostsファイルは以下のディレクトリにあります。

 

以下のように、移設先の「IPアドレス][スペース][ドメイン名]を加え編集します。

 

ファイルを編集したら、ブラウザで動作・表示の確認をします。

この際HTTPS化した状態では、アクセスできないので、http://sample.com というように入力し確認します。

 

通常通りに表示され、画面遷移、新規の投稿、問い合わせ機能等が問題なく動作する事を確認します。

 

リダイレクトされて確認できない場合

表示の確認のために、移設先サーバーのIPアドレスをURL欄に入力する場合や、上記のhostsファイルの設定をして表示を確かめる際に、矯正的にリダイレクトされて確認できない場合があります。

よく起こるパターンとして、http でアクセスしてもhttps のドメインへリダイレクトされる事があります。

多くの場合、移設元データベースのwp_options でsiteurl と、home が移設前のまま(httpsで指定)されているので、phpmyadminにログインして編集します。

移設前と移設後でドメインを変更する場合も同様に対応します。

 

上記の方法でもリダイレクトされて表示の確認が行えない場合は、wp-config.php 内を確認します。

 

下記のような表示があり、指定が違っている場合は修正、編集を行います。

 

移設先サーバーでのHTTPS化

この段階でネームサーバーを変更しても、HTTPでの接続にしか対応していませんので、移設先のサーバーへHTTPS化の対応を行います。

 

移設元のletsencryptディレクトリの取得

letsencryptディレクトリは/etc/letsencrypt となります。

FTPソフトでダウンロードするために、所有者と権限を変更します。

sudoをつけるか、root権限で作業

FTPソフトでダウンロード

 

移設先へのletsencryptディレクトリのアップロード

今度は、ダウンロードと反対の作業を行います。

さきほどダウンロードしたletsencryptディレクトリを、移設先の/etcにアップロードします。

 

etcディレクトリの所有者変更(root → usernameへ)

 

FTPソフトでアップロード

 

etcディレクトリの所有者変更(username → rootへ)(元の所有者設定に戻す)

 

 

FTPソフトでletsencryptディレクトリをダウンロードする際や、ダウンロード後にディレクトリの所有者を変更する際に、以下のようなエラーになりsudoコマンドが使えなくなった場合は以下の方法で対応します。

username is not in the sudoers file. This incident will be reported.

もともとはsudo可能なユーザー一覧に登録されていたユーザーなのに、そのリストからはずされてしまいこのようなエラーとなります。
root権限になって作業したくても、sudoコマンドが使えないので、ユーザー権限を変える事ができません。

またすでに、rootでのログインは禁止しているので、ログインし直す方法もつかえません。

そのため、VPSサーバーのコントロールパネル等のコンソール等で作業をします。
この場合、ユーザー名:root、パスワード:でrootの権限の状態(#)でログインできます。

# usermod -aG wheel username

これで、sudoコマンドが利用できます。

letsencryptディレクトリの所有者、権限の変更(権限設定に戻す)

 

 

再起動

 

sudo: /etc/sudoers.d is owned by uid 1000, should be 0

権限の変更後にsudoが利用できなくなった場合は、こちらの方法を参考に対応してください。
https://arch.jpn.org/archives/586
https://askubuntu.com/questions/513523/sudo-doesnt-work-etc-sudoers-is-owned-by-uid-1000-should-be-0

 

再起動

 

移設先にcertbotのインストール

 

SSL証明書を参照できているか下記のコマンドを実施

下記のような表示になれば、参照されています。

 

下記のような内容でエラ−がでる場合は、/etc/letsencrypt/archive/sample.com/ 内のファイルがシンボリックリンクではなく、実態ファイルとしてアップロードされている事があります。

expected /etc/letsencrypt/live/sample.com/cert.pem はシンボリックリンクになっている事が必要という内容

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Renewal configuration file /etc/letsencrypt/renewal/sample.com.conf produced an unexpected error: expected /etc/letsencrypt/live/sample.com/cert.pem to be a symlink. Skipping.

 

/etc/letsencrypt/live/sample.com/ 内のファイルをシンボリックリンクに変更します。
まずは、ディレクトリ内のファイルを上書きできるように全て削除します。

 

/etc/letsencrypt/liveファイルの権限を変更します。

 

移設元のサーバにアクセスし、/etc/letsencrypt/liveファイルの内容を確認します。

la -l コマンドを行います。

 

例えば以下のような内容の場合:

 

chain12.pem というように数字を合わせる必要があります。

 

live ディレクトリ内のファイルから、移設前と同じシンボリックリンクにします

ディレクトリの移動

 

再起動

 

エントリーファイルの編集

 

wordpress.confを以下のように編集します。

 

すでにあるシンボリックリンクの削除

 

編集後のシンボリックリンクの作成

 

再起動

 

コンフィグファイルの確認

 

証明書更新の自動化

証明書が参照されれている事が確認できたので、更新の自動化を行います。

crontabの編集

 

下記のような表示が出たら、お好みのエディターの形式を選択。

 

ファイル内に下記の内容を追加
*この場合は、毎月1日5時にnginxの停止、letsencrypt証明書の更新、nginnxの開始を行う

 

nginxの最起動

 

【STEP-6】マルチサイトの表示対応

 

  • ※シングルサイトで移設を行っている場合は、こちらのSTEP−6はとばしてください。

 

移設先のWebサーバーはNginxとなるため、マルチサイト機能の各サイト間の遷移等の動作は、Nginxのエントリーファイルで設定する必要があります。

現在のエントリーファイルに以下のコードを追加します

 

エントリーファイルの編集

 

wordpress.confを以下のように編集します。

 

すでにあるシンボリックリンクの削除

 

編集後のシンボリックリンクの作成

 

再起動

 

コンフィグファイルの確認

 

*SSL化の設定をした後にコンフィグファイルの確認をし、確認は問題なく行われるが以下の警告メッセージ表示が表示される場合

 

ssl on; をコメントアウトします。
 

【STEP-7】ネームサーバーの変更、最終確認

 

最終的にネームサーバーの変更を行う前に、もう一度ローカルのPC(macの場合は/etc/hostsファイルの利用)で、HTTPS化での動作、表示を確かめます。

 

アクセスした際に、以下のようにApacheのindex.htmlが表示される場合

 

どちらかの方法で対応します。

  • デフォルトで設置されているhtmlファイルの削除
  • Nginxエントリーファイルのindexの編集

 

デフォルトで設置されているhtmlファイルの削除

 

ルートディレクトリから、index.html を削除します。

ついでに、index.nginx-debian.html も削除します。

 

 

Nginxエントリーファイルのindexの編集

wordpress.conf内のindexを編集して、php.indexを優先的に利用するようにします。

 

移設元どおりに表示が確認され、各ページへの遷移や問い合わせページの機能が通常どおり動くようであれば、ネームサーバーを変更します。

 

最後に移設元のサーバーを停止し、最終の表示、動作確認ができればOKです。

 

お疲れ様でした。


以上、プラグインなしで全てのデータを移動(マルチサイトも対応)するWordpressのサーバー移設・移転の方法を解説しました。

 

作業時間が無い場合や、作業中にエラーや表示の不具合が発生し、解決できない場合は専門の業者のWordPressサーバー移転代行「サイト引っ越し屋さん」や、ココナラ 等のスキルマーケット内のサービスに作業を依頼するのも良いかもしれません。

サイト引っ越し屋さんの場合30,000円前後、ココナラ の場合5,000〜10,000円が作業依頼の相場とみて良いと思います。