Wordpressの引っ越し

らら
らら

はじめに

Wordpressの引っ越し依頼がきたのでメモ書き。

Wordpressは、2018年ぐらいから、間違ってバージョンして、画面が真っ白、レンタルサーバーがphpのバージョンが変わって、真っ白とか404.php,英数字のphpがルートに置かれて(ファイラー)トロイ状態だったり、個人的には、トラブル多いの好きではありません・・・

最近は、うちでは、MTのほうで行うようにしています。脆弱性があってもログインしないと起きないようなものが多いので

内容

どうも、SQLのダンプをもらえないようで・・・・FTPは許可が出たので、ファイルを全部落として、標準インポート・エクスポートで行うことに・・

Wordpressの場合、外部プラグインインストール入っている場合は、SQLダンプで行うのがおすすめです。

よく、Wordpressバージョンで失敗する案件では、プラグインのバージョンアップが止まっていて、バージョンが古いまま・・

また、一度、Wordpressバージョンしてしまうと、バックアップがない限り、戻せません・・・

この場合は、リニューアルするか。バックアップがあれば古いWordpressバージョンのままで動作させるしかありません。

他のネット記事では、まず、Wordpressバージョンアップしてから、インポート・エクスポートプラグイン入れてとあるのですが、行う前にFTPでサイト全体のバックアップとSQLのダンプのバックアップを行ってください。

古いバージョンのまま、移行して、プラグイン等が全部移行が完了してから、バージョンアップ条件を確認してアップした方がよいです。

個人的には、まず、プラグインの有無を確認します。標準のみであれば、標準インポート・エクスポートで行けます。

ただ、カテゴリなど使用している場合は、ECCUBE同様カテゴリが反映されません。この場合はSQLのダンプで行います。

SQLのダンプが一番確実です。。

今回は、調べてみると、Advanced Custom Fields が入っていました・・・

今回は、SQLダンプできないので・・

Wordpressのカテゴリは、wp_termsにあってterm_idがauto_increment指定されています。これは自動採番を意味します。

これはSQLを追加すると、term_idが自動で割り振られることを意味します。

実際エクスポートファイルをみると、term_idの並びをみると3,2,4と並んでいます。このままエクスポートすると

term_idが行の並び順に1,2,3と変わってしまって。3,2,4が書き換えられてしまいます。

エクスポートファイルのterm_idが無視されます。

3:dammy3

2:dammy2

4:dammy4

1:dammy3

2:dammy2

3:dammy4


	<wp:category>
		<wp:term_id>3</wp:term_id>
		<wp:category_nicename><![CDATA[dammy3]]></wp:category_nicename>
		<wp:category_parent><![CDATA[]]></wp:category_parent>
		<wp:cat_name><![CDATA[dammy2]]></wp:cat_name>
	</wp:category>
	<wp:category>
		<wp:term_id>2</wp:term_id>
		<wp:category_nicename><![CDATA[dammy2]]></wp:category_nicename>
		<wp:category_parent><![CDATA[]]></wp:category_parent>
		<wp:cat_name><![CDATA[dammy2]]></wp:cat_name>
	</wp:category>
	<wp:category>
		<wp:term_id>4</wp:term_id>
		<wp:category_nicename><![CDATA[dammy4]]></wp:category_nicename>
		<wp:category_parent><![CDATA[]]></wp:category_parent>
		<wp:cat_name><![CDATA[dammy4]]></wp:cat_name>
	</wp:category>

記事などのデータでは、categoryという項目に3,2,4と記録されたままなので異なる値になってしまいます。外部プラグインなどで使用している場合。これを変更してくれません。

なのでこれを直すのにエクスポートファイルを直接編集して<wp:category></wp:category>単位で並び替えします。

また、削除したものは欠番になっているため、削除したデータ分を追加する必要があります・・

1:欠番1手動追加

2:dammy2

3:dammy3

4:dammy4

上記にしないと、dammy2のterm_idが1になってしまいます。


	<wp:category>
		<wp:term_id>1</wp:term_id>
		<wp:category_nicename><![CDATA[欠番1手動追加]]></wp:category_nicename>
		<wp:category_parent><![CDATA[]]></wp:category_parent>
		<wp:cat_name><![CDATA[欠番1手動追加]]></wp:cat_name>
	</wp:category>
	<wp:category>
		<wp:term_id>2</wp:term_id>
		<wp:category_nicename><![CDATA[dammy2]]></wp:category_nicename>
		<wp:category_parent><![CDATA[]]></wp:category_parent>
		<wp:cat_name><![CDATA[dammy2]]></wp:cat_name>
	</wp:category>
	<wp:category>
		<wp:term_id>3</wp:term_id>
		<wp:category_nicename><![CDATA[dammy3]]></wp:category_nicename>
		<wp:category_parent><![CDATA[]]></wp:category_parent>
		<wp:cat_name><![CDATA[dammy2]]></wp:cat_name>
	</wp:category>
	<wp:category>
		<wp:term_id>4</wp:term_id>
		<wp:category_nicename><![CDATA[dammy4]]></wp:category_nicename>
		<wp:category_parent><![CDATA[]]></wp:category_parent>
		<wp:cat_name><![CDATA[dammy4]]></wp:cat_name>
	</wp:category>

次に、新しいサーバーにFTPでバックアップした、ファイルをアップロードして、wp-config.phpをリネームしておきます。もしくはアップロードしないでください。

上記でインストールを行います。事前にデータベースを作成して、SQLアカウント・パスワードを準備します。

インストール後、phpmyadmin等で下記のテーブルを空にします。

wordpress01

ここで空にすることで、term_idが初期化されます。空にせず、WP管理画面で削除するだけでは、最後に採番されたterm_idが保持されているので番号がずれます。

