バージョン選択

フォーラム

メニュー

オンライン状況

62 人のユーザが現在オンラインです。 (52 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 62
もっと...

サイト内検索

質問 > その他 > EC-CUBE2系でのMySQL5.7利用について

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
takuya_nl
投稿日時: 2016/2/4 12:09
対応状況: −−−
新米
登録日: 2016/1/21
居住地: 大阪
投稿: 4
EC-CUBE2系でのMySQL5.7利用について
------------------------------------------------------------------------------------------
[EC-CUBE] 2.13.5
[OS] Redhat系OS
[PHP] PHP 5.6.x
[データベース] MySQL5.7.10
[WEBサーバ] apache
------------------------------------------------------------------------------------------

初めて投稿させていただきます。

ただいま、2.13系でのMySQL5.7.10の動作検証を行っておりまして、
現状DBの処理の時点でエラーが発生する状況となっております。

原因としてはSC_DB_DBFactory_MYSQL.php下で、
$objQuery->exec('SET SESSION storage_engine = InnoDB');
という処理が5.7.5以降に削除されている為であり、
$objQuery->exec('SET SESSION default_storage_engine = InnoDB');
と修正することで対応できると思います。

根拠のドキュメントとしては
<http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_storage_engine>
のstorage_engine項をご確認ください。

ただ、このまま改修をしてしまうとMySQLのバージョンが低い場合に問題が発生してしまう為、
MySQLのバージョンが低い場合は$objQuery->exec('SET SESSION storage_engine = InnoDB');
を使いたいというコードにしたいと思いますが、良い案はございませんか。

sfGetDBVersion関数が使えないので巧い改修方法が思いつかずに質問させていただきました。
ご教示よろしくお願いします
seasoft
投稿日時: 2016/2/4 12:15
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: EC-CUBE2系でのMySQL5.7利用について
未確認ですいません。

SQL 内でバージョンによって IF 分岐させて SET 実行は無理でしょうか。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

seasoft
投稿日時: 2016/2/4 12:34
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: EC-CUBE2系でのMySQL5.7利用について
本件、開発プロジェクトへ登録しました。
https://github.com/EC-CUBE/eccube-2_13/issues/84


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

takuya_nl
投稿日時: 2016/2/4 13:09
対応状況: −−−
新米
登録日: 2016/1/21
居住地: 大阪
投稿: 4
Re: EC-CUBE2系でのMySQL5.7利用について
seasoft 様

早速の対応ありがとうございます。

IF分岐の件は後ほど試してみて、ご回答させていただきます
takuya_nl
投稿日時: 2016/2/16 12:15
対応状況: 解決済
新米
登録日: 2016/1/21
居住地: 大阪
投稿: 4
Re: EC-CUBE2系でのMySQL5.7利用について
とりあえず、暫定的に解決しましたのでご報告だけ。
SQL内でIF文でのやり方が見つかりませんでした。

結局、initObjQuery関数内で

// バージョン取得
$val = $objQuery->getOne('select version()');

if(strcmp($val,'5.7.5')) {
 $objQuery->exec('SET SESSION default_storage_engine = InnoDB');
} else {
 $objQuery->exec('SET SESSION storage_enging = InnoDB');
}

みたいな動きをしてやれば対応できそうです。(大丈夫だと思います)

以下それぞれで動作確認済み
 ?MySQL 5.7.10-log
 ?MySQL 5.6.26

ただ、毎回SC_Query呼び出すタイミングでこの処理が入るのは
あまり、実用的ではないと思いますね。


ですので、MySQL5.7.5以降については、
 ?$objQuery->exec('SET SESSION default_storage_engine = InnoDB');に修正しておく
 ?SC_DB_DBFactory_MYSQL.php自体を新旧MySQLで分けておく、
 ?そもそものシステム要件で弾いておく
 ?レスポンス下がっても以上の処理を加える
ようにしておくのがいいのかも知れませんね。
GUCHI1201
投稿日時: 2018/1/14 5:16
対応状況: −−−
新米
登録日: 2018/1/14
居住地: 東京都
投稿: 2
Re: EC-CUBE2系でのMySQL5.7利用について

今までずっと EC-CUBE2系でのMySQL5.7利用について
どういった方法があるのか、模索していましたが、
takuya_nlさんのおかげで解決することが出来ました。

こういった報告を記載していただいて心から感謝しています。
本当に助かりました!

ありがとうございました!
nanasess
投稿日時: 2018/1/15 11:05
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2303
Re: EC-CUBE2系でのMySQL5.7利用について
ちなみに、最新のコードでは mysqli ドライバを使うようになりましたので、 mysqli::server_version が使えます。

https://github.com/EC-CUBE/eccube-2_13/pull/173/files
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,305名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.