MongoDBをWordPressで使用する方法(MongoDB→MySQL変換)【レンタルサーバー編】

WordPressのデータベースは基本MySQL。MongoDBがあるけど、これってWordPressに連携できないの?っていうストレスないでしょうか?

答えはできます(当サイトでもMongoDBを連携させています)。

ここでは、Node.jsで運用しているMongoDBをWordPressに連携させる方法を紹介します。

環境はmac、レンタルサーバーはLolipopで解説します。

なお、ローカル環境(Bitnami)でも同様に連携できます(こちらの記事)。

連携は4ステップ

環境を構築すると、4ステップでMongoDBをレンタルサーバーのMySQLと連携できます。

  1. MongoDBをMySQLに変換(Momy)
  2. 変換したMySQLをファイル出力
  3. 出力したMySQLファイルをレンタルサーバーにアップロード
  4. レンタルサーバーでMySQLファイル読み込み

環境構築

環境構築として以下の4つが必要です。

  1. MySQLのインストール
  2. Momyのインストール
  3. MongoDBをレプリカセットで起動
  4. 読込み先の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と連携できます。

  1. MongoDBをMySQLに変換(Momy)
  2. 変換したMySQLをファイル出力
  3. 出力したMySQLファイルをレンタルサーバーにアップロード
  4. レンタルサーバーで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から使用できるようになります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください