カテゴリー: CMS・ブログツール

【EC-CUBE】mySQLからpostgreSQLへデータを移行する

パフォーマンス改善のため、MSQLからPSQLへのデータベース移行を行う。

移行前 mySQL5.2 → 移行後 postgreSQL8.3 (※VER末番省略)

PSQLの8.3系はパフォーマンスは高いが、SQLの互換性で色々と問題が出ることもあるようなので、モジュールなどを使用する際は、注意すること。

移行の場合は、一旦同サーバ内に、サブドメインなどで別環境を作っておき、そちらでインストールしてから本番環境からDBを切り替えるのが望ましい。

【主な手順】

  1. MYSQLのDBからphpMyAdminで、テーブルごとにCSVデータを書き出す。
  2. (一応同じサーバ内に別環境をつくり)EC-CUBEをポスグレ使用でインストール
  3. postgreSQL(以下PSQL)のDBのテーブル内のデータを全て空にする
  4. テーブルごとに、先にMSQLからダウンロードしていたCSVデータをインポート(※携帯用コメントとショップ用コメントをカスタマイズ追加しているから、この際にPSQLのdtb_productsにcomment7とshop_comment1カラムを追加しておく。)
  5. ビューを調整。
    ・vw_product_class
    ・vw_products_allclass
    ・vw_products_allclass_detail
    ・vw_products_nonclass
    の4つのビューに、カスタマイズで追加していたコメントカラム(comment7、shop_comment1 ※ショップカラムは、表示しないので、allクラスとnonclassだけでもいいと思う)をそれぞれ追加して生成しなおす

では詳しい手順。

その1)

phpMyAdminを開いて、左のサイドメニューからテーブルを1つずつ選択。エクスポートタブメニューをクリックし、テーブルのエクスポートメニューで、

エクスポート:「MS Excel用CSVデータ」を選択。
Excelオプション:NULL/最初の1行目にフィールド名を追加する(チェックあり)/Excelの種類(Windows)
ファイルで保存する(チェック)/圧縮(無し)/エンコード(non)

で実行。

supremecenter53com-_-papalabs_ageha-_-dtb_baseinfo-_-phpmyadmin-264-pl2

エンコードの変換有無は、移行する相互のDBの文字エンコードが違う場合、文字化けを防ぐために必要になるが、書き出してからテキストエディタなどで様子を見ながら変換したほうが安心な気がする。

結構な数のテーブルがあるので、PSQLにインポートの際間違えないようにファイル名に気をつけながら順番に繰り返す。

その2)

PSQLでEC-CUBEインストール用のDBを1つ新規作成し、そこへ、もとのMSQLのEC-CUBEと同じバージョンのEC-CUBEを新規インストールする。

以前のものと同じバージョンにあわせるのは、DBの安全移行のため。ただしテーブル構造などが変わっていないバージョンの変更であれば、新しいEC-CUBEでもかまわない。
別のEC-CUBEを使う場合は、DBだけでなくファイルの移行も色々気をつけないといけないから正直めんどい;問題も切り分けにくいのでまずは、普通に移行だけ先に行ったほうがいいように思う。

その3)

ここで一旦新しいEC-CUBEの基本動作確認がベター。サーバー側の別のエラーが出ている場合は修正しておくこと。問題なければ、PSQLの各テーブルのデータを一旦空にする。

phpPgAdminを開いて、左メニューから、スキーマ→public→テーブルをクリックして選択。テーブルの一覧がでるので、ページ下の方の「複数行の操作」メニューから、「すべて選択する」—>「空にする」を選んで実行ボタンをクリック。

phppgadminjpg

これで、テーブルの構造は残るが値は消えた。

その4)

dtb_baseinfoを選択して、上のタブメニューからインポートを選ぶ。

フォーマット(CSV)/NULL文字を許可する(\n、NULL、殻の文字列・項目いずれもチェック)

先に保存していたMSQLのdtb_baseinfoのテーブルデータを選択して、インポートボタンをクリック。

phppgadmin2

これを、最後のテーブルまで繰り返す。

途中、インポートエラーが出たらメッセージごとにもとのMSQLデータを調整するなどして対応。カスタマイズして増やしたカラムに相当するカラムがPSQLのテーブルにない場合、エラーが出るので、その際は、該当するカラムをテーブルに追加しておく。(例えば、dtb_productsにcomment7などを追加していた場合、PSQLのインポートでは、そのデータを入れるカラムがまだないので、作成しておかなくてはいけない)

その5)

PSQLでは、VIEWを使用してテーブルから値をあらかじめ集めておくことで表示のパフォーマンスをあげている。上記のようなカスタマイズでMSQLのテーブルにカラムを追加していた場合、そのデータをEC-CUBEで表示させるならVIEWにも修正が必要になる。(例えば、上記携帯用コメントcomment7は、携帯ページで表示させるので、それを読み込んでいるVIEWにもデータがなくては表示エラーになってしまう)

今回は、

  • comment7→携帯ページ用商品説明文を入力&表示させている。
  • shop_comment1→商品登録時に店舗のメモを格納しているが管理画面で確認するだけでフロント表示はしない。

