include/master-slave.inc Warnings: Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. [connection master] ######## Configure ######## # Configure slave_rows_search_algorithms on master [connection master] include/begin_replace_combination.inc [BOTH.BINLOG_FORMAT=ROW,MIXED,STATEMENT -> GLOBAL.SLAVE_ROWS_SEARCH_ALGORITHMS=INDEX_SCAN,HASH_SCAN,TABLE_SCAN] Warnings: Warning 1287 '@@slave_rows_search_algorithms' is deprecated and will be removed in a future release. # Configure partial JSON on master [connection master] SET @old_binlog_row_image= @@SESSION.BINLOG_ROW_IMAGE; SET @old_binlog_row_value_options= @@SESSION.BINLOG_ROW_VALUE_OPTIONS; SET @@SESSION.BINLOG_ROW_IMAGE = 'MINIMAL'; SET @@SESSION.BINLOG_ROW_VALUE_OPTIONS = 'PARTIAL_JSON'; # Add error suppressions on slave [connection slave] call mtr.add_suppression("Could not execute Update_rows_partial event on table test.t"); call mtr.add_suppression("Can't find record in 't'"); call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); call mtr.add_suppression("Slave: Could not apply JSON diff"); call mtr.add_suppression("Slave: Corrupted JSON diff"); call mtr.add_suppression("Slave: Corrupted replication event was detected"); call mtr.add_suppression("Slave: Got error 1610 - "); call mtr.add_suppression("Slave: Got error 3648 - "); call mtr.add_suppression("Slave: Got error 3649 - "); call mtr.add_suppression("Slave: Got error 5 - "); ######## Test ######## [connection slave] include/stop_slave.inc ******** ERROR MODE: FAIL ******** ---- Configure slave ---- # Configure slave_rows_search_algorithms and binlog_format [connection slave] include/begin_replace_combination.inc [BOTH.BINLOG_FORMAT=ROW,MIXED,STATEMENT -> GLOBAL.SLAVE_ROWS_SEARCH_ALGORITHMS=INDEX_SCAN,HASH_SCAN,TABLE_SCAN] Warnings: Warning 1287 '@@slave_rows_search_algorithms' is deprecated and will be removed in a future release. # Configure partial JSON SET @old_binlog_row_image= @@GLOBAL.BINLOG_ROW_IMAGE; SET @old_binlog_row_value_options= @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS; SET @@GLOBAL.BINLOG_ROW_IMAGE = 'MINIMAL'; SET @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS = 'PARTIAL_JSON'; include/start_slave.inc ==== 1. E1. Path exists on master but not on slave, JSON_REMOVE ==== include/rpl_row_jsondiff_error_scenario [3648/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_REMOVE(j, '$[1].m') WHERE i = 1; RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 2. E1. Path exists on master but not on slave, JSON_SET ==== include/rpl_row_jsondiff_error_scenario [3648/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$[1].m', 2) WHERE i = 1; RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 3. E2. Path exists on slave but not on master ==== include/rpl_row_jsondiff_error_scenario [3648/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$[1].s', 2) WHERE i = 1; RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 4. E4. Violation of slave-only uniqueness constraint in generated column ==== include/rpl_row_jsondiff_error_scenario [1062/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON, g INT GENERATED ALWAYS AS (j->"$.id") VIRTUAL); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'), (2, '{"id": 2, "value": "y"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON, g INT GENERATED ALWAYS AS (j->"$.id") VIRTUAL UNIQUE KEY); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'), (2, '{"id": 2, "value": "y"}'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$.id', 2) WHERE i = 1; RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; [connection slave] SET GLOBAL BINLOG_ROW_VALUE_OPTIONS = ''; include/stop_slave_sql.inc include/start_slave_sql.inc ==== 5. E5. Out of memory applying diff ==== include/rpl_row_jsondiff_error_scenario [5/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'simulate_oom_in_apply_json_diffs' to @@GLOBAL.debug UPDATE t SET j = JSON_SET(j, '$.id', REPEAT('a', 1024)) WHERE i = 1; ## Removing debug point 'simulate_oom_in_apply_json_diffs' from @@GLOBAL.debug RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; [connection slave] SET GLOBAL BINLOG_ROW_VALUE_OPTIONS = 'PARTIAL_JSON'; include/stop_slave_sql.inc include/start_slave_sql.inc ==== 6. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_op' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_op UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_op' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading operation type (invalid operation code) while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 7. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_path_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_path_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_path_length' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading path length to skip while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 8. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_path_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_path_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_path_length' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error skipping path while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 9. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_path' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_path UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_path' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading path length to skip while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 10. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_path_char' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_path_char UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_path_char' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=JSON_REPLACE(@2, 'ÿ$.i', '[1]') RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 11. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_doc_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_doc_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_doc_length' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading value length to skip while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 12. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_doc_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_doc_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_doc_length' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error skipping value while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 13. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_doc' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_doc UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_doc' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading value length to skip while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 14. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_doc_char' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_doc_char UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_doc_char' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=JSON_REPLACE(@2, '$.id', Error parsing json value while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 15. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [1610/FAIL] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_omit_last_column_from_table_map_event' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_omit_last_column_from_table_map_event UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_omit_last_column_from_table_map_event' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### UPDATE `test`.`t` ### WHERE ### @1=12 ### SET ### UPDATE `test`.`t` ### WHERE ### @1=90466606 ### SET ### UPDATE `test`.`t` ### WHERE ### @1=NULL ### SET RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ---- Clean up partial JSON on slave ---- [connection slave] SET @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS= @old_binlog_row_value_options; SET @@GLOBAL.BINLOG_ROW_IMAGE= @old_binlog_row_image; [connection slave] include/rpl_restart_server.inc [server_number=2 parameters: --slave_skip_errors=1062,1032,3648,3649,1610,5] [connection slave] ******** ERROR MODE: SKIP ******** ---- Configure slave ---- # Configure slave_rows_search_algorithms and binlog_format [connection slave] include/begin_replace_combination.inc [BOTH.BINLOG_FORMAT=ROW,MIXED,STATEMENT -> GLOBAL.SLAVE_ROWS_SEARCH_ALGORITHMS=INDEX_SCAN,HASH_SCAN,TABLE_SCAN] Warnings: Warning 1287 '@@slave_rows_search_algorithms' is deprecated and will be removed in a future release. # Configure partial JSON SET @old_binlog_row_image= @@GLOBAL.BINLOG_ROW_IMAGE; SET @old_binlog_row_value_options= @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS; SET @@GLOBAL.BINLOG_ROW_IMAGE = 'MINIMAL'; SET @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS = 'PARTIAL_JSON'; include/start_slave.inc ==== 16. E1. Path exists on master but not on slave, JSON_REMOVE ==== include/rpl_row_jsondiff_error_scenario [3648/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_REMOVE(j, '$[1].m') WHERE i = 1; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 17. E1. Path exists on master but not on slave, JSON_SET ==== include/rpl_row_jsondiff_error_scenario [3648/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$[1].m', 2) WHERE i = 1; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 18. E2. Path exists on slave but not on master ==== include/rpl_row_jsondiff_error_scenario [3648/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$[1].s', 2) WHERE i = 1; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 19. E4. Violation of slave-only uniqueness constraint in generated column ==== include/rpl_row_jsondiff_error_scenario [1062/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON, g INT GENERATED ALWAYS AS (j->"$.id") VIRTUAL); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'), (2, '{"id": 2, "value": "y"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON, g INT GENERATED ALWAYS AS (j->"$.id") VIRTUAL UNIQUE KEY); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'), (2, '{"id": 2, "value": "y"}'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$.id', 2) WHERE i = 1; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; [connection slave] SET GLOBAL BINLOG_ROW_VALUE_OPTIONS = ''; include/stop_slave_sql.inc include/start_slave_sql.inc ==== 20. E5. Out of memory applying diff ==== include/rpl_row_jsondiff_error_scenario [5/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'simulate_oom_in_apply_json_diffs' to @@GLOBAL.debug UPDATE t SET j = JSON_SET(j, '$.id', REPEAT('a', 1024)) WHERE i = 1; ## Removing debug point 'simulate_oom_in_apply_json_diffs' from @@GLOBAL.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; [connection slave] SET GLOBAL BINLOG_ROW_VALUE_OPTIONS = 'PARTIAL_JSON'; include/stop_slave_sql.inc include/start_slave_sql.inc ==== 21. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_op' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_op UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_op' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 22. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_path_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_path_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_path_length' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 23. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_path_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_path_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_path_length' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 24. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_path' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_path UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_path' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 25. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_path_char' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_path_char UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_path_char' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 26. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_doc_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_doc_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_doc_length' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 27. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_doc_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_doc_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_doc_length' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 28. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_doc' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_doc UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_doc' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 29. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_doc_char' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_doc_char UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_doc_char' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 30. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [1610/SKIP] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_omit_last_column_from_table_map_event' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_omit_last_column_from_table_map_event UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_omit_last_column_from_table_map_event' from @@SESSION.debug DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ---- Clean up partial JSON on slave ---- [connection slave] SET @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS= @old_binlog_row_value_options; SET @@GLOBAL.BINLOG_ROW_IMAGE= @old_binlog_row_image; [connection slave] include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start] [connection slave] SET GLOBAL SLAVE_EXEC_MODE = IDEMPOTENT; ******** ERROR MODE: IDEMPOTENT ******** ---- Configure slave ---- # Configure slave_rows_search_algorithms and binlog_format [connection slave] include/begin_replace_combination.inc [BOTH.BINLOG_FORMAT=ROW,MIXED,STATEMENT -> GLOBAL.SLAVE_ROWS_SEARCH_ALGORITHMS=INDEX_SCAN,HASH_SCAN,TABLE_SCAN] Warnings: Warning 1287 '@@slave_rows_search_algorithms' is deprecated and will be removed in a future release. # Configure partial JSON SET @old_binlog_row_image= @@GLOBAL.BINLOG_ROW_IMAGE; SET @old_binlog_row_value_options= @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS; SET @@GLOBAL.BINLOG_ROW_IMAGE = 'MINIMAL'; SET @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS = 'PARTIAL_JSON'; include/start_slave.inc ==== 31. E1. Path exists on master but not on slave, JSON_REMOVE ==== include/rpl_row_jsondiff_error_scenario [3648/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_REMOVE(j, '$[1].m') WHERE i = 1; RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 32. E1. Path exists on master but not on slave, JSON_SET ==== include/rpl_row_jsondiff_error_scenario [3648/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$[1].m', 2) WHERE i = 1; RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 33. E2. Path exists on slave but not on master ==== include/rpl_row_jsondiff_error_scenario [3648/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"m" : 1}]'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '[1, {"s" : 1}]'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$[1].s', 2) WHERE i = 1; RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 34. E4. Violation of slave-only uniqueness constraint in generated column ==== include/rpl_row_jsondiff_error_scenario [1062/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON, g INT GENERATED ALWAYS AS (j->"$.id") VIRTUAL); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'), (2, '{"id": 2, "value": "y"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON, g INT GENERATED ALWAYS AS (j->"$.id") VIRTUAL UNIQUE KEY); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'), (2, '{"id": 2, "value": "y"}'); SET SQL_LOG_BIN = 1; UPDATE t SET j = JSON_SET(j, '$.id', 2) WHERE i = 1; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; [connection slave] SET GLOBAL BINLOG_ROW_VALUE_OPTIONS = ''; include/stop_slave_sql.inc include/start_slave_sql.inc ==== 35. E5. Out of memory applying diff ==== include/rpl_row_jsondiff_error_scenario [5/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'simulate_oom_in_apply_json_diffs' to @@GLOBAL.debug UPDATE t SET j = JSON_SET(j, '$.id', REPEAT('a', 1024)) WHERE i = 1; ## Removing debug point 'simulate_oom_in_apply_json_diffs' from @@GLOBAL.debug RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; [connection slave] SET GLOBAL BINLOG_ROW_VALUE_OPTIONS = 'PARTIAL_JSON'; include/stop_slave_sql.inc include/start_slave_sql.inc ==== 36. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_op' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_op UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_op' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading operation type (invalid operation code) while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 37. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_path_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_path_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_path_length' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading path length to skip while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 38. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_path_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_path_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_path_length' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error skipping path while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 39. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_path' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_path UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_path' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading path length to skip while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 40. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_path_char' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_path_char UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_path_char' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=JSON_REPLACE(@2, 'ÿ$.i', '[1]') RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 41. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_doc_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_doc_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_doc_length' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading value length to skip while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 42. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_doc_length' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_doc_length UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_doc_length' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error skipping value while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 43. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_truncate_before_doc' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_truncate_before_doc UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_truncate_before_doc' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=Error reading value length to skip while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 44. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [3649/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_corrupt_json_diff_bad_doc_char' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_corrupt_json_diff_bad_doc_char UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_corrupt_json_diff_bad_doc_char' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### @2=JSON_REPLACE(@2, '$.id', Error parsing json value while printing JSON diff RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ==== 45. E6. Corruption in event ==== include/rpl_row_jsondiff_error_scenario [1610/IDEMPOTENT] SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; SET SQL_LOG_BIN = 0; CREATE TABLE test.t (i INT PRIMARY KEY, j JSON); INSERT INTO test.t (i, j) VALUES (1, '{"id": 1, "value": "x"}'); SET SQL_LOG_BIN = 1; ## Adding debug point 'binlog_omit_last_column_from_table_map_event' to @@SESSION.debug SELECT @@SESSION.DEBUG; @@SESSION.DEBUG d,binlog_omit_last_column_from_table_map_event UPDATE t SET j = JSON_SET(j, '$.id', '[1]') WHERE i = 1; ## Removing debug point 'binlog_omit_last_column_from_table_map_event' from @@SESSION.debug ### UPDATE `test`.`t` ### WHERE ### @1=1 ### SET ### UPDATE `test`.`t` ### WHERE ### @1=12 ### SET ### UPDATE `test`.`t` ### WHERE ### @1=90466606 ### SET ### UPDATE `test`.`t` ### WHERE ### @1=NULL ### SET RESET SLAVE; RESET MASTER; DROP TABLE test.t; RESET SLAVE ALL; RESET MASTER; RESET MASTER; CHANGE MASTER TO MASTER_USER='root',MASTER_PORT=MASTER_PORT,MASTER_HOST='localhost'; ---- Clean up partial JSON on slave ---- [connection slave] SET @@GLOBAL.BINLOG_ROW_VALUE_OPTIONS= @old_binlog_row_value_options; SET @@GLOBAL.BINLOG_ROW_IMAGE= @old_binlog_row_image; [connection master] SET @@SESSION.BINLOG_ROW_VALUE_OPTIONS= @old_binlog_row_value_options; SET @@SESSION.BINLOG_ROW_IMAGE= @old_binlog_row_image; include/end_replace_combination.inc [BOTH.BINLOG_FORMAT=ROW,MIXED,STATEMENT -> GLOBAL.SLAVE_ROWS_SEARCH_ALGORITHMS=INDEX_SCAN,HASH_SCAN,TABLE_SCAN] Warnings: Warning 1287 '@@slave_rows_search_algorithms' is deprecated and will be removed in a future release. [connection slave] include/stop_slave_sql.inc include/end_replace_combination.inc [BOTH.BINLOG_FORMAT=ROW,MIXED,STATEMENT -> GLOBAL.SLAVE_ROWS_SEARCH_ALGORITHMS=INDEX_SCAN,HASH_SCAN,TABLE_SCAN] Warnings: Warning 1287 '@@slave_rows_search_algorithms' is deprecated and will be removed in a future release. include/rpl_end.inc