WordPress、SQLiteからMySQLへ移行します
上の記事にて記載の通り、私はロリポップ!エコノミープラン(DBが使えないけど100円)で
長らくこのサイトを運営してきました。
さほどの不満はなかったし(ま~、ちょっと表示が重いかな?くらい)、安くていいね~と思っていたんですが…
ですが、ついに、DBが欲しくなってしまい…ほしくなってしまい!
あと、なんか久しぶりに見てみたら上のプラグイン配布停止されてるし!!?
というわけで、意を決して「SQLite Integration」から「MySQL」へ乗り換えることにしたのでした。
この決断で、サイト運営はまた次のphaseへ!という気持ちです。
というわけで手順をメモしておきます。
あまり完璧じゃないので後々直したいところもあるのですが、まあ、どなたかのなんかのとっかかりにでもなれば。
※参考にされる際はいろいろと自己責任でお願いいたします!!
乗り換え先はXSERVER
選択した乗り換え先はXSERVERのX10プラン(月額900円)。
XSERVER
今の契約(月100円)と比べてしまうと、だいぶ高いです…ですが、ここ、この値段でSSDなんですよ!
SSDなら安いでしょこれは…!
SSDはSolid State Drive(ソリッドステートドライブ)のことで、
メリットはとにかく「HDDと比べて、読み書きがはやい!!」ってことです!
ちなみにエックスサーバーのX10プランなら、DB(MySQL)は50個まで使えます。そんな使うか?笑
まあ、ドメインとっとけば50個ワードプレスが管理できるってことだよ!
また、今ならサーバー契約でドメイン1個無料(サーバー契約中ずっと無料)のようです!
JETBOY
【JETBOYレンタルサーバー】も選択肢に入れていたんですが、僅差でXSERVERにしてみました。こちらは、SSDでも低いプランが安い(290~)のが魅力的ですね!
LOLIPOP!
もちろん、LOLIPOP!でプランアップグレードだけするという手もあります!!
実際の移行方法
さて、移行先が決まったら移行方法です。
基本的には、DBとして扱ってきた「SQLite」のファイルを、「MySQL」にinsertできるよう変換していく感じになります。
参考にしたのはこちら:
困ったらみんなgitが教えてくれる。
上記gitのページは英語なので、やり方を以下記載します。
※あと、書くのが面倒な割に需要はなさそうだなあと思ったので取り急ぎめっちゃざっくり書きます…
0.移行先に空のDBを作成しておく
私の場合はXSERVERです。
新しい空っぽのMysqlDBを一つ作っておいてください。
そのDBを新しいWordpress用のDBとします。「管理ユーザ名」と「パスワード」をのちのち使用します。
1.SQLiteからデータをdump・変換
今までデータを扱ってきたSQLiteのファイルから、データをdumpします。
で、「SQLite Integration」がDBとして保存していっているファイルはここにあります。
この「.ht.sqlite」がDBファイルです。
こいつを「sqlite3」コマンドが使える環境でdumpして変換します。
ちなみに私はXSERVERの直下のディレクトリにおいてSSHでログインし、実施しました。
git↓に移動して、ファイルをダウンロードしてください。
https://github.com/vwbusguy/sqlite-to-mysql
上記URLのページで、右の方の緑のところをクリックし、「download as ZIP」を選択します。
ZIPは解凍しておいてください。
この「sqlite3-to-mysql.py」の中身は、SQLiteからdumpしたファイルをMySQLに大体は合うように書き換えてくれているありがたーいpythonコードです。
※XSERVERで使用する場合、insert時にエラーが出たので一か所書き換えました。
cp -pi sqlite3-to-mysql.py sqlite3-to-mysql.py.org
vi sqlite3-to-mysql.py
68行目
grant all on {d}.* to {u}@’localhost’ identified by ‘{p}’;
↓
grant all on {d}.* to {u}@'[あなたのSQLサーバ名].xserver.jp’ identified by ‘{p}’;
dumpして変換していきます。
ようやく、dump→変換のコマンド例:
sqlite3tomysql2.dumpという変換後のダンプファイルができるかと思います。別の名前でも構いません。
ちなみに「sqlite3tomysql2.dump」はこのままでは使いません。
2.変換したデータをMySQLへinsertする
変換したデータを、用意したMySQLへinsertしていきます。
※ここで注意なのですが、そのままぶち込むと色々と問題というか、制約上のエラーが出てしまい…。
そのため、ざっくり以下のように対応しました。
さほど正攻法ではない気がする…。
①xserverの簡単Wordpressインストールで、空っぽのWordpressを作成し、使っているプラグインを入れていく。
②そのWordpressが作成したMySQLのdumpを作成する。
コマンド例:
シンプルに作った空っぽのWordpressからCREATE文を拝借することにしました。もっとうまいやり方があるかもしれぬ…
ID integer NOT NULL PRIMARY KEY AUTO_INCREMENT ,
post_author integer NOT NULL default ‘0’,
post_date text NOT NULL default ‘0000-00-00 00:00:00’,
post_date_gmt text NOT NULL default ‘0000-00-00 00:00:00’,
post_content text NOT NULL,
post_title text NOT NULL,
post_excerpt text NOT NULL,
post_status text NOT NULL default ‘publish’,
comment_status text NOT NULL default ‘open’,
ping_status text NOT NULL default ‘open’,
post_password text NOT NULL default ”,
post_name text NOT NULL default ”,
to_ping text NOT NULL,
pinged text NOT NULL,
post_modified text NOT NULL default ‘0000-00-00 00:00:00’,
post_modified_gmt text NOT NULL default ‘0000-00-00 00:00:00’,
post_content_filtered text NOT NULL,
post_parent integer NOT NULL default ‘0’,
guid text NOT NULL default ”,
menu_order integer NOT NULL default ‘0’,
post_type text NOT NULL default ‘post’,
post_mime_type text NOT NULL default ”,
comment_count integer NOT NULL default ‘0’
);
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `wp_posts` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_author` bigint(20) unsigned NOT NULL DEFAULT ‘0’,
`post_date` datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
`post_date_gmt` datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
`post_content` longtext NOT NULL,
`post_title` text NOT NULL,
`post_excerpt` text NOT NULL,
`post_status` varchar(20) NOT NULL DEFAULT ‘publish’,
`comment_status` varchar(20) NOT NULL DEFAULT ‘open’,
`ping_status` varchar(20) NOT NULL DEFAULT ‘open’,
`post_password` varchar(255) NOT NULL DEFAULT ”,
`post_name` varchar(200) NOT NULL DEFAULT ”,
`to_ping` text NOT NULL,
`pinged` text NOT NULL,
`post_modified` datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
`post_modified_gmt` datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
`post_content_filtered` longtext NOT NULL,
`post_parent` bigint(20) unsigned NOT NULL DEFAULT ‘0’,
`guid` varchar(255) NOT NULL DEFAULT ”,
`menu_order` int(11) NOT NULL DEFAULT ‘0’,
`post_type` varchar(20) NOT NULL DEFAULT ‘post’,
`post_mime_type` varchar(100) NOT NULL DEFAULT ”,
`comment_count` bigint(20) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`ID`),
KEY `post_name` (`post_name`(191)),
KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
KEY `post_parent` (`post_parent`),
KEY `post_author` (`post_author`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
インサート先は新しい空のDBなので、何も怖くないです。壊れたら削除して作り直せばいいし、ドーンと行きましょう。
WordPressのファイルを全部持ってくる
サーバを引っ越す場合は全部持ってきてください。
私の場合は、XSERVERに「ワードプレス用に作ってあったディレクトリ」配下全部を持ってきました。
引っ越さない場合は、次の参照先の変更のみでOK
※この時点で独自ドメインの設定を直していない場合、XSERVERのURLを参照しても、元のサイトに飛んで行ってしまいます。ので、以下のカラムを仮URLにupdateすると仮環境で確認できます。最後はもちろん、元のURLに戻して運用します。
WordPressの参照先を変更する
「SQLite Integration」用に変更していた設定を、MySQL向けに変更します。
1.設定ファイルを書く
「SQLite Integration」を使っていた人は「wp-config.php」設定をしていないと思います。
以下の赤字を、新しくできたMySQLのそれぞれの設定に書き換えてください。
/** The name of the database for WordPress */
define(‘DB_NAME’, ‘database_name_here‘);
/** MySQL database username */
define(‘DB_USER’, ‘username_here‘);
/** MySQL database password */
define(‘DB_PASSWORD’, ‘password_here‘);
/** MySQL hostname */
define(‘DB_HOST’, ‘localhost‘);
2.db.phpを退避しておく
ワードプレスのディレクトリに置いた「db.php」を退避します。これがあると読み込んじゃうかも。
適当に名前変えればいいです。
これで、多分全部です。MySQLのDBに接続してうまくいってるか、手っ取り早く確認するには一つ記事を作成してみて、「/wp-content/database/.ht.sqlite」が更新されていないことを見るのがいいと思います。これが更新されてると、まだSQLiteを使っていますね…
まとめ
これで完了です!多分!
取り急ぎ見えてない記事は無い…と思う…多分…。
しかしこれ、伝わる人いるのか?もし需要がありそうならもちょっとブラッシュアップします;
しかし、引っ越してDBを変えて、表示が速くなった…!うれしい。
あと、この表示が速い環境でwordpressが増やし放題なのもうれしい。
まあそんな増やす予定はないですがw
というわけで、SQLiteをMySQLにしたし、さらにXSERVERに引っ越しました!
コメント