となっているので、

  • vw_product_class
  • vw_products_allclass
  • vw_products_allclass_detail
  • vw_products_nonclass

の4つのビューに、それぞれ、値を足すことにする。

  1. vw_product_classは、マスター的な役割をするので、comment7もshop_comment1も追加する
  2. vw_products_allclassには、comment7のみ追加
  3. vw_products_allclass_detailには、comment7のみ追加
  4. vw_products_nonclassには、もshop_comment1も追加する

vw_product_class以外には、shop_comment1のほうが必要かどうかちょいとあいまい。なくてもいいかもしれない。(エラー出たときに足せば・・・)

やり方。まず、左メニューからビューのvw_product_classを選択。ページの右上のほうのタブメニューからエクスポートを選択。
まずは、ダウンロードを選んで、一旦ローカルにビューのデータをバックアップ。その後、表示でファイルを開く。L18あたりの、 t6.comment6,の後ろに、 t6.comment7, t6.shop_comment1,を追加。ソースをドラッグ&コピー。

phpPgAdminへ戻り、左メニューのビューをクリックして、表示されるビューの一覧から、vw_product_classのテーブル内の「破棄」ボタンをクリックして、vw_product_classビューを破棄する。

画面の上の方のデータベース名をクリック。
SQLタブをクリックして、フォームに修正後のソースを貼り付けて、実行。

phppgadmin4

これで、新しく修正されたビューが再生成される。「レコードが見つかりません」と表示されればok。残りのビューについても同様に繰り返す。

vw_products_allclassは、t5.comment3, の後ろにt5.comment7,を、t1.comment3, の後ろにt1.comment7,を追加。

vw_products_allclass_detailは、t3.comment3, の後ろにt3.comment7, を追加。

vw_products_nonclassは、 t1.comment6, の後ろに、t1.comment7, t1.shop_comment1, を追加。

これでOK。

最終テストを行うので、新EC-CUBEから、/data/install.php以外のデータを一旦削除し、本番のec-cubeのソースをこちらにコピーしてくる。これで、本番の環境と同じプログラムでDBのみPSQLの環境ができたことになるので、データが正しく移行されて、表示されているか確認。

動作に問題がなければ、本番のec-cubeの/data/install.phpの接続データベースをPSQLの情報に変更して、接続するDBを入れ替えて完了。テストの段階で、PHPソースなどを変更しなければならなかった場合は、本番にもそれらを反映する。

以上。書いてると長いけど、慎重にやれば、作業自体はそれほど難しくはない。

WORDPRESSのプラグイン:カスタムフィールドを使いやすくカスタマイズ!

カスタムフィールドのGUIを使いやすくして、CMSとしても利用しやすくするプラグイン2つ。

ベースのプラグインは同じものから、独自仕様を追加したりカスタマイズしたものなので、使いやすい♪

それぞれに特徴があって、1つは、共通フィールドと投稿ごとのフィールドをそれぞれ追加できる「Custom Field GUI Utility」(※2009/2/6時点の最新アップデート版はこちら。)

もうひとつは、ページテンプレートとして、いくつかのパターンを追加でき、また、プラグインの設定画面から一括設定が可能な「Custom Field Template」。こちらは、よりCMSっぽいことができる。

【WORDPRESS】MTのマルチブログっぽいことをする

WordPress MUは、マルチユーザーマルチブログなんだけども、1つMTと大きく違うのが、MTのMULTIBLOGでできる、子ブログの記事のインポートができないってこと。これができるのとできないのとでは、CMS化して使用するためには、大違い。

そこで、登場するのが、feedwordpress。このプラグインを使うと、自分のブログだけでなく、他のものでもRSSフィードからエントリーデータを取得して自分のブログ内に表示ができる。

って、これ。取り込んだデータは自分のグログで自分の記事として公開できてしまうのよ。。。
自分のブログじゃなくて人のブログから記事を取り込んで自分のブログの中に公開しちゃったら、コンテンツドロボーじゃんか。。。

まあ、とりあえず、ワタシの目的は、自分の子ブログのデータが読み込めればいいので、とりあえず、人様のことはよしとする。

  1. 上のサイトからZIPとかのデータをダウンロード。
  2. 解凍して、wp-contentsのpluginフォルダにアップロード。WPの左ナビゲーション内のプラグインメニューからfeedwordpressを「使用する」リンクをクリック。
  3. そうすると左ナビと(ついでに言うと設定メニューの中にも)ヘッダーの右上にSyndicationというメニューが出てくるので、そこの設定で読み込んだ記事のカテゴリーとか、読み込んだ記事をブログ内のコンテンツに取り込むのか元のサイトへのリンクで処理するのか、記事の投稿者は誰にするのかとか色々初期設定しておく。
  4. あとは、Syndicationのほうのメニューページで、取り込むサイトのURLを入力すればOKなんす。

これだけ。悪いことに使っちゃダメだよ~。自己責任だよ~。

