ローカルでwordpressの開発をして、無料のレンタルサーバーに移行するときに苦戦したので、移行の手順をメモしときます。
環境
- macOS High Sierra
- ローカルのwordpress環境があります
- xdomainの無料レンタルサーバの環境をこれから構築します
※この情報は 2018/05/09 現在の情報です。
手順
- xdomainのアカウントを作る
- レンタルサーバ上で新たにデータベースを作成する
- ローカルのwordpressとデータベースを他の場所へコピーする
-
search replace DB
をローカルで実行し、文字列を置換 - ローカルのデータベースをエクスポートする
- エクスポートしたデータベースの内容を修正
- レンタルサーバにデータベースをインポート
- ローカルのwp-configを修正する
- FileZillaでローカルのwordpressのファイル群をアップロード
個々のステップはそこまで難しいわけではないので、1つずつ確実にやっていきましょう。
1. xdomainのアカウントを作る
まず、xdomainのアカウントを以下から作成します。
無料レンタルサーバー新規お申し込み | ドメイン取得&無料レンタルサーバー Xdomain(エックスドメイン)
アカウントを作ってログインできたら、左側の項目の「無料レンタルサーバー」をクリックします。
次に、サーバーIDを入力します。サーバーIDはサイトのドメインの一部になるので、よく考えて付けましょう。
サーバーIDを「hogehoge」とした場合、初期ドメインは、「hogehoge.php.xdomain.jp」のようになります。
サーバーIDについては以下参照。
会員IDとサーバーID
サーバーIDの設定が終わって、再び左側のメニューの「無料レンタルサーバー」をクリックすると、以下のような画面に変わっていると思います。
3つ選択肢がありますが、今回はローカルのwordpressをレンタルサーバーに持ってくるので、真ん中の項目の「PHP・MySQLサーバー」を使います。
「利用を開始する」を押すと、初期設定が完了します。もう一度「無料レンタルサーバー」に戻ると、「管理パネルログイン」というボタンがでできますので、それをクリックしましょう。
2. レンタルサーバ上で新たにデータベースを作成する
管理パネルにログインできましたら、新規にデータベースを作成します。
以下の画面が出ていると思うので、「データベース」の項目の「MySQLの設定」をクリックします。
MySQLの追加
次に上のメニューから、「MySQLの追加」を選択して、新しいデータベースをサーバ上に作ります。
※ データベース名についてですが、アンダーバーは使用できないようですので、英数字だけで構成するようにしましょう。
文字コードはUTF8で構いません。
MySQLユーザーの追加
続いてMySQLにログインできるユーザーを追加します。上のメニューの「MySQLユーザー設定」をクリックして、任意のユーザー名を入力しましょう。
※データベースユーザ名は合計16文字以内
データベース名などをメモしておく
ここで設定したものは、後でwp-config
を編集する時に必要となりますので、以下の画面から確認してどこかにメモしておきましょう。
メモが必要なもの
- データベース名
- データベースユーザー名
- データベースユーザーのパスワード
- MySQLのホスト名
※データベース名はサーバーIDとアンダーバーを含めた文字列ですので注意してください。ユーザー名も同様です。
3. 先にローカルのwordpressとデータベースを他の場所へコピーする。
次はローカルでの作業です。
データのバックアップも含めて、wordpressとデータベースをコピーしていきます。
ローカルのwordpressを別の場所へコピー
まず、wordpressのデータを、MAMPのhtdocs内の他の場所にフォルダごとコピーしましょう。なぜMAMPのhtdocsn内かというと、次のステップでphpのスクリプトを実行する必要があるためです。
また、後からwp-config
も書き換えるので、間違えて元々のファイルを編集しないように違う場所にコピーしましょう。
ローカルのデータベースをphpmyadminでコピー
localhost:8888/phpmyadmin
のように、phpmyadminにアクセスして、データベースを複製しておきましょう。
まず、以下の画面で、左側の項目からコピーするデータベースを選択します。
選択したら、上の項目の「操作」を選択します。
次に、下の方にある「copy database to」でデータベースを複製します。ここで注意したいのが以下の2点です。
- 「構造とデータ」の両方をコピーする必要がある
- データベース名は、レンタルサーバで新規に作ったデータベース名と同じにする
4. search replace DB
をローカルで実行し、文字列を置換
次に、localhost:ポート番号
という文字列をレンタルサーバーのドメイン名に置換します。これをしないとページが表示されなくなってしまいます。
データベース内の文字列を正しく置換するために、Search Replace DBというphpのスクリプトを使います。
まずSearch Replace DBをダウンロードしてください。
ダウンロードしたら、wordpressのフォルダ内に入れます。
そして以下のようなURLにブラウザからアクセスします。
http://localhost:ポート番号/(フォルダ名)/Search-Replace-DB-master/
すると以下のような画面が出てきます。データベースユーザーやパスワードはすでに表示されていると思います。
注意点として、置換するデータベースはコピーしたデータベース名を入力してください。恐らく何も変更しないと元のデータベースが書き換えられてしまいます。
次に置換する文字列ですが、まず、「localhost:ポート番号/(フォルダ名)」から「レンタルサーバーのドメイン名」に置換します。
ドメイン名の確認方法は、「ドメイン設定」から以下のように確認できます。
ここで注意ですが、http://
と末尾のスラッシュはつけないでください。
以下参照です。
WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう
入力ができたら、まず「dry run」で試しに実行してから「live run」で本当に書き換えをします。(live runをやってしまったら元には戻せません。)
live runが実行し終われば、置換が完了です。
5. ローカルのデータベースをエクスポートする
続いて、編集したデータベースをエクスポートしましょう。phpmyadminから、コピーしたデータベースを選択してそれから上のメニューのエクスポートをクリックします。
するとエクスポートの設定の画面が開かれます。ここではエクスポートの設定を細かく指定したいので、Export Methodのところは、「詳細」を選択します。
出力のところは、「出力をファイルに保存する」を選択してください。
次の設定が最も注意するべき設定です!!
「他のデータベースシステムまたは古い MySQL サーバとの互換性:」のところを「NONE」から「MYSQL40」に変更してください。これをしないと、レンタルサーバーのデータベースにインポートしようとした時に、「Unknown collation: 'utf8_unicode_ci'」のようなエラーが出ます。
その他の設定はこのような感じです。
あとは一番下の「実行」を押せば、無事エクスポートできたと思います。
6. エクスポートしたデータベースの内容を修正
エクスポートしたデータベースのこのままアップロードしてもいいのですが、恐らく以下のエラーになると思います。
このエラーを回避するために、エクスポートしたデータベース中の「utf8mb4」という文字列を「utf8」に置換する必要があります。
エディタもしくはプログラムでその文字列を一括置換してあげましょう。
私はrubyを使って置換しました。(面倒だったので一行で書きました。。)
File.write("書き込むファイル.sql",File.read("読み込むファイル.sql").gsub("utf8mb4","utf8"))
ちなみにアップロードするときはファイル名はあまり考慮しなくていいので、適当な名前のファイルにしても大丈夫です。
7. レンタルサーバにデータベースをインポート
データベースの設定から、phpmyadminを開きます。
次にデータベースを選択します。先ほどレンタルサーバー上で作ったデータベースをクリックします。
(※もしも、同じMySQLホスト名を複数使っている場合は、一回phpmyadminをログアウトする必要があります。)
次に、上のメニューから「インポート」を選択します。
次の画面に行ったら、インポートするファイルを選択して、実行をクリックします。
ここで注意したいのは、SQL互換モードをMySQL40にすることです!
これでインポートすれば、正常にインポートされるはずです。
8. ローカルのwp-configを修正する
wordpressからMySQLにアクセスできるように、ローカルのwp-config.php
を編集します。
データベース名などをメモしておく
のところでメモした4つの項目を以下のところに入れていきましょう。
/** WordPress のためのデータベース名 */
define('DB_NAME', 'xxxx_yyy');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'xxx_zzzz');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'oooooooo');
/** MySQL のホスト名 */
define('DB_HOST', 'mysql1.php.xdomain.ne.jp');
9. FileZillaでローカルのwordpressのファイル群をアップロード
最後に、ローカルのwordpressをレンタルサーバーにアップロードします。
レンタルサーバーのFTPの情報を確認する
レンタルサーバー内の左側のメニューにある、「FTPアカウント設定」をクリックします。
ここで、FTPにアクセスするために、FTPパスワードを設定する必要があるので、「編集」のボタンをクリックしてFTPパスワードを設定してください。
なお、次のステップで以下の3つの情報を使うので、メモしておきましょう。
- FTPホスト
- FTPユーザー(アカウント名)
- FTPパスワード
FileZillaのインストールと接続設定
パスワードが設定できたら、次は、ファイルを転送するためにFileZillaをローカルにインストールします。
以下のページからダウンロードしてください。
FileZilla - The free FTP solution
FileZillaをインストールして起動します。
次に、「ファイル」>「サイトマネージャー」をクリックするとウィンドウが表示されます。
左の方にあるボタンの「新しいサイト」をクリックして、接続するFTPサーバーの情報を入力していきます。前のステップでメモした3つの項目をここに入力していきましょう。
また、「ログオンの種類」は「通常」を選択しましょう。
これでレンタルサーバーに接続できたと思います。
ローカルのwordpressをアップロード
アップロードする前に、レンタルサーバー内にある「default_page.png」と「index.html」を削除しましょう。この操作はFileZilla内でできます。
あとはローカルのwordpressをレンタルサーバー内にコピーしましょう。ローカルのwordpressのファイルを選択して、レンタルサーバーの方へドラック&ドロップします。ここで注意したいのが、「search replace DB master」フォルダは絶対にアップロードしないということです。これをアップロードしてしまうと、他の人にデータベースの内容を書き換えられてしまう恐れがあるので、絶対にアップロードしないように気をつけましょう。
(ちなみに.DS_Store
もアップロードする必要はないですね。)
これでデータの移行が全て完了です!
ページを表示してみる
ページのドメインは、先ほど説明したように、ドメインの設定から見れます。
このドメインにアクセスすれば、正しくページが表示されるはずです!
参考
- WordPress移転(移行)手順 | レンタルサーバー【エックスサーバー】
- 無料レンタルサーバー新規お申し込み | ドメイン取得&無料レンタルサーバー Xdomain(エックスドメイン)
- 会員IDとサーバーID
- WordPressを丸ごとコピーして同じサーバ内で同一サイトを作る手順
- WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう
- Unknown collation: 'utf8mb4_unicode_ci' のエラーの原因
- FileZilla の使い方 - WordPress Codex 日本語版
- WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう
あとがき
色々とググったり試行錯誤してやっとできました。上手くページが表示された時は、よっしゃ!って感じで嬉しかったです。次は、dockerでwordpressを使うのとかやってみたいです。