WordPressのデータベースは基本MySQL。MongoDBがあるけど、これってWordPressに連携できないの?っていうストレスないでしょうか?
答えはできます(当サイトでもMongoDBを連携させています)。
ここでは、Node.jsで運用しているMongoDBをWordPressに連携させる方法を紹介します。
環境はmac、レンタルサーバーはLolipopで解説します。
なお、ローカル環境(Bitnami)でも同様に連携できます(こちらの記事)。
目次
連携は4ステップ
環境を構築すると、4ステップでMongoDBをレンタルサーバーのMySQLと連携できます。
- MongoDBをMySQLに変換(Momy)
- 変換したMySQLをファイル出力
- 出力したMySQLファイルをレンタルサーバーにアップロード
- レンタルサーバーでMySQLファイル読み込み
環境構築
環境構築として以下の4つが必要です。
- MySQLのインストール
- Momyのインストール
- MongoDBをレプリカセットで起動
- 読込み先のMySQLデータベース作成
1~3はローカル、4はレンタルサーバーでの環境構築です。それぞれ解説します。
MySQLのインストール
ローカルにレンタルサーバーと同じバージョンのMySQLをインストールします。Homebrewでサクッとインストール。
※ここではMySQL5.6としています。
> brew install mysql@5.6 // レンタルサーバーのmySQLと同じバージョンをインストール
パスワードなどのセキュリティ設定とMongoDB→MySQLの変換先データベースを作っておきます。このデータベースをMomyのスキーマで”dist”(出力先)に指定します。
※ここではhogeというデータベースとしています。
> brew services start mysql@5.6 // MySQL起動 > mysql_secure_installation // パスワードなどの設定 > mysql -uroot -p // MySQL接続 mysql> create database hoge; // データベースhoge生成
Momyのインストール
mongoDB→MySQLの変換は「Momy」というパッケージを使用します(作者さんに感謝)。
インストール、設定、使い方は作者さんの公式ページに分かりやすく解説されているので割愛します。
ここでは、スキーマ設定(MongoDB→MySQLの変換設定)でのポイントだけ。
例えば、MongoDBでのデータ構造が下記の場合、
{ name: "hoge", info: { code: "01234" num: 100 } }
スキーマのプロパティ部分は下記のようになります。
{ "name": "string", "info.code": "string", "info.num": "number" }
ポイントは入れ子構造のプロパティは「.(ドット)」で連結した名前で指定するところです。
変換したmySQLをWordPressからアクセスする時も「.(ドット)」で連結した名前でアクセスします。
MongoDBをレプリカセットで起動
MomyはMongoDBのレプリカセットを使う仕様になっています。レプリカセットの起動方法についてはMomyの公式ページでも詳しく解説されているので割愛します。
ここでは、初回だけ必要な初期化のポイントだけ。
もし、下記でうまくいかない場合は、
> mongo > rs.initiate()
configを指定して初期化しましょう。
> mongo > config = { "_id": "rs0", "members": [ {"_id":0, "host": 'localhost:27017'} ] } > rs.initiate(config)
“not master and slaveok=false”というエラーが出る場合は、下記を試してみてください。
> mongo > db.getMongo().setSlaveOk()
読込み先のMySQLデータベース作成
レンタルサーバー側のMySQLデータベースを作成しましょう(作成方法は下記リンクを参考ください)。
このMySQLデータベースに、Momyで変換したMySQLファイルを読み込むことでWordPressから使用できるようになります。
実際に使ってみる
環境構築ができたので実際に使用してみましょう。
最初に紹介したように4ステップでMongoDBをレンタルサーバーのMySQLと連携できます。
- MongoDBをMySQLに変換(Momy)
- 変換したMySQLをファイル出力
- 出力したMySQLファイルをレンタルサーバーにアップロード
- レンタルサーバーでMySQLファイル読み込み
それぞれ見ていきましょう。
MongoDBをMySQLに変換(Momy)
Momyを実行するだけです。
ここでは、先に作成したスキーマをmomy.json(命名は自由)として、スキーマが保存されているディレクトリで下記を実行します。
> momy --config momy.json --import
–importオプションは初回の実行時のみ必要です(スキーマを編集した場合も–importオプションを指定しましょう)。
変換したMySQLをファイル出力
MongoDB→MySQLに変換したデータベースをレンタルサーバーにアップロードするためにファイル出力します。
ここでは、変換したMySQLデータベース名をhoge(スキーマのdistで指定したMySQLデータベース名)として、デスクトップにhoge.sqlというファイルを出力しています。
> mysqldump --single-transaction -uroot -p hoge > ~/Desktop/hoge.sql
出力したMySQLファイルをレンタルサーバーにアップロード
レンタルサーバーの適当なディレクトリに、変換したMySQLファイルをアップロードします。
ここでは、レンタルサーバーのwp-contentディレクトリ直下にmysqlというフォルダを作成してアップロードする手順を説明します。
ロリポップの場合、「サーバーの管理・設定」/「ロリポップ!FTP」にアクセスします。
次に、MySQLファイルをアップロードするディレクトリに移動して、ファイルをアップロードします。
①ファイルアップロードのアイコンをクリック、②「上書き」を指定、③アップロードするファイルを選択(ここではデスクトップに保存したMySQLファイルを指定)、④「アップロードする」ボタンをクリックでアップロードできます。
レンタルサーバーでMySQLファイル読み込み
アップロードしたMySQLファイルを読み込みます。
ターミナルでレンタルサーバーにログインします(別記事でターミナルでのサーバーログインの設定方法を解説しているので参考にしてください)。
> ssh lolipop
次に、先程のMySQLファイルをアップロードしたディレクトリに移動します。
以下、[lolipop]> はロリポップサーバーにログインした状態を表しています。
[lolipop]> cd ディレクトリパス/wp-content/mysql
最後に、MySQLファイルを読み込みます。
[lolipop]> mysql -u ユーザ名 -p -h データベースホスト データベース名 < hoge.sql
引数には、先で作成しておいた読込み先のMySQLデータベース(レンタルサーバーのMySQL)のユーザ名、データベースホスト、データベース名を指定します。
引数に指定するそれぞれの名前は、ロリポップサーバーの場合「サーバーの管理・設定」/「データベース」で確認できます。
以上で、MongoDBから変換したMySQLをレンタルサーバーのWordPressから使用できるようになります。