バックアップファイルのインポートですが、レンタルサーバー、共用サーバーなどの場合、画像、記事など多い場合タイムアウトになってしまうので

php ini等で下記の設定を調整する必要があります。この辺りの数値はレンタルサーバーなどは上限が設定されているため。確認してそのサーバの最大値を設定してください。

memory_limit

max_execution_time

max_input_time

post_max_size

upload_max_filesize

php-fpmで動作している場合、別途設定が必要です。

インポート後は、デフォルトの値に戻しておいてください。サーバーに付属のphpmyadminでも同様で、大きなファイルをインポート・エクスポートする場合は設定が必要です。

ここでタイムアウトする場合は、別サーバーを検討する必要があります。レンタルサーバー、共用サーバーでは、タイムアウトでできない場合が多いです。

Wordpressの場合、画像を復元するのに、すごく時間がかかるので、画像が多い場合はレンタルサーバーでは、できないことが多いです。

上記が完了後、標準インポート・エクスポートでは、外部プラグインの設定などは復元できないものもあるため、

外部プラグインにインポート・エクスポート機能があれば、そちらでバックアップして復元します。

機能がない場合、手動で旧サイトと比べながら設定します。ライセンキーなどある場合。***でみれないケースがあるためわからない場合・・・SQLダンプが一番です。

同一ドメインでの引っ越しだと、旧サイトを止めておかないといけないので、考慮が必要です。設定画面のキャプチャーを取るなど・・

別ドメインで事前に用意しておき、置換プラグインでドメイン切り替えできますが、外部プラグイン等によってできない場合もありますので注意が必要です。

SQLダンプの場合

旧サイトのSQLアカウントで新サイトも同じアカウントで作成しておきます。できない場合は、wp-config.phpにSQL情報があるのでそちらを変更して、移転サーバーへ移します。

同様に、バックアップしたWordpressファイルもすべてアップします。

同一ドメインの場合

ドキュメントルート /var/wwwというパスを旧サイトと合わせて、WEBサーバーを構築して、SQLダンプをインポートするか。

ドキュメントルートが異なる場合、SQLダンプファイルで一度、テキストエディターで旧サイトのドキュメントルートを検索してなければそのままで大丈夫です。

SQLダンプをインポートしてDNSを切り替えて完了です。

異なるドメインの場合

Wordpressの場合、ドメインが変わる場合SQLにドメインが記載されているため、置き換えが必要です。

SQLダンプファイルをテキストエディターでhttp://旧サイトドメインで検索して、新サイトドメインに置換します。

ドキュメントルートも同様です。

外部プラグインを導入している場合、ドキュメントルートが記憶されていたりするので、ドメイン、ドキュメントルートを検索すると良いです。

正常動作後は、置き換え外部プラグインがあるのでそちらで作業しても問題ありません

プラグインがインストールできない場合

移行後、外部プラグインの場合、古いバージョンのWordpressの場合、使用していたプラグインを有効にしようとしたとき、バージョンチェックが入りインストールできないとエラーを吐くときがあります。

旧サーバーで動作していた環境そのままでも、インストール時チェックでインストールできないプラグインがあります。

その場合

そのエラーチェックを一時的に、チェックを外します。

wp-admin\includes\plugin.php

下記の箇所に


	} elseif ( ! $plugin_data['wp_compatible'] ) {
		return new WP_Error(
			'plugin_wp_incompatible',
			sprintf(
				/* translators: %s: plugin name */
				__( 'Error: Current WordPress version does not meet minimum requirements for %s.' ),
				$plugin_data['Name']
			)
		);
	}

return true;を入れます。


	} elseif ( ! $plugin_data['wp_compatible'] ) {
		return true;
		return new WP_Error(
			'plugin_wp_incompatible',
			sprintf(
				/* translators: %s: plugin name */
				__( 'Error: Current WordPress version does not meet minimum requirements for %s.' ),
				$plugin_data['Name']
			)
		);
	}

インストール後、return true;を外します。

これでインストールができます。

インストール後、全動作、正常確認後、各プラグインを確認して、新バージョンがある場合、Wordpressの対応バージョンを確認して、バージョンを上げます。

その後、Wordpressが各プラグインの、動作バージョン条件に合っていればWordpressのバージョンアップをします。

当然この場合も、SQLダンプ、Wordpressシステムファイル、wp-content内容のバックアップを取っておきましょう。

プラグイン新規インストール時

WordPressでプラグインをインストールしようとしたらFTP接続アカウントを要求された。

一瞬バックドアかと・・・ネットでぐぐると、Webサーバの実行しているユーザーと、FTPで転送するの所有者が違うと出るらしいが、要はwp-contentに書き込み権限がないとか

これは、ワードプレス側のサーバー情報でなく、設置しているサーバーのFTPアカウントをいれないといけないらしい・・こわいです・・けど・・FTPアカウントどっか飛ばされない?

なんかハックされて仕込まれてたとき、パスワードとか入れちゃうと.....

FTPアカウントでやるのであれば、特定のフォルダーだけのアカウントつくるとか接続IP制限とかしたいところですが・・・

ネットでぐぐると、パスワードは保存されないらしい。こわいのでやってませんが・・

wordpress02

FTPアカウント入れずに、これを回避するには、wp-config.phpの先頭に下記を追加、最後の方では動作しません。

もしくは、wp-content配下のプラグインとか、パーミッションを707とか、サーバーに合わせて書き込み権限つければよいようです。


define('FS_METHOD', 'direct');

さいごに

標準インポート・エクスポートだと、記載した通り、うまくいかないことがおおいので、時間も取られてしまうので

外部プラグインがあると、SQLダンプのが楽ですね。

最近はレンタルサーバーでもphpmyadminが使えるので、エクスポート&インポートがだれでもできるようになりましたね・・

関連記事