2014年4月26日土曜日

ECCUBEのDB移行【ver 2.3.4 → 2.13.1】

無謀かと思われましたが、他サイトさんの情報も参考にして何とか成功。
移行対象は「商品データ(カテゴリ・規格含む)」「顧客データ」「受注データ」「店舗基本情報」です。

以下、作業の備忘録。

■作業の流れ
モジュールとプラグインを駆使して、段階的にアップデートしていきます。
順序としては、
2.3.4→2.11.5→2.12.4→2.13.1
となりますので、2.11.5、2.12.4、2.13.1をインストールできる環境が必要です。


(1)ECCUBEのインストール

まずは2.11.5、2.12.4、2.13.1の3バージョンをサーバにインストールしてください。
商品画像は各バージョンの upload ディレクトリ以下に手動でコピーしておいてください。
(商品画像の有無にかかわらずDBの移行は可能。)


(2)ver2.3.4からデータエクスポート

オーナーズストアからエクスポート用モジュールを入手し、ver2.3.4にインストールします。
それではサクッとエクスポート…といきたいところですが、少々モジュールの手直しが必要です。

$where = "classcategory_id1 <> '0' AND classcategory_id2 <> '0'";
↓↓↓修正↓↓↓
$where = "dtb_products_class.classcategory_id1 <> '0'";
ファイルを修正したらデータをエクスポートしてください。


(3)ver2.11.5にデータインポート

オーナーズストアからインポート用モジュールを入手し、ver2.11.5にインストールします。
そしてまたもやインポートする前にモジュールの手直しです。

//      $where .= " )"; ↓修正↓
        if ($where) $where .= " )";
        if ($arrList['class_name'] != ""
            && $arrList['classcategory_name'] != "") {
            $class_id = $objQuery->getOne("SELECT class_id FROM dtb_class WHERE name = ?", array($arrList['class_name']));
            $classcategory_id2 = $objQuery->getOne("SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?", array($class_id,$arrList['classcategory_name']));
//          $where .= " AND classcategory_id = ?"; ↓修正↓
            $where .= $where ? " AND classcategory_id = ?" : "classcategory_id = ?";
            $arrval[] = $classcategory_id2;

            $class_combination_id = $objQuery->getOne("SELECT class_combination_id FROM dtb_class_combination WHERE ".$where, $arrval);
            $product_class_id = $objQuery->getOne("SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id = ?", array($arrList['product_id'], $class_combination_id));
        } else {
//          $where .= " AND product_id = ?"; ↓修正↓
            $where .= $where ? " AND product_id = ?" : "product_id = ?";
            $arrval[] = $arrList['product_id'];
//          $product_class_id = $objQuery->getOne("SELECT product_class_id FROM dtb_products_class WHERE ".$where, $arrval); ↓修正↓
            $product_class_id = $objQuery->getOne("SELECT product_class_id FROM dtb_products_class LEFT JOIN dtb_class_combination ON dtb_products_class.class_combination_id = dtb_class_combination.class_combination_id WHERE ".$where, $arrval);
        }
ファイルを修正したら、前項でエクスポートしたデータをインポートしてください。


(4)ver2.11.5から2.12.4用にデータエクスポート

オーナーズストアからエクスポート用モジュールを入手し、ver2.11.5にインストールします。
このモジュールは手直しする必要は無いと思います(多分)。
ただ、かなり重いクエリを実行しているらしく、環境によってはエクスポートにかなり時間がかかるようです。
私の場合、ダウンロードがはじまるまで10分程度かかりました。


(5)ver2.12.4にデータインポート

オーナーズストアからインポート用プラグインを入手し、ver2.12.4にインストールしたら、前項でエクスポートしたデータをインポートしてください。
次に、なぜか dtb_products_status テーブルの移行が忘れられているので、ver2.11.5のテーブルからver2.12.4のテーブルにデータをコピーしてください。


(6)ver2.12.4用のDBを2.13.1用にアップグレード

こちらのサイトを参考にさせていただきました。
まず、ver2.12.4用のDBをver2.13.1用に複製します。
複製したら、前述の参考サイトからDBアップグレード用のSQLを入手し実行してください。
SQL実行後、ver2.13.1の data/config/config.php の各定数の値を変更してください。
<変更箇所>
・使用するDBを、アップグレードしたDBに変更
・「AUTH_MAGIC」の値をver2.12.4のconfig.phpと同じ値に変更

以上で完了です。

いちおう今のところ問題なさげに稼動しておりますが、参考にされる場合は自己責任でお願いいたします。