今回やったこと。

  • WORPRESS MUをダウンロードしてきてサブドメインを使ってマルチユーザー・マルチブログのWPサイトを構築。
  • MUは英語ベースなので、こちらから日本語ソースをもらってきて、wp-contents-languageフォルダを作成して日本語ファイルをインストール。(アップロードしてからサイト管理-設定の言語設定をjapaneseに変更。wp-config.phpのWPLANGも変更してdefine (‘WPLANG’, ‘ja’);とする。詳しくは、上記日本語ソース配布サイトに書いてる。今は、ver.2.7作成中となっていたが、そのうちできるでしょ。2.6.2用でも一部英語が残るだけで別に問題なし。)
  • 2つ目のブログを作って、そのブログに、ktai_entryプラグインを入れて投稿設定。
  • その記事を、feedwordpressでメインのブログのニュースカテゴリに読み込む。(ニュースを子ブログで作る想定ね)
  • ついでなんで、携帯電話でも見られるように、ktai_styleも入れてみた。携帯でメール投稿した後、内容確認したくなるときもあるだろうしね。(作者のyurikoさんってすごいなぁ。。。なんでもできちゃうんだなぁ。。。)

これで、WEBサイトのニュース記事を携帯電話からメール更新で更新できて、しかも、その更新は、ニュース専用の投稿者にお願いする、ってことができちゃう。ヤッタ。

応用で、特定のカテゴリー記事だけ別部門で運用して、別々に運用しているカテゴリーのコンテンツをメインサイトにまとめるとか、そういうこともできるよねw(^^)w
別に同じブログ内で、カテゴリーだけ分けて、ニュース記事を抽出してもいいんだけど、そうすると、更新頻度の高いカテゴリーの記事に頻度の低いカテゴリーの記事が埋もれちゃったり、カテゴリーごとに編集権限が違うときとか、公開前に他の人には見せられないカテゴリーの記事があったりとか、そういうときに困ることもあるから、できると便利な一工夫ってことになりますネ。

WORDPRESS MUキター!

とか言ってみる。

実はもともとMT愛好者のワタシ。
昔は、マルチブログとカスタムフィールドを駆使して、CMSッぽいことしてたね。あの頃は、CMSといえば、エンタープライズかブログのそれっぽいのしかなかった。。。
もちろんエンタープライズなんて買えないさ~ってな低予算プロジェクトではMTでがんばってた。

ニュースは、ニュースブログで、商品は商品ブログで作って、メインブログにインクルードして、それぞれのブログで更新権限分けて、みたいなことをして何とかしのいでた。

最近、いろんなCMS、それもブログの何ちゃってCMSと呼んでみた~みたいなのではなくて、ちゃんと承認フローとかロールもついてるようなちゃんとしたやつがオープンソースで出てきたりして、使う機会は無くなってきたけど。。。

久しぶりに、グログツールで、ホラ、アレだ、ちょいと簡単にマルチブログ作ってインクルードしたい、なんてことを考えたら、やっぱWORDPRESS使いたいな~、PHPだしな~、OSCだしな~、MTは独自タグ多いしな~、とか心がぼやき始めたので、とりあえず検索。

MTOS(MTのオープンソース版)使うって手もあるけど、そうすると、商用でクライアントに提案したいときに、結局パッケージ必要になるから、どうせなら、WPで実験しとこうかと。)

WPはシングルブログだから、別のブログをインクルードしてきてもいいとしても、同じサイトに属する複数のブログを分けて管理するのは面倒・・・

WORDPRESS MUならできるかも。マルチブログだし。一部のプラグインとかは、動かないのもあるみたいだけど、B豚の使いたいのはいけそうな感じ。

さて、インストール。

ちょっとWPとちゃうけど、まあいいか。マルチブログをサブドメインで運用するかサブディレクトリで運用するか?サブドメがええわ。どっちでもいいけど、とりあえずテストやし。

んで、あれこれやって、2つ目のブログ作ろうと思って、挫折・・・あれ?これってどこのディレクトリ参照してんの?
てか、表示されんし。

どうも、WPMUをサブドメインで運用するには、ホストのDNSでAレコードにワイルドカード(*.domain.comみたいのん)が指定できないとだめらしい。しかも、うちのサーバーは、コンパネでサブドメインとかDNS設定するやつやし、ROOT権限はないし。

WPの内部で、WPのメインディレクトリへのアクセスをサブドメイン(=複数ブログ)ごとに振り分けている模様。

どうすっぺ~。どうすっぺ~。

う~ん。う~ん。

だめもとで、とりあえず、ホストのコンパネでサブドメインつくる。→サブドメの参照ディレクトリは、メインドメインと同じディレクトリにする。

お?なに?いけたわ。悩みに悩んだワタシの3時間をカエセ。

てことで、あえなく解決。

備忘録やけど、とりあえず、この悶々たる想いをだらだら書きたかったので、普通にブログになってもた。
たまにはいいよね、こういうのも?

あとは、プラグインのテストと、ブログのインクルードテンプレ作ることだね。。。
やれやれ、いつになったらできるやら。。。