バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > バグ報告・利用に関する質問 > データ移行プラグイン(4.2系)でデータが完全に移行されない

バグ報告・利用に関する質問

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nakamori
投稿日時: 2024/2/16 8:19
対応状況: −−−
常連
登録日: 2018/4/25
居住地:
投稿: 36
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
居住地:
投稿: 253
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない
上でも書かせていただきましたが、何かのカラムについているユニークキー制約にひっかかっていないでしょうか?


----------------
-------------------
EC-CUBEカスタマイズ・バージョンアップ・不具合修正 
気軽にご相談ください。ゴールドランクパートナー。

nakamori
投稿日時: 2024/2/17 7:26
対応状況: −−−
常連
登録日: 2018/4/25
居住地:
投稿: 36
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない
ありがとうございます。
投入失敗や外部キー関連のエラーログは確認できませんでした。

SHOW CREATE TABLEの結果は以下のようになってますが、ここから何かわかることはありますでしょうか。

| dtb_customer | CREATE TABLE `dtb_customer` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `customer_status_id` smallint unsigned DEFAULT NULL,
  `sex_id` smallint unsigned DEFAULT NULL,
  `job_id` smallint unsigned DEFAULT NULL,
  `country_id` smallint unsigned DEFAULT NULL,
  `pref_id` smallint unsigned DEFAULT NULL,
  `name01` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `name02` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `kana01` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `kana02` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `company_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `postal_code` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `addr01` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `addr02` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `phone_number` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `birth` datetime DEFAULT NULL COMMENT '(DC2Type:datetimetz)',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `salt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `secret_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `first_buy_date` datetime DEFAULT NULL COMMENT '(DC2Type:datetimetz)',
  `last_buy_date` datetime DEFAULT NULL COMMENT '(DC2Type:datetimetz)',
  `buy_times` decimal(10,0) unsigned DEFAULT '0',
  `buy_total` decimal(12,2) unsigned DEFAULT '0.00',
  `note` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `reset_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `reset_expire` datetime DEFAULT NULL COMMENT '(DC2Type:datetimetz)',
  `point` decimal(12,0) NOT NULL DEFAULT '0',
  `create_date` datetime NOT NULL COMMENT '(DC2Type:datetimetz)',
  `update_date` datetime NOT NULL COMMENT '(DC2Type:datetimetz)',
  `discriminator_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `customer_rank_id` int unsigned DEFAULT NULL,
  `plg_mailmagazine_flg` smallint unsigned DEFAULT '0',
  `check_date` datetime DEFAULT NULL COMMENT '(DC2Type:datetimetz)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `secret_key` (`secret_key`),
  KEY `IDX_8298BBE3C00AF8A7` (`customer_status_id`),
  KEY `IDX_8298BBE35A2DB2A0` (`sex_id`),
  KEY `IDX_8298BBE3BE04EA9` (`job_id`),
  KEY `IDX_8298BBE3F92F3E70` (`country_id`),
  KEY `IDX_8298BBE3E171EF5F` (`pref_id`),
  KEY `dtb_customer_buy_times_idx` (`buy_times`),
  KEY `dtb_customer_buy_total_idx` (`buy_total`),
  KEY `dtb_customer_create_date_idx` (`create_date`),
  KEY `dtb_customer_update_date_idx` (`update_date`),
  KEY `dtb_customer_last_buy_date_idx` (`last_buy_date`),
  KEY `dtb_customer_email_idx` (`email`),
  KEY `IDX_8298BBE36ACBC331` (`customer_rank_id`),
  CONSTRAINT `FK_8298BBE35A2DB2A0` FOREIGN KEY (`sex_id`) REFERENCES `mtb_sex` (`id`),
  CONSTRAINT `FK_8298BBE36ACBC331` FOREIGN KEY (`customer_rank_id`) REFERENCES `plg_customerrank_dtb_customer_rank` (`id`),
  CONSTRAINT `FK_8298BBE3BE04EA9` FOREIGN KEY (`job_id`) REFERENCES `mtb_job` (`id`),
  CONSTRAINT `FK_8298BBE3C00AF8A7` FOREIGN KEY (`customer_status_id`) REFERENCES `mtb_customer_status` (`id`),
  CONSTRAINT `FK_8298BBE3E171EF5F` FOREIGN KEY (`pref_id`) REFERENCES `mtb_pref` (`id`),
  CONSTRAINT `FK_8298BBE3F92F3E70` FOREIGN KEY (`country_id`) REFERENCES `mtb_country` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
tattsu
投稿日時: 2024/2/19 9:49
対応状況: −−−
長老
登録日: 2023/12/23
居住地:
投稿: 253
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に直しても良い気がします。


----------------
-------------------
EC-CUBEカスタマイズ・バージョンアップ・不具合修正 
気軽にご相談ください。ゴールドランクパートナー。

nakamori
投稿日時: 2024/2/19 13:36
対応状況: −−−
常連
登録日: 2018/4/25
居住地:
投稿: 36
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない
ありがとうございます。
クエリーログを確認したところ、secret_keyが重複しているレコードが消えていました!
毎回ランダムに消えていたのも納得です。

ECCUBE3のsecret_keyを変えずに使用する方向で試してみようと思います。
取り急ぎ御礼のみにて失礼いたします。
nakamori
投稿日時: 2024/2/20 8:13
対応状況: −−−
常連
登録日: 2018/4/25
居住地:
投稿: 36
Re: データ移行プラグイン(4.2系)でデータが完全に移行されない
移行プラグインでデータが消える件、無事解決いたしましたのでご報告いたします。

tattsuさまのアドバイスに従い、ConfigController.phpの該当箇所を

$value[$column] = mt_rand(); から
$value[$column] = isset($data[$column]) ? $data[$column] : mt_rand();
に変更したところ、全件データが入るようになりました。

ご報告とお礼を申し上げます。
« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は90,090名です
総投稿数は110,310件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1681
8
red
1571
9
mcontact
1350
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.