MENU

wp移行中にページエラー。マニュアル通りでは上手くいかない場合の対処法

今回は、wpサイトのサーバー移行(引っ越し)中にページエラーが出てしまった場合の対処方法について書きたいと思います。

webデザイナーの仕事をしていると、サーバー移行の仕事を頼まれることがよくあると思います。通常は各サーバー会社が用意している移行サービスや、操作マニュアルなどを見ながら作業を進めるかと思いますが、それ通りにやっても上手くいかない・・・と悩むケースもあるかと思います。

僕が直面した問題の状況と、解決した方法について紹介します。

この記事でわかること

  • wordpressで構築されたwebサイトのサーバー移行時に出てくるエラーの原因
  • マニュアルを見ながら試しても解決しない場合の対処法-僕の作業事例
  • 通常のやり方・注意点
目次

結論:成功した方法がコチラです

通常はFTPソフトウェアを使ってサーバー上にファイルをアップロードした後、データベースの移行を行うかと思います。しかし、僕が最初にやったときには403エラーが出てしまい、ページが正しく表示されない状態になってしまいました。

※403エラー・・・アクセス権限に問題がある場合に起きるエラー。「ページはサーバー上に存在しているんだけど、今はページにアクセスしないでくださいね」というメッセージ。よくある原因としては .htaccessが間違っている 、パーミッションに誤りがある、DNS設定が間違っている、など。

原因:サーバーのPHPバージョンと、移行サイトのwpバージョンが合っていない

まず、バージョン違いが一番大きな原因でした。サーバーはPHP7.4だったんですが、移行しようとしているwpサイトは5.0および4.9。※2つの別々なサイトを移行しようとしています。詳しくは後述しています。

PHPバージョンとWPバージョンが対応していないと、WP内のテーマやプラグインがうまく作動しないためエラーにつながってしまいます。特にセキュリティ系のプラグインは、構成されているプログラムが少しでも噛み合わないと、エラーを表示してしまいます。

PHPバージョンとWPバージョンの対応情報は次の通りです。

PHPバージョン(推奨)PHPバージョン(動作)WPバージョン
5.6 5.2.4~5.64.0
5.6 5.2.4~7.04.4~4.6
7 5.2.4~7.14.7~4.8
7 5.2.4~7.24.9~4.9.4
7.25.2.4~7.24.9.5~4.9.x
7.35.2.4~7.35.0~5.1
7.3 5.6.2~7.3 5.2
7.3 5.6.2~7.3 5.3~5.4
7.45.6.2~7.45.5
7.4 5.6.2~8.05.6
7.4 5.6.2~8.05.7~5.8

ほかにも原因がいくつかあり、作業を進めるうちにゴチャゴチャとしてきて、データベース接続確立エラーや500エラー、404エラーなども出てきました。

※404エラー・・・ ページが存在しないエラー。ファイルのアップロード内容が間違っているか、調べているリンクが間違っている可能性が高い。

※500エラー・・・ URLまたはそのプログラムにアクセス出来てはいるが、処理が完了できないため起こるエラー。よくある原因はプログラムの記述が間違っている、Webサーバーの同時接続数が多すぎる、.htaccessが間違っている、パーミッションに誤りがある など。

手順解説

基本方針:WPを新規にインストールし、データベースの中身を対応するように書き換える

何パターンか試行錯誤してみて、最終的に成功した方法は次の通りです。

手順

  1. 準備:ドメイン取得、データベース作成などを済ませる(マニュアル通りでOK)。あらかじめデータベースと新サーバー上のファイル(そのサイトを公開するディレクトリ)を空にしておく。
  2. version.phpでWPの、サーバーコントロールパネル内でPHPのバージョンを確認する
  3. PHPバージョンを対応するバージョンに変更する
  4. 新サーバーにWordpressを新規インストールする
  5. 管理画面にログインし、version.phpで確認したものと同じバージョンに落とす
  6. ファイルのアップロード、テーマ・プラグインの有効化(アップロード完了後、この時点で一度サイトを表示してみる。おそらくDBが紐づいていないから、ちゃんと動作しない。)
  7. .sqlのファイルデータをテキストエディタなどで開き、中身を直接データベースに書き込む(インポートとは別)。
  8. 動作チェックをして、足りない箇所は6~を繰り返してみる。特に.htaccessなどを正しく記入・配置

結構長い手順ですが、1番から解説していきます。

1-ドメイン取得、データベース作成、データを空にする

ドメイン取得、データベース作成については各社が出しているマニュアル通りでOK です。

データが空の状態とは、下記画像の通りです。FTPのソフトウェアなどで下記の様にサーバー上のディレクトリを見たとき、

