各務 洋
kagam****@outwa*****
2015年 5月 13日 (水) 20:36:05 JST
お世話になります、各務と申します。
この題名のものを確認していたら、発生したので同じで送らせていただきます。
(原因は前回とは別だと思います)
----------------------------------------------------------------------
現象:
同一レコードの登録、削除、登録を行うとユニークキー重複エラーが発生する。
レプリケーションが最初の登録の時点で切断される。
発生頻度は毎回。
----------------------------------------------------------------------
環境:
CentOS 6.4
groonga-libs.x86_64 5.0.3-1.el6
mysql-community-mroonga.x86_64 5.02-1.el6
mysql-community-server.x86_64 5.6.24-3.el6
ストレージモード
マスター/スレーブの2台構成です。
----------------------------------------------------------------------
再現手順:
CREATE TABLE `tbl_test_pat_0001` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`t_key` VARCHAR(255) NOT NULL,
`t_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `uidx_tbl_test_t_key_t_date` (`t_key`,`t_date`)
) ENGINE=mroonga DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO tbl_test_pat_0001 (t_key, t_date) VALUES ('test1', '0000-00-00');
DELETE FROM tbl_test_pat_0001 WHERE id = 1;
INSERT INTO tbl_test_pat_0001 (t_key, t_date) VALUES ('test1', '0000-00-00');
で、
ERROR 1062 (23000): Duplicate entry 'test1-0000-00-00 00:00:00' for key 'uidx_tbl_test_t_key_t_date'
が発生します。
----------------------------------------------------------------------
期待する動作:
重複してなければ、登録可能にして欲しい。
レプリケーション状態を続行して欲しい。
----------------------------------------------------------------------
確認した事項:
最初の INSERT で、warning が発生。
| Error | 1265 | Data truncated for column 't_date' at row 1 |
その時点で SELECT すると
+----+-------+---------------------+
| id | t_key | t_date |
+----+-------+---------------------+
| 1 | test1 | 0000-01-01 00:00:00 |
+----+-------+---------------------+
と、0000-00-00 が 0000-01-01 00:00:00 になっている。
(※ mroongaストレージエンジンは月や日の値に指定された0を1へと自動的に補正します。なので)
この際、スレーブ側へのレコード登録は「0000-01-01 00:00:00」で成功するが、
レプリケーションは切断される。
Error 'Data truncated for column 't_date' at row 1' on query. Default database: 'db_test'.
Query: 'INSERT INTO tbl_test_pat_0001 (t_key, t_date) VALUES ('test1', '0000-00-00')'
その後、DELETEし、再 INSERT 時のエラーが
| Error | 1062 | Duplicate entry 'test1-0000-00-00 00:00:00' for key 'uidx_tbl_test_t_key_t_date' |
となるので、truncate する前の値で index を作成し、削除し損ねているのではないのでしょうか?
----------------------------------------------------------------------
その他の事項:
実は、DATETIME型ではなく、TIMESTAMP型 でレプリケーションが切断されるの
を探していました。index 等は関係なく。
(あと、mroonga テーブルの破損……)
福岡Groonga1 で再現できたらお送りしたいというのがすっかり遅くなって
しまいましたが、ようやく最新の環境でテストできました。
TIMESTAMP型ではまだ見つかっておりません。
collisions(xxxxxxxx/xxxxxxx): lock failed 1000 times
が頻発するのも気になっていますが。
何か他にお気づきの点があれば、ご指摘いただけると助かります。
よろしくお願いいたします。
----
各務
kagam****@outwa*****