- CentOS 6.5
- MySQL 5.6.15 Oracle rpm
- mroonga 3.11
- binlog_formatはMIXED
CREATE TABLE article_index (
id bigint unsigned NOT NULL AUTO_INCREMENT,
article_id bigint unsigned NOT NULL,
terms mediumtext,
publish_datetime datetime NOT NULL,
created_on datetime NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY unique_entry (article_id),
FULLTEXT KEY terms (terms)
) ENGINE=mroonga DEFAULT CHARSET=utf8mb4
以下の順序でクエリを実行
root@12804 mysql>INSERT INTO article_index(article_id,terms,publish_datetime,created_on)
-> VALUES ('2829654','Mroonga 3.12でWプラグマの挙動が変わっています。Wプラグマを使っているSQLはすべて変更しないといけません。3.12にアップグレードするときは注意してください!','2014-01-
28 12:05:10','2014-01-28 12:05:10')
-> ON DUPLICATE KEY UPDATE terms = VALUES(terms),
-> publish_datetime = VALUES(publish_datetime);
Query OK, 1 row affected (0.00 sec)
root@12804 mysql>INSERT INTO article_index(article_id,terms,publish_datetime,created_on)
-> VALUES ('2829654','Mroonga 3.12でWプラグマの挙動が変わっています。Wプラグマを使っているSQLはすべて変更しないといけません。3.12にアップグレードするときは注意してください!','2014-01-
28 12:05:10','2014-01-28 12:05:10')
-> ON DUPLICATE KEY UPDATE terms = VALUES(terms),
-> publish_datetime = VALUES(publish_datetime);
Query OK, 0 rows affected (0.00 sec)
root@12804 mysql>INSERT INTO article_index(article_id,terms,publish_datetime,created_on)
-> VALUES ('2829654','Mroonga 3.12でWプラグマの挙動が変わっています。Wプラグマを使っているSQLはすべて変更しないといけません。3.12にアップグレードするときは注意してください!','2014-01-28 12:05:10','2014-01-28 12:05:10')
-> ON DUPLICATE KEY UPDATE terms = VALUES(terms),
-> publish_datetime = VALUES(publish_datetime);
Query OK, 0 rows affected (0.00 sec)
ここまでは問題なし
root@12804 mysql>INSERT INTO article_index(article_id,terms,publish_datetime,created_on)
-> VALUES ('3829654','新しめのLWPやFurlの場合、Mozilla::CAを使うからルート証明書の有効期限切れの影響受けないかな','2014-01-25 12:05:10','2014-01-25 12:05:10')
-> ON DUPLICATE KEY UPDATE terms = VALUES(terms),
-> publish_datetime = VALUES(publish_datetime);
Query OK, 1 row affected (0.00 sec)
root@12804 mysql>INSERT INTO article_index(article_id,terms,publish_datetime,created_on)
-> VALUES ('3829654','新しめのLWPやFurlの場合、Mozilla::CAを使うからルート証明書の有効期限切れの影響受けないかな','2014-01-25 12:05:10','2014-01-25 12:05:10')
-> ON DUPLICATE KEY UPDATE terms = VALUES(terms),
-> publish_datetime = VALUES(publish_datetime);
Query OK, 2 rows affected (0.00 sec)
最後、Query OK, 2 rowsとなってここがおかしい。レプリケーションも壊れる。
slaveのエラーは
Last_SQL_Error: Could not execute Update_rows event on table mrooga_repl_test.article_index; Can't find record in 'article_index', Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event's master log mysql-bin.000005, end_log_pos 1892
binlogはこうなってる
$ mysqlbinlog -v --base64-output=DECODE-ROWS mysql-bin.000005
#140129 14:21:34 server id 12804 end_log_pos 1160 CRC32 0xaa88ba54 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1390972894/*!*/;
BEGIN
/*!*/;
# at 1160
#140129 14:21:34 server id 12804 end_log_pos 1235 CRC32 0x037bf1ea Table_map: `mrooga_repl_test`.`article_index` mapped to number 70
# at 1235
#140129 14:21:34 server id 12804 end_log_pos 1426 CRC32 0xbe576efe Write_rows: table id 70 flags: STMT_END_F
### INSERT INTO `mrooga_repl_test`.`article_index`
### SET
### @1=6
### @2=3829654
### @3='新しめのLWPやFurlの場合、Mozilla::CAを使うからルート証明書の有効期限切れの影響受けないかな'
### @4='2014-01-25 12:05:10'
### @5='2014-01-25 12:05:10'
# at 1426
#140129 14:21:34 server id 12804 end_log_pos 1511 CRC32 0x1acc8320 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1390972894/*!*/;
COMMIT
/*!*/;
# at 1511
#140129 14:21:36 server id 12804 end_log_pos 1595 CRC32 0x2e44399f Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1390972896/*!*/;
BEGIN
/*!*/;
# at 1595
#140129 14:21:36 server id 12804 end_log_pos 1670 CRC32 0xa7ed687a Table_map: `mrooga_repl_test`.`article_index` mapped to number 70
# at 1670
#140129 14:21:36 server id 12804 end_log_pos 1892 CRC32 0x77c795ef Update_rows: table id 70 flags: STMT_END_F
### UPDATE `mrooga_repl_test`.`article_index`
### WHERE
### @1=0
### @2=0
### @3=''
### @4='1970-01-01 00:00:00'
### @5='1970-01-01 00:00:00'
### SET
### @1=0
### @2=0
### @3='新しめのLWPやFurlの場合、Mozilla::CAを使うからルート証明書の有効期限切れの影響受けないかな'
### @4='2014-01-25 12:05:10'
### @5='1970-01-01 00:00:00'
# at 1892
#140129 14:21:36 server id 12804 end_log_pos 1977 CRC32 0xd712d053 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1390972896/*!*/;
COMMIT
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;