仮でtestというディレクトリを用意していますが、その配下にある「(トップのスラッシュ:ルート)」が「/」で表されるルートディレクトリだとします。その配下にある「公開フォルダ」の中身が “空のディレクトリリスト” と表示されていれば空になっています。ここに後ほどwordpressをインストールしていきます。

データベースが空の状態は、PHPmyadminから確認する場合、

こうなってます。データベースが空の場合、(データベース名)の下に「~~テーブルがありません」と表示されているはずです。サーバーの簡単インストール等でwordpressをインストールすると、ここに自動でwordpress本体のデータが組み込まれます。

2- WPのバージョンおよびPHPのバージョンを確認する

wpのバージョン確認は、移行したいデータの中の「version.php」というファイルを見れば確認できます。
「wp-includes」>「version.php」でみつかります。

FTPソフト内からでは直接開くことはできないので、ローカルにある状態で上記の場所まで行き、右クリック>「プログラムから開く」>任意のコードエディタやテキストエディタなどで開きます。今回はコードの書き換えはないので、メモ帳で開いても大丈夫です。僕の場合は、「Adobe DreamWeaver」で開きました。

上の方に書いてあるはずです。また、このファイルにはDBのバージョンや必要になるPHPのバージョンが書いてあると思いますので、勝手に改変しないようにしましょう。

上記の対応表では、 wp4.9は PHP5.2.4~7.2で動作、とあります。
結果から言うと、WP4.9はPHP7.3でも動きました。ただし、動作の保証や推奨はされていないので、WPのバージョンを上げた方が無難です。

つぎに、サーバーのPHPバージョンをダウングレードさせましょう。

3- PHPバージョンを対応するバージョンに変更する

各サーバーではPHPのバージョンを変更できる箇所があります。さくらサーバーを例に説明すると、

スクリプト設定>言語バージョン設定
から変更できます。

4- 新サーバーにWordpressを新規インストールする

PHPのバージョンを変更したら、wordpressを新規インストールします。今回は簡単インストール機能を使いました。やり方はマニュアル通りでOKです。
ここで大事になってくるのが、「どこのディレクトリにインストールするか?」です。

画像の様に、サーバー側でインストール先のディレクトリ名を指定することができます。
例えば、上記画像1枚目では/www(公開フォルダ)/[blog] となっていますが、このように指定した場合、2枚目の様に公開フォルダの配下にblogというディレクトリが生成され、blogの配下にwordpressがインストールされます。
※サーバーの仕様によって公開フォルダの設定は異なります。使用するサーバーのマニュアルをご確認ください。

僕の場合、後述しますが1つ目のサイトと2つ目のサイトをこの時点で別々のディレクトリに分けました。それぞれのディレクトリにWPをインストールした形です。

DBの「接頭辞」について

データベースには「接頭辞」というものが存在します。さくらサーバーやロリポップ!などでwordpressを新規にインストールした後、サーバーからPHPmyadminにログインしてみます。
すると、テーブル名のところに「wp×××〇〇〇 _・・・・・・ 」みたいな名前でそれぞれの項目が14個くらい並んでいると思います。この 「wp×××〇〇〇_」(アンダーバーまで)を「接頭辞」とよびます。

wp-config.phpの中に「$table_prefix = ’   ’ 」という項目があるかと思いますが、これはデータベースの中のどのテーブルと紐づけるか?を定義する部分です。つまり、 「$table_prefix =  ’   ’ 」の  ’   ’ の中身に一致するテーブルが読み込まれるということになります。

例えば、データベース内のテーブルには「wp_ 」という接頭辞のテーブルだけがあったとしましょう。
一方で、アップロードしたファイル内のwp-config.phpの接頭辞項目の部分は、 「$table_prefix = ’wp012345_’ 」 という記述だったとします。この場合、テーブル名とwp-config.phpの記述がズレている(合ってない)ので、正しく読み込まれずエラーになってしまいます。データベース側をwp-config.phpに合わせるか、wp-config.php を書き換えればOKです。

僕はこの方法を応用し、後述の1つめのサイトはデータベース接頭辞を「 wpAAABBB_ 」2つめのサイトは「 wpXXXYYY_ 」とし、それぞれのwp-config.phpをこれらに合わせて書き換えてあげることで、1つのデータベースで2サイト管理できるようにしました。そうすることで、サーバーを別で契約する必要もなければ、データベースを2つ作る必要もなく、複数サイトを1つのサーバーで管理できますね。

5- WP管理画面からWPのバージョンを落とす

次に、新規でインストールしたwordoressのバージョンを変更していきます。ここでは、プラグインを使ってバージョン変更します。

