プラグイン > バグ報告・利用に関する質問 > データ移行プラグイン(4.2系)でデータが完全に移行されない |
バグ報告・利用に関する質問
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nakamori |
投稿日時: 2024/2/16 8:19
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2018/4/25 居住地: 投稿: 51 |
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない > クエリーログにDELETEされていそうな箇所はなかったということでしょうか?
> 投入失敗や外部キー関連のエラーログが出ていないでしょうか? 投入失敗等のログは出ていないように見えます。 処理直後、画面を見ずにMySQLのデータを確認した時も既にデータが抜け落ちている状態でした。 試しに抜け落ちたID(id:60455)のデータをクエリーログから抽出し、同じクエリーを手動で投げてみたところ、id:60455のデータは入りましたが、代わりにid:78231が消えるという結果になりました。 そこでid:78231を入れると今度はid:60455が消え、1件入れば1件削除されます。 2つのデータに共通性は見られません。 気になるのはクエリ実行後の出力が MariaDB [dev_cube]> REPLACE INTO dtb_customer (id, customer_status_id, sex_id, job_id, country_id, pref_id, name01, name02, kana01, kana02, company_name, postal_code, addr01, addr02, email, phone_number, birth, password, salt, secret_key, first_buy_date, last_buy_date, buy_times, buy_total, note, reset_key, reset_expire, point, create_date, update_date, discriminator_type, customer_rank_id, plg_mailmagazine_flg, check_date) -> VALUES ('60455', '2', '1', '9', NULL, '12', '氏', '名', 'シ', 'メイ', '*****', '*****', '*****', '***-**', '**********', '090********', '生年月日', '****', '****', '****', 'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:mm:ss', '1', '****', NULL, NULL, NULL, '0', 'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:mm:ss', 'customer', NULL, '0', NULL); Query OK, 2 rows affected (0.005 sec) となっており、1つのクエリで2つのデータがaffectedされています。 MySQLの設定で見直すところなどありますでしょうか? 何度もお手数ですが、よろしくお願いいたします。 |
tattsu |
投稿日時: 2024/2/16 8:46
対応状況: −−−
|
仙人 ![]() ![]() 登録日: 2023/12/23 居住地: 投稿: 395 |
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない 上でも書かせていただきましたが、何かのカラムについているユニークキー制約にひっかかっていないでしょうか?
|
nakamori |
投稿日時: 2024/2/17 7:26
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2018/4/25 居住地: 投稿: 51 |
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない ありがとうございます。
投入失敗や外部キー関連のエラーログは確認できませんでした。 SHOW CREATE TABLEの結果は以下のようになってますが、ここから何かわかることはありますでしょうか。
|
tattsu |
投稿日時: 2024/2/19 9:49
対応状況: −−−
|
仙人 ![]() ![]() 登録日: 2023/12/23 居住地: 投稿: 395 |
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない 実行されるSQLで、secret_keyの値が重複になっていませんか?
コード確認したところ、移行プラグインで、secret_keyにmt_rand関数が使われているようです。 (mt_randはユニークにならない場合があるので、これが原因なら実行ごとに結果が違うこと説明できます) https://github.com/EC-CUBE/data-migration-plugin/blob/4.2/Controller/Admin/ConfigController.php#L403-L404 もし重複しているようなら、商品画像のファイル名のようにもっと重複しない文字列を作るように修正するか、 そもそも3系にも「secret_key」があるので、そのまま使うほうがよさそうですよね。 検証してないですが、 $value[$column] = mt_rand();ではなく、 $value[$column] = isset($data[$column]) ? $data[$column] : mt_rand(); にするとある程度改善されるでしょうか・・。 また、dtb_customerに関してはですが、先に一回テーブルを空にしていたはずなので、おそらくREPLACE INTOではなくてINSERT INTOに直しても良い気がします。
|
nakamori |
投稿日時: 2024/2/19 13:36
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2018/4/25 居住地: 投稿: 51 |
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない ありがとうございます。
クエリーログを確認したところ、secret_keyが重複しているレコードが消えていました! 毎回ランダムに消えていたのも納得です。 ECCUBE3のsecret_keyを変えずに使用する方向で試してみようと思います。 取り急ぎ御礼のみにて失礼いたします。 |
nakamori |
投稿日時: 2024/2/20 8:13
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2018/4/25 居住地: 投稿: 51 |
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない 移行プラグインでデータが消える件、無事解決いたしましたのでご報告いたします。
tattsuさまのアドバイスに従い、ConfigController.phpの該当箇所を $value[$column] = mt_rand(); から $value[$column] = isset($data[$column]) ? $data[$column] : mt_rand(); に変更したところ、全件データが入るようになりました。 ご報告とお礼を申し上げます。 |
« 1 (2) |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |