サーバー移行時にデーターベースのドメイン部分を書き換える方法(WordPress)

旧ドメインから新しいドメインへ、ローカル環境から本番環境、もしくは本番環境からローカルへ等色々と面倒なことが多いですよね。なにも考えないでそのまま全部アップロードしてしまうと画像などが参照している値がローカルテスト環境のままで画像が表示されなかったり、CSSが繁栄されなかったりと色々です。local-server-domain-errorちゃんと治す事ができれば以下の様にちゃんと表示れます。local-server-domain-error-fixed

普通に考え着くのがphpMyAdminでSQL文で「旧ドメイン」から「新ドメイン」へ一括変換すれば
いいと思うところでしょうが、ワードプレスにはシリアルデータというのが存在していて、下記のようにs:
から何文字というようになっています。

s:20:"www.TheOldDomain.com"

この場合、www.TheOldDomain.comというドメインは全部で20文字になる訳です。

しかし、普通にSQL文で文字列の置き換えをしただけだと、
<code>s:20:”www.MyNewDomain.com”</code>
では問題が起きます。なぜならば、www.MyNewDomain.comは19文字しかないからです。
従って、正しくは

s:19:"www.MyNewDomain.com"

というようにシリアルデータも書き直さなければなりません。

私がいつも使っている方法はinterconnect/it様のサイトで公開されている「DATABASE SEARCH AND REPLACE SCRIPT IN PHP」というスクリプトです。
新しいバージョンが公開されているので、それに合わしてこの記事を書いています。

まず初めに、
ここでの作業は全て「ローカル環境」から「本番環境」への移行という形で進めて行きます。自分の環境にあった方法で適せん置き換えてください。

当たり前ですが、一歩間違えればWordPressのサイトが再起不能になる可能性がある事をしていますので、全て自己責任で行ってください。もし、自分で行うのが不安であるならばウェブ系の開発者等を小一時間ほど雇って行ってください。

全てのデータ(FTP経由でのデータ及びMySQLのデータ)が手元にあり、本番環境へのアップロードも既に終了している事が前提です。

ここにたどり着く方々であれば問題なく解ってらっしゃると思いますが、念の為に下記に簡単に記します。

1.FTPで接続した先のデータは全てローカルにダウンロードし、本番環境へのアップロードする事

2.MySQLのデータはphpMyAdminでSQLデータを全てダウンロードし、本番環境のphpMyAdminで全てアップロードします。

To Do 1

「wp-config.php」のファイルの中身の

define('DB_NAME', 'データベース名');
define('DB_USER', 'ユーザー名');
define('DB_PASSWORD', 'パスワード');
define('DB_HOST', '接続ホスト');

の値を本番環境の値に変更しておきましょう。
理由として、上記サイトからダウンロードするスクリプトには自動的にこの値を抽出してくれる便利機能があることに加え、どちらにしろ自分で本番環境でWordPressを使えるようにするためには書き換えなければいけないからです。(もちろん、忘れていたとしても、自分でスクリプト内に記入するところがありますので問題ありません。)

To Do 2

DATABASE SEARCH AND REPLACE SCRIPT IN PHPへアクセスし、画面上部らへんのDOWNLOADをクリックしSearch-Replace-DB-master.zipというファイルをダウンロードしましょう。
ダウンロード後、Search-Replace-DB-master.zipファイルを解凍すると、「Search-Replace-DB-master」の中は以下の様なファイルが有ります。Search and Replace Database ver 3.1.0
フォルダー事FTP等で本番環境のルートディレクトリーにアップロードします。以下の様になればOK。

/Search-Replace-DB-master/composer.json
/Search-Replace-DB-master/index.php
/Search-Replace-DB-master/package.json
/Search-Replace-DB-master/README.md
/Search-Replace-DB-master/srdb.class.php
/Search-Replace-DB-master/srdb.cli.php
/Search-Replace-DB-master/srdb-tests/charset-test.php
/Search-Replace-DB-master/srdb-tests/DataSet.xml
/Search-Replace-DB-master/srdb-tests/DataSetGenerator.php
/Search-Replace-DB-master/srdb-tests/db.sql
/Search-Replace-DB-master/srdb-tests/SrdbTest.php
/wp-admin/
/wp-contents/
/wp-config.php

To Do 3

先ほどアップロードしたスクリプトのディレクトリーにアクセスして下さい。上記の通りであれば、
www.貴方のドメイン名.com/Search-Replace-DB-master/
でスクリプトが作動します。

アクセスすると下記のような画面が表示されます。Search and Replace Database ver 3.1.0

replaceの箇所にはローカル環境のWordPressへのURLを入力
withの箇所には本番環境のWordPressへのURLを入力してください。
上記の例では、
ローカル環境では、https://thejuraku.com/pc/というところにワードプレスがインストールされており、そこへアクセスするとワードプレスのサイトが表示される仕組みになっています。

databaseのセクションでは、
name、user、pass、host、portと全てwp-config.phpの中にかかれている通りです。ここら辺は既にwp-config.phpを本番環境の値に書き換えている場合は勝手に値が記入されていますので大丈夫ですが、もし、ローカル環境の値のままの場合は、本番環境の値への書き換えてください。

これで準備は整いました。

まずはテストしてみましょう。Search and Replace Database ver 3.1.0
「dry run」をクリックするとドメイン情報を書き換えずに実行します。CD-Rなどでの書き込みテストと一緒です。
「dry run」をクリックしてみると、上記の画面のように次々と表示されます。本来エラーは表示されないと思いますが、エラーが出た場合、そもそも、MySQL関連の何かしらが問題である可能性がありますので色々とチェックしてみてください。たまにサーバー環境によってはうまく意図したとおりに動作しない可能性があるみたいです。(エラーが出る場合に考えられること、MySQLのユーザー名等の情報が間違っている、本番環境のMySQLのバージョンが違う事による不都合等)

「dry run」で問題なく動作したら、「live run」をクリックして本番環境の値を全て置き換えてもらいましょう。

何もエラーが表示されなければ問題なく全て本番環境のものへと書き換えられています。

To Do 4

最後に一番したの「delete me」ボタンをクリックしてスクリプトを削除して貰いましょう。一応誰かが勝手にこのスクリプトにアクセスできてしまったら悪さをしてしまう可能性があるので。Search and Replace Database ver 3.1.0

Notes:
MySQLのバージョンが新しくなってきています。WordPressもそれに伴い絵文字などを普通に使えるようにアップデートしています。そのため、MySQLは自分のバージョンにあった内容にデータベース自体を勝手にアップデートしてしまいます。ローカル環境で問題なく動作していたのに、本番環境へMySQLのデータがアップロードできない事が起きていますので、それが原因です。その際、下記のようなエラーが表示されますので、本番環境のMySQLをアップデートする必要があります。

Unknown collation: 'utf8mb4_unicode_ci'

但し、レンタルサーバー屋によっては他のユーザーに問題を起こすことからデータベースをアップグレードしてくれないところもありますので、ローカル環境と本番環境での各種バージョン管理はしっかりとしましょう。

あ、気づきましたか?記事が少しでも役に立ったと思ったらシェアでもコメントでもしてみてください^^;
このページの短いURL: https://thejuraku.com/pc/?p=2164
100 queries in 0.813 seconds.