WordPress サーバーの移転とドメインの変更
プラグインに頼らずに、手動でWordPress サイトのサーバー移転をおこなう方法の説明です。
WordPress が動く仕組みの概要
どのウェブサイトもインターネット上のどこかにあるサーバーに格納されています。
WordPress はウェブサイトを作るために使われるソフトウェアですが、これもサーバーに格納されています。
WordPress では、ウェブサイトの設定に関する情報や各ページで表示する記事、画像などのデータをデーターベースに格納します。そしてそのとき使われるデータベースもサーバーに格納されています。
つまり、WordPress で作られたサイトを格納しているサーバー上には、 WordPress というソフトウエアとデータベースがあり、その2つが連携してウェブサイトを動かしているということになります。
サーバー移転に必要なデータ
先に説明したことからも想像できるように、以下の2つを移転する必要があります。
- WordPressを構成しているファイル
- WordPress が利用しているデータベースのデータ
1. WordPressを構成しているファイルについて
原則として、WordPressをインストールしたディレクトリ内のファイルすべてが移転の対象となります。
※ WordPress インストールディレクトリ直下にある wp-content というディレクトリはユーザーが利用しているテーマやプラグイン、アップロードした画像などが格納されているディレクトリで、ユーザーごとに異なるファイルが格納される場所です。ですから、移転先サーバーに新規に WordPressをインストールして、移転元の wp-content というディレクトリだけを移転先サーバーへ上書きコピーするという方法もあります。
2. WordPress が利用しているデータベースのデータについて
ブログ記事や装飾などのコンテンツ、WordPress の設定データなどが格納されています。
サーバー移転の概要
移転元のサーバーに格納されている WordPress ファイルおよびデータベースのデータをまず手元の自分のパソコンへダウンロードし、それらを移転先のサーバへアップロードすれば良いということになります。
またこのとき、以下の情報の変更が伴うことがあります。
- データーベース関連の情報(データベース名、ユーザー名、パスワードなど)
- サーバーの IPアドレスとドメイン名を対応付けるために使われているネームサーバー
- ウェブサイトのドメイン名の変更
このような情報の変更がある場合、移転先にアップロードしたファイルやデータベースに書き込まれている情報を新しいものに書き換える必要が出てきますが、これについては後に詳しく説明します。
データのダウンロードやアップロードをする手段について
WordPressを構成しているファイルの場合
自分のパソコンから サーバーへ FTP と呼ばれている方式で接続することにより、サーバに格納されているファイルやフォルダを自分のパソコンへダウンロードしたり、その逆に自分のパソコンからサーバーへアップロードすることができます。
サーバーへは FileZilla などの FTP 用ソフトウェアを使って接続することができます。
サーバーにはファイルマネージャ機能が備わっていることが多いのでそれを使うこともできます。しかし、フォルダ単位でのダウンロードやアップロードが不安定になることや、操作がしにくいことがあるようです。
上級者は SSH によるダウンロードを使うこともできます。
わかりやすさや安定性を考えに入れると FTP接続を用いる方法が一番良さそうです。
サーバーの FTPアカウントについて
サーバーへ FTP という方式で接続するためには FTP 専用のユーザー名やパスワードが必要になります。これは WordPress へログインするためのアカウントやサーバーの管理画面へログインするためのアカウントとは別のものです。サーバーの利用契約をおこなった際にとりあえず初期アカウントとしてFTPアカウントが1つ作成されていて、サーバー事業者からメール等にてユーザー名やパスワードが通知されているはずです。
サーバーへ FTP で接続する方法
FileZilla などの FTP ソフトウェアに FTP アカウントで使われているサーバーのアドレス、ユーザー名、パスワードを設定することによりサーバーへ FTP接続できるようになります。
FTP ソフトの使い方はここでは説明しません。
データベースの場合
大抵のサーバーにはデータベースを扱うためのソフトウェア phpMyAdmin が導入されています。これを用いるのが一番簡単と言えそうです。
データベースシステムに格納されているデータを操作する場合、phpMyAdmin などを使って、まずデータベースシステムへログインする必要があります。
データベースのアカウントについて
データベースシステムでは、WordPress へログインするためのアカウントやサーバーの管理画面へログインするためのアカウントとは別に、データベースシステムを利用するためのアカウントを使います。ですから、データーベースのデータをダウンロードしたりアップロードする際には、そのアカウントのユーザー名、パスワードが必要となります。このユーザー名やパスワードは、サーバーにWordPressをインストールしたときに自動的に作成されていたり(WordPress簡単インストールなどの機能を使った場合)、サーバーの管理画面でデーターベースの設定を自分でおこなったときに作られているはずです。
データベースシステムへのログイン方法
データベースシステムはターミナルとかコマンドプロンプトなどと呼ばれる、いわゆる「黒い画面」を使い、コマンドを入力して操作するようにできていますが、ウェブブラウザ(Chrome や Edge、Firefoxなど)を使いマウスとキーボードを使って操作することもできるようになっています。このときに使われているのが phpMyAdmin と呼ばれるソフトウエアです。
phpMyAdmin はサーバーで稼働するソフトウェアなので、自分のパソコンからウェブブラウザでサーバーへアクセスして使うことになります。phpMyAdimin のログイン画面へは、サーバーの phpMyAdmin の URL をブラウザのアドレスバーに入力してアクセスすることができます。また URL がわからない場合でも、サーバーの管理画面にログインすればきっとそこから何かしらの方法で phpMyAdmin のログイン画面へアクセスできるようになっているはずです。
phpMyAdmin のログイン画面にアクセスできたら、データベースシステムへログインするためのユーザー名とパスワードを入力します。
phpMyAdmin の操作の仕方についてはここでは説明しません。
移転元から必要なデータをダウンロード
移転元のサーバーから必要なデータを自分のパソコンへ取り込むため次の2つのことをおこないます。
- WordPress を構成しているファイルのダウンロード
- データベースシステムに格納されているデータのエクスポート
1. WordPress を構成しているファイルのダウンロード
先に説明したように、FileZilla などの FTP ソフトを使って移転元サーバーへ FTP で接続し、必要なファイルをすべて自分のパソコンへダウンロードします。
2. データベースシステムに格納されているデータのエクスポート
先に説明したように、phpMyAdmin へログインし、必要なデータベースに含まれているすべてのテーブルを自分のパソコンへエクスポートします。
補足:データベースはテーブルと呼ばれているものが一般には複数集まってできています。また、テーブルというのは、大まかに言うと、表計算ソフトでもよく見かけるような形式でデータを集めてできているもので、一行目には項目名が並べられ、二行目以降にそれぞれのデータが入力されているもののことです。ただし、phpMyAdmin でテーブルの内容を見ても、表計算ソフトのように表示されるわけではありません。
⚠ WordPress が使っているデータベースのデータをデータベース単位でエクスポートしても良いのですが、その場合は移転先のサーバーでSQLによってデータベースの create 文を実行する権限が与えられている必要があります。多くの場合、共用のレンタルサーバーではその権限は与えられていないため、データベース単位でエクスポートするのではなく、そのデータベースに含まれているすべてのテーブルをエクスポートするという対応になるでしょう。
⚠ phpMyAdmin を使ったテーブルのエクスポートでも「黒画面で」コマンドを使ってデーターベースを操作するときと同様、エクスポートのオプションを詳細に指定することができます。オプション指定をするときに「生成オプション 追加コマンド:」という項目で(念の為)「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT コマンドを追加する」にチェックを入れます。
移転先へ必要なデータをアップロード
自分のパソコンへダウンロードした以下の2つを移転先のサーバーへアップロードします。
- WordPressを構成しているファイル
- データベース
1. WordPressを構成しているファイルのアップロード
ダウンロードのときと同様に、FileZilla などを使い、FTP接続でアップロードするのが良いでしょう。
このとき、移転先サーバーのどのディレクトリにアップロードしなくてはならないのかということをよく確認することが大切です。
間違ったところにアップロードしてしまうと予定していた url とは少し違う url でアクセスしないとサイトが見られなくなってしまうとか、全く見られないということが起こります。(もちろん、間違っても何度でもやりなおすことができます。)
一般には、サイトのドキュメントルートへアップロードすることになるでしょう。
ドキュメントルートとはなにかということについては、ここでは説明しません。
2. データベースシステムへ必要なデータをインポート
予め移転先サーバーのデータベースシステムでこれから使うことになるデータベースを作成しておくことになるでしょう。
移転先サーバーの管理画面へログインしデータベースを設定します。
データベースの設定では、以下の設定を行います。
- ユーザーの作成
- データベースの作成
- ユーザーにデータベースを操作する権限(実行権限)を付与
ユーザー名やデータベースの名前は(自分が後で見てわかれば)どんなものでも構いません。
以上の設定ができたら、移転先サーバー のphpMyAdmin へログインします。移転元でエクスポートしたデータベースファイルには移転に必要なテーブルすべてが含まれるようにしているはずです。それを移転先で用意しておいたデータベースにインポートします。
このときに起きうるエラーのいくつかについて
「データベースが選択されていません」と出る
インポート処理を行う前に、phpMyAdminの左サイドメニューで、対象のデータベースを選択しておきます。グレーの選択状態になっていればOKです。(インポート先のデータベースが用意されていなければテーブルが一つもない空のデータベースを作っておく。)あとは、「インポート」タブでファイルを選択します。
データベースが正しく選択されている場合は、上部に「データベース “選択したDB名” へのインポート」と表示されます。
incorrect format parameterエラーが出る
php.ini の次の定義値を修正することでエラーが改善します。
- upload_max_filesize
- post_max_size
補足: php.ini というのは、サーバー上で稼働しているプログラミング言語 PHP の動作の仕方を設定するためのファイルで、サーバー上に格納されています。FileZilla などの FTP ソフトを使ってパソコンにダウンロードしてから修正しサーバーへアップロード(上書き)をしたり、サーバーに備わっているファイルマネージャー機能を用いて修正することができます。また、多くのサーバーでは、サーバー管理画面へログインすると php の設定をするためのメニューがあり、そこから php.ini の修正をすることができるようになっています。
upload_max_filesizeはアップロードできるファイルの最大サイズでpost_max_sizeはPHPで受けることのできる最大データサイズをあらわしています。アップロードしようとしたファイルのサイズがこれらの値を超過しているためにエラーが出ていることがあります。
そこで、例えば、次のように変更してみると良いでしょう。
php.ini
post_max_size = 32M
upload_max_filesize = 32M
(インポートするファイルのサイズより少し大きくしておく。)
⚠ memory_limit の値を大きくしたほうが良いこともあります。
補足:php.ini の場所について
info.php を参照して調べることができます。
またレンタルサーバーの管理画面から php.ini の設定ができることもあります。
本来、php.ini の編集を終えたら Apache と MySQL を reload 及び restart する必要がありますが、サーバーの管理画面から php.ini の編集ができるようになっている場合はこれらはおそらく自動的におこなわれると思われます。
サーバー移転に伴う情報の書き換え
WordPress を構成しているファイルおよび WordPress が利用しているデータベースのデータの中にはサーバー移転に伴って書き換えなければなければならない情報がいくつか含まれています。
WordPress 構成しているファイルの場合
これまでの説明で想像できるように、サーバーの移転に伴い以下の情報の変更が必要になっているはずです。
- データベース名
- データベースのユーザー名
- データベースのパスワード
- データベースのホスト名
WordPress システムはこれらの情報を wp-config.php というファイル(WordPress を構成しているファイルの1つ)に書き込んでいます。ですから、wp-config.php というファイルを探してテキストエディタで開き、これらの情報が書き込まれているところを探し、新しいサーバーで使っている情報に書き換える必要があります。
書き換える方法
FTP 接続を使って書き換えたファイルをアップロードする方法と、サーバーに備わっているファイルマネージャー機能を利用する方法があります。
ここでは FTP 接続を使って書き換えたファイルをアップロードする方法で説明します。
移転元からダウンロードしてきたファイルたちがパソコンに残っていればその中から wp-config.php というファイルを探してテキストエディタで開きます。残っていなければ FTP接続でサーバーへ接続し wp-config.php をダウンロードして自分のパソコンに取り込み、テキストエディタで開きます。
そして慎重にファイルの中身を見て次のような部分を新しい情報へ書き換えます。
define( 'DB_NAME', '新しく使うデータベース名' );
define( 'DB_USER', '新しく使うデータベースのユーザー名' );
define( 'DB_PASSWORD', '新しく使うデータベースのパスワード' );
define( 'DB_HOST', 'localhost' );
通常は、最後のDB_HOSTにある「localhost」は、このままでOKです。
以上の書き換えができたら、FTP 接続で wp-congfig.php をサーバーへアップロードします。(上書きします。)
ここでは、 wp-config.php の書き換えを手元のパソコンで行う方法をとりましたが、サーバーのファイルマネージャー機能を使えばサーバー上にある wp-config.php を直接編集することもできます。
マルチサイトでは
さらに次の項目の変更が必要です。
/* Multisite */
define('WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
define( 'DOMAIN_CURRENT_SITE', '新しいドメイン名' );
define( 'PATH_CURRENT_SITE', '移転先でWordPressのファイル一式をおいたディレクトリ' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
データベースのデータの場合
ドメインの変更がなければ特に何もすることはありません。
一方、ドメインの変更がある場合はここが一番めんどうなポイントとなります。
以前は、データベースファイルをテキストエディタで開いて旧URLをすべて新URLへ置換してから phpMyAdmin でインポートするという方法が WordPress の公式サイトで推奨されていたこともあるようです。しかし現在 WordPress の公式サイトではこの方法は推奨されていません。WordPress で使われる最近のテーマやプラグインの中にはデータをシリアライズされた形でデータベースへ格納するようになっているものがあり、それらはテキストエディタで置換することができないからです。そこで、今では書き換えを行うプログラムを利用するということがよくおこなわれます。そしてこのとき使われるプログラムとしてよく知られたものとして、
- wp search-replace
WP-CLI Commands | wp search-replace - Search Replace DB
inter.connect | Database Search and Replace Script in PHP
の2つがあります。
WP-CLI Commands | wp search-replace
WP-CLI Commands はコマンドラインでWPのファイルを操作できるプログラムです。ですから、SSH でサーバーへ接続して操作することになります。
最近のレンタルサーバーでは、はじめから WP-CLI Commands がインストールされていることもあるようです。そうではない場合でも、SSH による接続が可能なサーバーでプログラムのインストール権限が与えられていればインストールして使うこともできます。
このプログラムは WordPress を構成するファイルが置かれているディレクトリでコマンドを実行します。
WP-CLI Commands にはたくさんのコマンドが用意されています。そして、その中の1つに wp search-replace というコマンドがあります。
wp search-replace 置換前文字列 置換後文字列
としてコマンドを実行することにより、WordPress を構成しているファイル及び WordPress が使用しているデーターベースの情報を一気にすべて書き換えることができます。
⚠ GUID 問題について
WordPress のデータベース内にシリアライズ化されたデータとして保存されている GUID は原則として置換しないようにします。その場合、serch-replace コマンドには –skip-columuns オプションの値に guid を指定します。つまり次のようにします。(この例では移転元の URL を http://example.com、移転先の URL を http://example.net としています。)
wp search-replace 'http://example.com' 'http://example.net' --skip-columns=guid
WordPress は記事や画像などのオブジェクトに GUID という一意な ID をつけており、これは URL っぽい文字列で保存されています。
https://capitalp.jp/?p=1028なぜかというと GUID は、RSS フィードなどで使われるためにインターネット全体で一意である必要があって、そのために WordPress ではたまたまドメイン名を混ぜているんです。(つまり URL っぽいフォーマットじゃなくてもいいということ。)
で、インターネット上で一意である必要があるということは逆にいうと簡単にほいほい変わるべきじゃないということも意味しています。
たとえば WordPress の設定でパーマリンク構造を変えるとしますよね。それでもこの値は変わりませんし、変わるべきではないと考えられています。
https://capitalp.jp/2017/01/25/do-not-change-the-guid/#content-section-4
ローカルの開発環境から公開用サーバーへの移行の場合にはguidを置換してしまっても構わないでしょう。
Search Replace DB
inter.connect の Database Search and Replace Script in PHP というページにアクセスし、説明をよく読んで Search Replace DB というプログラムをダウンロードします。ダウンロードの前にフォームに必要事項の入力などを行う必要があります。このフォームでは、名前と Emailアドレスを入力し、このプログラムを使うときの注意事項を理解したことを確認するボックスにチェックを入れます。また、donation(寄付)の提案に関する選択をする必要がありますが、Other or Nothing を選択することもできます。フォームの入力をして送信ボタンをクリックすると、入力した Email アドレスへこのプログラムのダウンロードリンクが送られてきます。
インストールの仕方や使い方についてはこの公式サイトのページをよく読みましょう。
.htaccess の修正
移転元サーバーと移転先サーバーでWordPress を構成しているファイルをインストールするディレクトリ構成が異なっている場合、.htaccess の修正も必要になります。
補足:.htaccess の修正も php.ini や wp-config.php などの修正と同じようにして、FileZilla などでサーバーへ FTP 接続しダウンロード、修正、アップロード(上書き)という手段で行うことができます。もちろんサーバーに備わっているファイルマネージャー機能を用いることもできます。
例
移転前サーバーではドキュメントルート直下の wpというディレクトリにインストールされていて、移転先サーバーではドキュメントルートにインストールする場合
「RewriteBase」の値を「RewriteBase /wp/」から「RewriteBase /」に変更する。
RewriteEngine On
RewriteBase / #「RewriteBase /wp/」から「RewriteBase /」に変更
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
管理画面の「設定」の修正
移転先サーバーではいくつかの設定項目がデフォルトに戻されてしまっている恐れがあります。
プラグイン等の確認
プラグインの中には、再インストールしなければならないものがあるかもしれません。
また、各プラグインの設定についても確認が必要かもしれません。