今回は、プラグインを使わずに手動でWordPressサイトを同一サーバー内のサブドメインへ移行(コピー)するテストを行いました。
実施環境はエックスサーバーです。
移行先のドメインは、エックスサーバーのドメイン設定時にディレクトリへ生成される、デフォルトのファイルのみが置かれた完全な初期状態からのスタートです。
example.comdefault_page.pngindex.html.user.ini
※default_page.pngとindex.htmlは作業開始直後削除しました。
今回のテストはあくまで個人利用のサイトで行っております。
本記事の内容を参考に作業される場合は、自己責任にてお願いいたします。
目次
移行元データのバックアップ
まずは移行元から以下の2種類のデータバックアップを取得しました。
- ファイル一式: FTP経由でドメイン直下の全ファイルをダウンロード。
- データベース: phpMyAdminでSQL形式のダンプファイルをエクスポート。
移行先の環境準備
移行先環境用のデータベースを新規作成しました。
移行先環境用のデータベース名、アクセスできるユーザー名、パスワードを控え、後ほどwp-config.phpを書き換える準備をしておきます。
ファイルのアップロードと設定変更
- FTP転送: 移行元のファイルを以降先にアップロードします。
- 設定ファイル:
wp-config.phpは新しいデータベース情報に書き換えてから反映。 .htaccessも移行元のものをそのままアップロードしました。.user.iniは移行先にあったものをそのまま維持しました。
データベースのインポート
移行元のデータベースダンプファイルを、移行先のデータベースにインポートしました。
しかし、エラーが発生してしまいました。
エラーの影響により、移行元のテーブル数が20であったにもかかわらず、移行先では16しか反映されませんでした。
phpMyAdmin上で表示されたエラーメッセージ
CREATE DATABASE IF NOT EXISTS 新環境のデータベース名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MySQL のメッセージ:
#1044 - ユーザー ‘移行先のデータベースのユーザー名’@‘XXXXX’ の '新環境のデータベース名' へのアクセスを拒否します
SQLファイルをエディタで開いて見たところ、以下の記述が影響していることがわかったので、この部分を一旦削除しました。
CREATE DATABASE IF NOT EXISTS 新環境のデータベース名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE 新環境のデータベース名;
無事にエラーが解消し、インポートは成功しました。
テーブル数が一致することも確認しました。
(正直このやり方で正しいのか疑問ですが)
その後、データベース内の古いドメインを「Search and Replace for WordPress Databases」を利用して、新ドメインに一括置換しました。
最終的には無事移行先のWordPress環境にログインができました。
ログイン後はパーマリンクをリフレッシュしています。
まとめと所感
「ファイルが先か、データベースが先か」という順序の悩みはありましたが、最終的にはサイトが表示され、SSLやログイン状態も問題ないことを確認できました。
手動での作業は手順が多く、たどたどしくなりましたが、構造を理解する良い経験になりました。
定期的にこの複製作業の練習は行いたいです。