僕は、「WP Downgrade」というプラグインを使いました。インストールして有効化します。
設定> 「WP Downgrade」 と進み、

目的のバージョンを入力します。「変更を保存」>[Up/Downgrade Core] > [再インストール] でバージョンの変更ができます。

チェックポイント

  • この時点で、一度データベースをエクスポート(.sql形式で自分のローカル環境にダウンロード)しておきましょう。この後もし作業に躓いて一度データベースを空にした場合、また4~5を繰り返すのは面倒だし時間がかかります。新しいwordpress本体のみのデータということで、移行したいデータの.sqlファイルと混同しないような名前を付けて保存しておくことをお勧めします。
  • PHPmyadmin > 画面左部データベースを選択 > 画面上部「エクスポート」

6- ファイルのアップロード、テーマ・プラグインを有効化

ここにきて、ようやく初めて移行したいデータファイルをサーバーにアップします。FTPソフトを使い、「plugins」ディレクトリ、「themes」ディレクトリ、「uploads」ディレクトリを1つずつアップしていきます。

※windowsの場合、FTPソフトの転送モードを「バイナリ」にしないとうまくいかないことがあります。改行コードの問題のためです。

これらは移行したいデータの「wp-content」内にあります。1つアップロードしたら、その時点でWP管理画面を確認してみましょう。

「plugins」をアップしたら、管理画面の「プラグイン」>「インストール済みプラグイン」にもともと入っていたプラグインが反映されているか?をチェックし、必要なものを有効化します。
「themes」はテーマ情報が入っています。アップロードしたら「外観」>「テーマ」のなかに移行したいデータのテーマ情報が入っているかをチェックし、有効化します。

下記1枚目は、「themes」ディレクトリの中身です。これをアップすると、管理画面にそのテーマが出現します。

「uploads」には、それまでにアップした記事の情報や画像・動画などのメディア情報が書き込まれています。これもアップロードします。

この時点で、サイトの表示をしてもちゃんと動作しないのではないかと思います。データベース内にまだこれらの情報が入っていないため、リンク切れが起きていたり画像がちゃんと表示されていない、といった現象が起こるかと思います。

7- .sqlの中身を直接データベースに書き込む

ここが一番大事な作業になります。
やり方としては、[SQL]タブからクエリを実行して、テーブル内にデータの値を書き込んでいく、という方法を取ります。

通常マニュアルに書いてあるやり方だと、テーブルを選択→インポートというやり方でデータを入れろ、と書いてある場合が多いかと思います。しかし、ちょっとしたバージョンの違いや、旧データベース特有の書式・形式まで一緒にインポートしてしまって動かなくなる、というケースが存在します。ここは、必要なデータのみを厳選してテーブル内に収めるようにしましょう。

僕のケースは、ページが表示されるようになったけどページ内がリンク切れをしている、という状態でしたトップページは表示されているけど、それ以外の過去の投稿などが一切見れない状態。そこで、「 wp ×××〇〇〇 _ postmeta 」「 wp ×××〇〇〇 _ post 」に原因があると仮定して、この二つをそれぞれ挿入しました。結果的にページリンクが戻り、元通り完全にサイトを閲覧できるようになりました。

やり方は次の画像の通りです。

ここでは、wp ×××〇〇〇 _ postmeta というテーブルの内容を書き換える例を説明します。
まず、「.sql」ファイル内の「 wp ×××〇〇〇 _ postmeta 」に関するテーブルの箇所まで行きます(多くの場合、.sqlはPHPmyadminのテーブルと同じ順番で上から並んでいるかと思います)。そこで、新データベースのテーブル名が.sqlと合っているか確認し、合っていなければ全部書き換え、「INSERT INTO~~」以下を全部コピーします。コピーするテーブルによっては何百行、何千行になる場合もあります。ここは頑張るしかないです。

ヒント:データ挿入と表示の確認
データの行数が長くなる場合、一括でコピー・ペーストしたあとにページ表示をして動かないことがある。それを避けるために、データのコピペを小分けにし、都度サイト表示を確認しながら進んでいくと原因が見つかることがある。ただし、コピーする行をミスったらサイトが正しく動かない。劇薬注意。

コピーしたらそれを、

PHPmyadmin > 挿入したいテーブルを選択 > 上部タブ[SQL] > 「INSERT INTO~~」 をペースト > 枠外右下 [実行]

をクリックします。そのまま進んでいくと、sqlが実行され、テーブル内にデータそのものだけが入ります。
これでデータ挿入は完了。 「 wp ×××〇〇〇 _ postmeta 」 にデータ挿入が完了した時点で、一度ページを表示してみましょう。原因がありそうな残りのテーブルも同じ要領で入れていきます。

