EC-CUBE2.13.3 CPIからエックスサーバー移行時のエラーと修正方法

CPIサーバーで運用中のEC-CUBE2系で構築されたECサイトをエックスサーバーへ移行しようとした際に出たDB関連エラーと修正方法のメモ。

エラーログ

error.log の内容を確認すると以下のログが追加されておりました。

2021/04/23 13:11:56 [/ec/cart/index.php] Fatal error(E_USER_ERROR): DB処理でエラーが発生しました。
SQL: [SET SESSION storage_engine = InnoDB]
MDB2 Error: unknown error
_doQuery: [Error message: Could not execute statement]
[Last executed query: PREPARE mdb2_statement_mysql_14ce8ac7d0559ea9c568d4a7e7f78584cc60acc43 FROM 'SET SESSION storage_engine = InnoDB']
[Native code: 1193]
[Native message: Unknown system variable 'storage_engine']
 on [/home/xxxxxx/example.com/_smartrelease_except/data/class/SC_Query.php(1095)] from xxx.xxx.xxx.xxx

エラー修正

/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php 内の関連しているコード $objQuery->exec('SET SESSION storage_engine = InnoDB'); のところでエラーが出ていましたので、$objQuery->exec('SET SESSION default_storage_engine = InnoDB'); に修正したところエラーは出なくなり正常に動くようになりました。

修正前

/**
 * 各 DB に応じた SC_Query での初期化を行う
 *
 * @param  SC_Query $objQuery SC_Query インスタンス
 * @return void
*/
public function initObjQuery(SC_Query &$objQuery)
{
    $objQuery->exec('SET SESSION storage_engine = InnoDB');
    $objQuery->exec("SET SESSION sql_mode = 'ANSI'");
}

修正後

/**
 * 各 DB に応じた SC_Query での初期化を行う
 *
 * @param  SC_Query $objQuery SC_Query インスタンス
 * @return void
 */
public function initObjQuery(SC_Query &$objQuery)
{
    //$objQuery->exec('SET SESSION storage_engine = InnoDB');
    $objQuery->exec('SET SESSION default_storage_engine = InnoDB');
    $objQuery->exec("SET SESSION sql_mode = 'ANSI'");
}

動作環境情報

エックスサーバー(x10)
PHP 5.6.40
MySQL 5.7
EC-CUBE 2.13.3 

コメント

タイトルとURLをコピーしました