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
コメント