Spica*

プログラミングの話。

CLIでのWordpressのドメイン移行方法

Wordpressのお引っ越しについて

Wordpressにおいて、下記のようにお引っ越しをすることがよくあります。

  • サイトを引っ越しする際
  • ローカルで動かしていたサーバをリモートへデプロイする際

ただ、このように別ドメインへ移行する際、

  • ファイルを全てそっくりそのままコピー
  • 移行元のDBのデータをエクスポートして、移行先でインポート

という手順を踏んでも、移行先でそのまま動作しません。これは、ドメイン名がデータベースの中に入り込んでいるせいなのですが、この問題自体は検索すると詳しい手順がたくさんヒットします

殆どの記事はよく出来ていて困らないと思うのですが、SSH使える人であればもう少し簡単に移行出来るのになと思ったので、メモしておきます。

なぜこの記事を書いたか

移行方法を検索するとよく出てくるのは、こちらのツールを使用する方法です。

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

検索した時に出てくる方法だと、このツールをWebから見れるようにデプロイして移行する方法が多く取られているようにみえました。しかしこのツール、コマンドラインのインターフェースも用意されているので、僕的にはその方がメリットあるなと思ったので書き残しておこうかなと思った次第です。

メリットあると思った理由は以下の通り。

  • 誰でもアクセスできる場所にさらされる期間がないため、セキュリティリスクが低い
  • cliは文字のため、どのような引数を指定して移行したのかをまるごと記録として残せる
  • ダウンロードしてすぐに実行出来るので、煩雑さがない

お引っ越し方法

  • 先程のツール のContributionsセクションに書かれてある、 GitHubのURL からアクセス
    • アクセスする前に、きちんと Download Search Replace DB セクションの内容は読んでおきましょう。
    • 2017/10/16現在、emailアドレス入力→ダウンロードした時と、git-cloneした時のものの内容は同じようです。
  • 移行先のサーバへSSHで接続し、 git clone https://github.com/interconnectit/Search-Replace-DB.git する
    • git-cloneする場所はどこでもいいです。DocumentRoot以下は避けましょう
  • cd Search-Replace-DB する
  • move.sh 等の名前でファイルを作成し、その中に下記のスクリプトを入力
php srdb.cli.php \
  --host localhost \
  --name <データベース名> \
  --user <ユーザー名> \
  --pass <パスワード> \
  --search "<移行元ドメイン>" \
  --replace "<移行先ドメイン>" \
  --dry-run

引数の詳細は https://github.com/interconnectit/Search-Replace-DB#cli-script を確認してください。

  • . ./move.sh を実行
    • --dry-run がついているので、実際にはまだ実行されません
    • ここでどれだけのクエリが実行されるかを確認できる
  • move.sh を再度開き、 --dry-run を削除
  • 再度 . ./move.sh を実行
    • 実際にクエリが実行されます
  • 移行先ドメインへアクセスして動作しているかを確認

その他

  • PHP 7.1.8 (cli) を使って移行したところ、PHP Noticeがでました。が、移行は正常にできました。 (Issueはこちら)
Notice: A non well formed numeric value encountered in /path/to/Search-Replace-DB/srdb.cli.php on line 202

Call Stack:
    0.0012     387272   1. {main}() /path/to/Search-Replace-DB/srdb.cli.php:0
    0.0050     526432   2. icit_srdb_cli->__construct() /path/to/Search-Replace-DB/srdb.cli.php:227
    0.0092     544968   3. icit_srdb_cli->replacer() /path/to/Search-Replace-DB/srdb.class.php:337
    0.5026     642544   4. icit_srdb_cli->log() /path/to/Search-Replace-DB/srdb.class.php:995