ヒント:原因がありそうなテーブルの探し方

現在のサイト表示の状態から関連のありそうなテーブルを選択して、「返り値が空でした」という表示になれば、そのテーブルにはデータが入っていない状態を表す。ただし、空の状態が正解の場合もあるので、それぞれのテーブルの役割を調べながら進めるべき。

8-足りない箇所があれば、6~繰り返し

それでもエラー表示が解消されない!というようであれば、そもそも別のところに原因がある可能性が高いです。
サーバー契約・ドメイン取得の直後だったり、DNS設定が違っていたり、などの場合があります。

ページは表示されるんだけど正しく機能していない場合は、6~をパターンを変えて繰り返してみます。wp-config.phpは正しく記述されているか?特に、認証用ユニークキーが改変されていてアクセスできない、といった場合もあります。必ず元データのバックアップを二重 、三重に取っておきましょう。

FTPソフトを使ってアップロードをする際、転送モードが間違っていてエラーになることがあるようです。特に、windowsのOSを使用している場合、プログラムの改行コードの問題で正しくない(意図しない改編のある)コードが入ったファイルをアップしてしまっている可能性があります。一部のファイルのソースコードに「//メモ帳で編集しないでください」みたいなメッセージが入っているのはそのためです。対策は、各ソフトの設定項目から転送モード「バイナリ」を選択してアップしましょう。

wp-config.phpや.htaccessを書き換える時も、メモ帳で書き換えるのはあまりお勧めしません。コードエディタやテキストエディタを使いましょう。僕が使っているのは、「秀丸エディタ」というものです。

秀丸エディタ

https://hide.maruo.co.jp/index.html

ここまで、僕がwordpressサイトを移行した手順事例でした。
ご精読ありがとうございます。

今回の状況:2つのサイトを1つのサーバーでまとめて管理

今回の事例が、そもそもどういう状況だったのかを解説します。簡単に言うと2つの別々のサーバーで管理していたwebサイトを、1つのレンタルサーバーで自社でまとめて管理したい、というところから始まりました。

図にすると下記の通りで、企業B,Cはそれぞれ別のサーバー会社を使ってデータ管理しています。

旧サーバーでの管理

あるあるだと思いますが、こうした作業を担当する場合、企業Aと企業B/Cは対立していることがあります。企業B/Cからしてみれば、それまで運営手数料を取って経営していたところを、お役御免になってしまうことになりますから、当然といえば当然です。先方担当者から電話を無視されたり感情的な態度をとられたり、ということも考えられるでしょう。理性の欠如は教養の欠如です。

いろいろなやり方がありますが、基本的には企業B/Cからデータをもらうことが第一歩となります。メールや各種クラウドサービスを使ってデータをもらいましょう。企業B/Cとの契約内容によっては、データを相手サーバーから引っこ抜く際にお金を取ることが記載されている場合もあります。

通常のサーバー移行のやり方

ここからは、通常のサーバー移行のやり方を説明します。自分だけで管理しているサイトであれば、新サーバーの引っ越しサービスなどがあればそれを使うやり方や、wp側でサーバー移行のプラグインを使って引っ越す方法もあります。

ここでは、相手が企業や個人事業主であった場合を仮定して説明します。

大まかな順番

  1. 旧サイトの管理者からデータをもらう
  2. サーバー契約、新規ドメイン取得、データベース作成
  3. ファイルをアップする
  4. データベースをインポートする
  5. 表示されるかを確認し、問題なければDNSを変更する

1-相手(旧サイトの管理者)からデータをもらう

具体的に何のデータをもらうのかというと、大きく分けて2つです。

  • サイトの情報が入ったファイル
  • データベースの情報(.sql)

まず、サイトの情報が入ったファイルとは、wordpress本体の情報+それまでに投稿してきた記事とそれらに含まれる画像、動画、音楽などのメディアなど+その他(.htaccessの情報、ファビコンなど)で構成されます。
つぎに、ここでいうデータベースの情報とは、.sqlという拡張子で構成される、SQL言語で書かれたプログラムのことです。この情報をデータベース(例えばPHPmyadmin)にインポートすることで、サーバー上にアップしたファイルをどのように制御するか?どのように扱うのか?をコンピューターに指示することができます。あくまでもイメージですが。

2-サーバー契約、新規ドメイン取得、データベース作成

この過程は1の前にやっても問題ないです。どっちを先にしないといけないみたいな決まりはないです。

お使いのサーバーが出しているマニュアル等を見ながら、契約・新規ドメイン取得・DB作成を行います。

