WP-CLIをつかってWordPressのDBをコマンド1回で別のサーバーに引っ越す

そういえばあまり紹介されたことがない技なので紹介します。

これを使用するとコマンド一発でDBを引っ越せるのでステージングから本番サーバーへの引っ越しにすごい威力を発揮すると思います。

エイリアスを設定する

まずWP-CLIでリモートサーバーに接続するためのエイリアスを設定します。

以下の要領で、~/.wp-cli/config.yml に書いてください。

@staging:
  ssh: user@staging.example.com/var/www/html
@production:
  ssh: user@example.com/var/www/html

こうすることで、リモートサーバー上に WP-CLI がインストールされていれば、以下のように SSH 経由でコマンドを実行することができます。

$ wp @staging plugin list

うまくいかない場合は、上述のファイルをよーく見てフォーマットがまちがってないかを確認してください。

あと、ローカル、リモートのそれぞれで wp --info を実行して変なエラーが出てないかも確認しましょう。

あっ、あとすべての WP-CLI を最新版にアップデートしましょう。

$ wp cli update

以上で準備は完了です。

データベースを引っ越す

データベースを引っ越すのは、search-replace というコマンドと db import というコマンドをパイプでつなぐ感じです。

いちいち打つのはめんどくさいので、多くの場合、Git とか CI ツールとかで自動的に蹴っ飛ばすか、シェルスクリプトに書いとくといいでしょう。

(いちいち手で打つのはヒューマンエラーの原因なので2回以上やるときは自動化するべきです!)

コマンドは長いですがよく見ればそれほど難しくありません。

$ wp @staging search-replace \
http://staging.example.com https://example.com \
--export --skip-columns=guid | wp @production db import -

エイリアスはめんどくさいな~という方は、–ssh というオプションを使用すれば同じことができます。

ローカル環境から一発で引っ越すには以下のような感じです。

$ wp search-replace http://127.0.0.1 https://example.com \
--export --skip-columns=guid | wp @production db import -