みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Drupalのデータベースについて

DrupalはMySQLデータベースを使用してコンテンツを管理していますが、データベースの構造を少し知っていると、いろいろなことができて便利です。例えば、あるDrupalサイトからノードとタクソノミーのみを別のサイトにコピーする、ということができるようになります。

phpmyadminの使い方

例えば、MiniBird(stardomainのサーバー)なら、サーバー管理ツールのphpmyadminから入ることができます。ユーザー名とパスワードはデータベースの作成画面にて設定したものです。

f:id:atsuhiro-me:20151103003458p:plain:w300

f:id:atsuhiro-me:20151103003459p:plain:w300

f:id:atsuhiro-me:20151103003501p:plain:w300

phpmyadminにログインできたら、以下のようにデータベースを選択して、データベースのテーブルや情報を参照することができます。

データベースのエクスポート

一部のテーブルのみをエクスポートすることも、データベース全体をエクスポートすることもできます。下のようにエクスポート画面を開いて、エクスポートしたいテーブルを選択します。左クリックすれば選択されて、青く反転します。Cmdクリックで複数選択、Shiltクリックで範囲選択みたいです。sqp形式を選択し、Save as fileにチェックを入れて、Go!

f:id:atsuhiro-me:20151103003506p:plain:w300

データベースのインポート

エクスポートしたsqlファイルをインポートするには、インポート画面を開いてインポートするだけなのです。

f:id:atsuhiro-me:20151103003508p:plain:w300

ここで1つポイントがあります。それは、既存のテーブルに上書きをする場合は、予めそのテーブルを空にして置かなければならないということです。それは、Structureタブからテーブルを選択して、Actionという覧からEmptyを実行します。そして、レコードが0になっていることを確認します。これをしないと、

Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)
Message: Duplicate entry "%s" for key %d

とエラーします。エントリーが重複していると上書きではなくエラーとなるようです。

インポートした後は、レコードの数がエクスポートしたテーブルのものと数が一致していることを確認して、完了です。

あるDrupalサイトから別のDruplaサイトへ一部のデータのみを移動する

上記の方法を使用すれば、一部のデータのみを移動することも可能です。例えば、全ての記事・コメントとタクソノミーとURLエイリアスだけを移動するには、下記のテーブルをエクスポートして、新しいデータベースにインポートすればおっけーです。

Field関係(bodyとかCommentとかが格納されているテーブル) 

  • field_config
  • field_config_instance
  • field_data_body
  • field_data_comment_body
  • field_data_field_image
  • field_data_field_tags
  • field_revision_body
  • field_revision_comment_body
  • field_revision_field_image
  • field_revision_field_tags

Node関係(記事のタイトルとかタクソノミー情報が格納されているテーブル)

  • node
  • node_access
  • node_comment_statistics
  • node_counter
  • node_revision
  • node_type

タクソノミー関係 (タクソノミーの設定が格納されているテーブル)

  • taxonomy_index
  • taxonomy_term_data
  • taxonomy_term_hierarchy
  • taxonomy_vocabulary

URLのエイリアス関係 (エイリアスが格納されているテーブル)

  • url_alias

以上です。