11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPressをマルチドメイン化する!!

Last updated at Posted at 2015-06-15

この記事は?

マルチドメイン化したWordpressのドメイン名(URL)の変更に四苦八苦した証跡ですw

きっかけ

マルチドメイン化したWordpressで動いている、1つ目のブログのドメイン名がIPになっていて気に喰わない。
このままなのも癪なので変更しようとしたら、添付の画像の通りグレーアウトしていて変更できず。
Wordpressマルチドメイン化の闇.png

ちょっと調べてみたら、

上記のページに

注: 以下の手順はシングルインストールの WordPress 向けのものです。WordPress マルチサイトをお使いの場合は、データベースを手動で編集する必要があります。

…まじかよ。知らなかったよ…。もっとデカデカと書いておいて欲しい(´・ω・`)

ダメ元でマルチドメイン→シングル化し、URL変更→再度マルチドメイン化をトライしたところ、下記の表記を確認。

「既存のネットワークがあります、ネットワークのデータベースのテーブルを空にするか削除してください。」

http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?Wordpress
調べてみたら、

「既存のネットワークがあります、ネットワークのデータベースのテーブルを空にするか削除してください。」 となった場合は以下のレコードを削除する
*_blogs, *_registration_log, *_site, *_sitemeta, *_blogs_versions, *_signups (例: drop table wp_blogs;)

とある。

ああ。どうやら、上記のテーブルを削除すればいけるようだ。

ここで折角なので、レコード削除せずにDB修正で乗り切ることにする。

その前に、関連テーブル調査。

http://www.doya-doya.com/word-press/2011/11/22/8274#c2
ふむふむ、どうやら「domain」ってカラムにサイトのドメイン名を書いてあるらしい…。

mysql> USE information_schema;
mysql> select table_name, column_name from information_schema.columns where column_name like '%domain';
+---------------+-------------+
| table_name    | column_name |
+---------------+-------------+
| wp_blogs      | domain      |
| wp_signups    | domain      |
| wp_site       | domain      |
+---------------+-------------+
6 rows in set (0.01 sec)

mysql> 

上記のテーブルの中身を見てみると、マルチドメイン化して使っている2つのURLが入っていた。


mysql>USE <wordpressで使用しているdb> ;
mysql> SELECT * FROM wp_blogs ;
+---------+---------+------------------+------+---------------------+---------------------+--------+----------+--------+------+---------+---------+
| blog_id | site_id | domain           | path | registered          | last_updated        | public | archived | mature | spam | deleted | lang_id |
+---------+---------+------------------+------+---------------------+---------------------+--------+----------+--------+------+---------+---------+
|       1 |       1 | <変更前のIP>     | /     | 2015-03-23 03:24:16 | 2015-06-12 19:47:29 |      1 |        0 |      0 |    0 |       0 |       0 |
|       2 |       1 | test.example.com | /    | 2015-03-30 06:24:39 | 2015-06-12 19:46:18 |      1 |        0 |      0 |    0 |       0 |       0 |
+---------+---------+------------------+------+---------------------+---------------------+--------+----------+--------+------+---------+---------+

なんか「domain」カラムにあるIPをドメイン名に置換してやれば、行けそうな気がするぞ…!!

というわけで、「wp_blogs」、「wp_signups」、「wp_site」テーブルにある「domain」カラムを書き換えることにする。

その前にバックアップ。

切り戻しが楽なように、テーブルごとコピーしとく。

mysql>CREATE TABLE wp_blogs_bk LIKE wp_blogs ;
mysql>INSERT INFTO wp_blogs_bk SELECT * FROM wp_blogs;
mysql>
mysql>CREATE TABLE wp_blogs_bk LIKE wp_blogs ;
mysql>INSERT INFTO wp_blogs_bk SELECT * FROM wp_blogs;
mysql>
mysql>CREATE TABLE wp_blogs_bk LIKE wp_blogs ;
mysql>INSERT INFTO wp_blogs_bk SELECT * FROM wp_blogs;

念には念を入れて、dumpも取得。

# mysqldump --all-databases --events -u root -p > /root/all_dump.20150613
# mysqldump --databases <wordpressで使用しているdb名> -u root -p > /root/wp_dump.20150613

ドメイン名修正。

1件ずつ調べながらやるのは、流石に吐きそうになるので、師匠から教えてもらった技でまとめてUPDATE文を作成。


mysql> SET sql_mode='PIPES_AS_CONCAT' ;
mysql> SELECT 'UPDATE ' || TABLE_SCHEMA ||'.' || TABLE_NAME || ' SET domain = \'<変更したいドメイン名>\'' || ' WHERE domain = \'<変更前のドメイン名>\' ;' FROM information_schema.columns WHERE column_name like '%domain' AND TABLE_NAME NOT LIKE '%_bk';
+----------------------------------------------------------------------------------------------------------------------------------+
| 'UPDATE ' || TABLE_SCHEMA ||'.' || TABLE_NAME || ' SET domain = \'<変更したいドメイン名>\'' || ' WHERE domain = \'<変更前のドメイン名>\' ;' |
+----------------------------------------------------------------------------------------------------------------------------------+
| UPDATE <wordpressで使用しているdb>.wp_blogs SET domain = '<変更したいドメイン名>' WHERE domain = '<変更前のドメイン名>' ;             |
| UPDATE <wordpressで使用しているdb>.wp_signups SET domain = '<変更したいドメイン名>' WHERE domain = '<変更前のドメイン名>' ;           |
| UPDATE <wordpressで使用しているdb>.wp_site SET domain = '<変更したいドメイン名>' WHERE domain = '<変更前のドメイン名>' ;              |
+----------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.01 sec)
mysql> 

出来上がったUPDATE文をそのままコンソールで流す。

wp-config.phpの修正。

あとは、下記のサイトを参考に、wp-config.phpを修正すれば無事完了。
http://www.doya-doya.com/word-press/2011/11/22/8274#c2
http://snickerjp.blogspot.jp/2014/01/WordPress-MultiSite-Migration.html
http://seihiguchi.com/2012/10/moving-wordpress-multisite/
http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?Wordpress
http://wpdocs.osdn.jp/%E3%82%B5%E3%82%A4%E3%83%88_URL_%E3%81%AE%E5%A4%89%E6%9B%B4#wp-config.php_.E3.81.AE.E7.B7.A8.E9.9B.86

お疲れ様でした。
今のところ無事動いているけど、きっとこのやり方は邪道な気がするぞいw

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?