WordPressのドメイン変更とサーバ変更の備忘録

zomです。ちょっと時間が空いてしまいました…。 先日の記事でも書きましたが、この度、さくらのVPSのプラン変更(=サーバ変更)にともなってドメインも取得しました。 いぇいいぇい。 ってなもんで、移転時のファイル群はバージョン管理なりtarballなりでほいっと任せるとして WordpressはDBをつかっているためそうはいかなかったので手順をいつもどおりメモっておきます。

まず、旧サーバのWordpressDBのバックアップをとっておきます。 Googleでやり方を検索するとPhpMyAdminを使ったやり方はよく出てくるのですが、dumpして~というやり方はあまり載ってないんですねー。あんまり一般的でないからですかね?

MySQLのバックアップに使うのはmysqldumpコマンド。 たぶんMySQLがインストールされていれば使えるはずです。 ちなみにリンク先は5.1ですが作業はMySQL5.5で行いました。オプション無しの動作も差異はないと思われるので問題はないかと。

当初、MySQLのユーザごとバックアップをしてしまえばいいんじゃね?とか思っていたのですが、それでやってみたところパスワード情報辺りが正常に移行できず、パスワードの改変とかなんかいろいろやった結果、一度初期化しようとしてMySQLの設定が保存されているディレクトリをrmしようとしたらやってはいけないところでrmしてしまいOS再インストールをした、なんていい経験でした。

結局、WordpressのDBだけ移行してユーザ情報はまた1から作りなおすことにしました。まー、SQLの運用・管理の勉強になると思えば…。 だいぶ話が横に逸れましたが本題。 コマンドは至って簡単。

mysqldump --default-character-set=binary --user=ユーザ名 -p DB名 > 出力先ファイルパス

こんなんです。 ドキュメントをみれば分かるのですが、mysqldumpコマンドにはすごい数のオプションがあります。 今回自分はdefault-character-setしか使用しませんでした(一応userもオプションか)。呼んで字のごとく文字コードを指定するのですが、binaryと指定することで文字コードの影響を受けずにバックアップ/リストアできるようになるそうです。新旧サーバのいずれも同じ文字コードだったら必要のないオプションだと思われます。参考にした本に書いてあったので、とりあえずお試しがてら付けたオプションだったりします。その参考にしたという本がコチラ。

こちらの本は5.5にも対応しているってことで、このバックアップのためだけに買ってしまいました笑 いや、MySQLとかDBの参考書一冊くらいは持っておきたいな、と以前から思っていたのでタイミングが良かったんです。たぶん。

それから、リダイレクトしてファイルに出力していますが、これやらないと標準出力されてコンソール上にダーっってなります。ダーっって。

で、出力されたファイルをFTPなりSCPなり新サーバに送ります。 で、新サーバ側でdumpしたファイルを今度は逆に

mysql --default-character-set=binary --user=ユーザ名 -p DB名 < 入力元ファイルパス

と、mysqlコマンドでリストアしてやります。 たったこれだけです。いぇいいぇい。 mysqlコマンドを使っている辺りでお気付きだと思いますが、dumpされたファイルは単なる(?)SQLのファイルなんですよね。なのでこんなにも簡単。ちなみにdumpしたときに文字コードの指定をした場合、リストアするときも指定してあげないとダメです。

あとはユーザをWordpressの環境設定のページを見つつ再度作ればデータの移行は完了!

と思ったのですがダメでした。

何がダメかというと、記事内のリンク先が旧サーバのままだったり、あちこち旧サーバへのリンクが残っているんです。画像パスとか。 そう、普通に記事の中身とかホームへのURLとか絶対パスなので修正してやらないといけないわけです。あとカテゴリとかタグとかのリンクも?らしいです。(ちょっと記憶があやふや。) 記事とかひとつひとつ手作業で修正するのは死ぬほど面倒なのでSQLで一括更新させてやります。 ちなみにこれはドメインがが変わってない場合は必要のない作業です。

こちらのページを参考に自分がやったやつだけ引用すると

UPDATE
    wp_options
SET
    option_value = replace(option_value, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com')
WHERE
    option_name = 'home' OR option_name = 'siteurl';
UPDATE
    wp_posts
SET
    guid = replace(guid, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com');
UPDATE
    wp_posts
SET
    post_content = replace(post_content, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com');
UPDATE
    wp_postmeta
SET
    meta_value = replace(meta_value, 'http://www.oldsiteurl.com','http://www.newsiteurl.com');

これだけです。 それに加え、wp-config.phpファイル内のWP_HOMEの値も書き換えてあげれば移行&ドメイン変更作業は完了です。

いやー、これだけで一仕事した感がありました。 しかもMySQLのユーザ名を間違えて作成したため真っ白な画面が表示され、1~2時間原因を調べるというアホなこともしてました。 その原因が分からず四苦八苦していたら 「Wordpressデバッグモードにすればいい」という助言を得、原因を突き止めることが出来ました。 デバッグにする方法は上に同じくwp-config.phpにあるWP_DEBUGをtrueにするだけ。 こうするとエラーメッセージが画面に表示されます。いやー、アホでした。

そんなこんなで前回の記事と併せてこれで移行はたぶん、今後はすんなりできるようになったかと。 ただしOSとかプラットホームが同じ場合に限る。まだまだ力量不足です。無念。