その後、「簡単インストール」等の機能を使って先にWPをサーバーにダウンロード・インストールするやり方もあります。その場合、その時点でのバージョンのWPがインストールされます。

3-ファイルをアップする

FTPソフトなどを使って、上記の1つ目のファイルをアップします。この時、特にwindowsの環境で作業をしている人は、FTPの設定を「バイナリ」にしておくといいです。FilezillaというFTPソフトの場合、「編集」>「設定」>「転送」>「FTP:ファイルの種類」>「バイナリ」を選択すれば、バイナリモードで転送ができます。これにより、プログラムの不要な書き換えが起こらずにデータを転送してくれます。windowsだと、改行コードの問題で勝手に書き換わることがありますので、それを防ぐ意味で僕はバイナリにしています。

ここでWPをアップした場合、wp-config.phpの中身を変更する必要があります。変更箇所は以下の通りです。

これらは例えばPHPmyadminなんかでログインするときに使う情報です(サーバー仕様によって違っていたらすみません)。一番下のホスト名は、サーバー情報などに書かれているかと思います。

また、アップ完了したら各ファイルのパーミッションを変更しておきましょう(コレを間違えると403エラーなどにつながります)。通常は以下の数字で設定します。

  • wp-config.php・・・「400」か「600」
  • .htaccess(書き換えられる事例が多発していますので、必ず→)・・・「604」か「600」
  • その他のディレクトリ(フォルダ)・・・「705」
  • その他のファイル・・・「604」

サーバーの仕様によっては、「themes」と「uploads」を「707」に設定した方がいいケースがあるようです。

4-データベースをインポートする

wp-config.phpを正しく書き換え、ファイルをアップしたら、次はデータベースのインポートです。単にファイルをアップしただけでは、データベース内にテーブルは作られません。「簡単インストール」等でWPをインストールした場合、ここの作業まで自動でやってくれるため、そういう意味で「簡単」となっています。

では具体的にどうやってやるのかというと、

phpmyadminにログインし、必ずまず初めに対象となるデータベースを選択します。次に、「インポート」をクリックし、選んだデータベースの中にファイルを入れていきます。「ファイルを選択」で旧サーバーからダウンロードしてきた.sqlふぁいるを選び、アップロードします。

これで、4は完了です。データベースを選ばない状態でインポートすると、何らかのエラーが起こるはずです。また、.sqlのファイルはSQLというプログラミング言語で書かれており、「テーブルを作ってね」「テーブルの中にこのデータを入れてね」という指示が書かれています。いわゆる指示書みたいなポジションですね。

5-表示されるかを確認し、問題なければDNSを変更する

ここまできたら、表示確認です。実際にサイトを表示してみて、表示されるかを確認します。WPのバージョンやプラグインなどのバージョンが新しくかつ、対応するものであれば問題ないかと思いますが、つい先日WP5.9がリリースされました。これから移行を行う方はwp5.9に注意してください。

確認方法はいくつかあり、windowsの場合、hostsファイルに少し追記してあげれば新サーバーでの表示状況を確認できます。ローカルファイルの検索窓に、「C:\Windows\System32\drivers\etc」を入力します。

  • 「C:\Windows\System32\drivers\etc」

hostsファイルをコードエディタやテキストエディタなどで開き、最後の行に#をつけずに
「IPアドレス」「ドメイン名」を入力します。もちろんカギカッコはつけません笑
IPアドレスはSEOチェキなどのサービスで見つかります。

ちゃんと動作することが確認出来たら最後にDNSを変更します。

5まで進んだ時点で、旧サイトの管理者が特に何もしていなければ、旧サーバーと新サーバーのそれぞれにサイトが存在していることになります。つまり、サイトのリンクをクリックした人は、ランダムでどちらかのサーバーを見に行って、サイトを閲覧するという状態です。それを、新サーバーだけに見に来るようにしてあげる必要があります。

DNS変更のやり方は、ドメインの操作パネル(サーバー管理パネルとは別なケースもある)から行うことができ、大体のケースでドメイン管理会社がマニュアルを出しています。それに従って変更してください。

ドメインの変更が完了し2~3日ほどして問題なければ、旧サイト管理者に報告し、旧サイトの管理環境からファイルを削除してもらいましょう。最後に任意で.htaccessを編集し、リダイレクトの設定をしてください。
これにて、作業完了です。お疲れさまでした。

まとめ

今回はwordpress移行の記事を書いてみました。いずれも、元のサイトURLは変えずに移行できる方法になっていますので、リンク切れ等の問題を起こしにくいかと思います。

ご精読ありがとうございました。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次