Bug #112368 | Mismatched SQL for the same GTID transaction across primary and secondary | ||
---|---|---|---|
Submitted: | 17 Sep 2023 14:39 | Modified: | 21 Sep 2023 1:44 |
Reporter: | huang rong | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | MySQL Server: Group Replication | Severity: | S1 (Critical) |
Version: | 5.7.36 | OS: | Debian (Debian GNU/Linux 10 (buster)) |
Assigned to: | MySQL Verification Team | CPU Architecture: | Any |
Tags: | GTID mismatch sql, InnoDB Cluster |
[17 Sep 2023 14:39]
huang rong
[17 Sep 2023 14:40]
huang rong
On further inspection, I observed that the transaction with GTID '82e0638a-e968-11ec-9a76-9cdc71bc2950:774243853' had different content on db7 compared to db8 and db9. db7 showed an INSERT operation on the stick.data_platform table. ------------ db7 -------------------- # at 7732 #230911 3:45:28 server id 10131714 end_log_pos 7793 GTID last_committed=1 sequence_number=16 rbr_only=yes /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/; SET @@SESSION.GTID_NEXT= '82e0638a-e968-11ec-9a76-9cdc71bc2950:774243853'/*!*/; # at 7793 #230911 3:45:28 server id 10131714 end_log_pos 7871 Query thread_id=112 exec_time=0 error_code=0 SET TIMESTAMP=1694418328/*!*/; BEGIN /*!*/; # at 7871 #230911 3:45:28 server id 10131714 end_log_pos 7952 Table_map: `stick`.`data_platform` mapped to number 125 # at 7952 #230911 3:45:28 server id 10131714 end_log_pos 8048 Write_rows: table id 125 flags: STMT_END_F BINLOG ' mMX+ZBMCmZoAUQAAABAfAAAAAH0AAAAAAAEACXN0aWNreWFkcwAVZGF0YV9wbGF0Zm9ybV9tZXRy aWNzAA0D/gEDAwMDCAgICBEDA/cBAAAA mMX+ZB4CmZoAYAAAAHAfAAAAAH0AAAAAAAEAAgAN//8A4AEJAAAGAQEAAAAEAAAAAQAAAAMAAAAD AAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAGT+xZiJOm0Y '/*!*/; ### INSERT INTO `stick`.`data_platform` ### SET ### @1=2305 /* INT meta=0 nullable=0 is_null=0 */ ### @2=6 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */ ### @3=1 /* TINYINT meta=0 nullable=0 is_null=0 */ ### @4=1 /* INT meta=0 nullable=0 is_null=0 */ ### @5=4 /* INT meta=0 nullable=0 is_null=0 */ ### @6=1 /* INT meta=0 nullable=0 is_null=0 */ ### @7=3 /* INT meta=0 nullable=0 is_null=0 */ ### @8=3 /* LONGINT meta=0 nullable=0 is_null=0 */ ### @9=0 /* LONGINT meta=0 nullable=0 is_null=0 */ ### @10=3 /* LONGINT meta=0 nullable=0 is_null=0 */ ### @11=0 /* LONGINT meta=0 nullable=0 is_null=0 */ ### @12=1694418328 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @13=409811593 /* INT meta=0 nullable=0 is_null=0 */ # at 8048 #230911 3:45:28 server id 10131714 end_log_pos 8075 Xid = 771 COMMIT/*!*/; In contrast, db8 showed an INSERT operation on the stick.external table. ----------------- db8 ------------------- # at 211879926 #230911 3:27:59 server id 10131714 end_log_pos 211879987 GTID last_committed=65000 sequence_number=65004 rbr_only=yes /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/; SET @@SESSION.GTID_NEXT= '82e0638a-e968-11ec-9a76-9cdc71bc2950:774243853'/*!*/; # at 211879987 #230911 3:27:59 server id 10131714 end_log_pos 211880051 Query thread_id=1696379532 exec_time=166 error_code=0 SET TIMESTAMP=1694417279/*!*/; /*!\C utf8mb4 *//*!*/; SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=8/*!*/; BEGIN /*!*/; # at 211880051 #230911 3:27:59 server id 10131714 end_log_pos 211880121 Table_map: `stick`.`external` mapped to number 110 # at 211880121 #230911 3:27:59 server id 10131714 end_log_pos 211880180 Write_rows: table id 110 flags: STMT_END_F BINLOG ' f8H+ZBMCmZoARgAAALkIoQwAAG4AAAAAAAEACXN0aWNreWFkcwALZXh0ZXJuYWxfYWQACQ/8/AEJ ARL8AQb8AwMDAAPGAQ== f8H+ZB4CmZoAOwAAAPQIoQwAAG4AAAAAAAEAAgAJ///G/xIAMTIzNzQxMF8yNzYzMDAxNjE2AJIW AAA= '/*!*/; ### INSERT INTO `stick`.`external` ### SET ### @1='1237410_2763001616' /* VARSTRING(1020) meta=1020 nullable=0 is_null=0 */ ### @2=NULL /* MEDIUMBLOB/MEDIUMTEXT meta=3 nullable=1 is_null=1 */ ### @3=NULL /* MEDIUMBLOB/MEDIUMTEXT meta=3 nullable=1 is_null=1 */ ### @4=0 /* TINYINT meta=0 nullable=0 is_null=0 */ ### @5=5778 /* MEDIUMINT meta=0 nullable=0 is_null=0 */ ### @6=0 /* TINYINT meta=0 nullable=0 is_null=0 */ ### @7=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */ ### @8=NULL /* MEDIUMBLOB/MEDIUMTEXT meta=3 nullable=1 is_null=1 */ ### @9=NULL /* TINYINT meta=0 nullable=1 is_null=1 */ # at 211880180 #230911 3:27:59 server id 10131714 end_log_pos 211880207 Xid = 5027513433 COMMIT/*!*/;
[17 Sep 2023 14:59]
huang rong
error.log of db9
Attachment: error.log.db9 (application/octet-stream, text), 56.75 KiB.
[17 Sep 2023 14:59]
huang rong
error.log of db8
Attachment: error.log.db8 (application/octet-stream, text), 59.01 KiB.
[17 Sep 2023 15:00]
huang rong
error.log of db7
Attachment: error.log.db7.sql (application/octet-stream, text), 55.75 KiB.
[17 Sep 2023 15:02]
huang rong
my.cnf of db7 ------------- # # Ansible managed # [mysql_safe] pid_file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock nice = 0 [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld] query_cache_type = 1 query_cache_size = 134217728 default_password_lifetime=0 relay-log=db7-fw-us-east-relay-bin disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" lower-case-table-names=1 innodb_flush_log_at_trx_commit = 1 sync_binlog=1 skip-slave-start slave_parallel_workers=4 slave_preserve_commit_order=1 slave_parallel_type=LOGICAL_CLOCK tmp_table_size = 67108864 thread_stack = 192K skip-name-resolve = 1 innodb_undo_tablespaces = 3 server-id = 10131714 gtid-mode = ON innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:50G read_rnd_buffer_size = 8388608 max_binlog_size = 500M innodb_page_cleaners = 16 innodb_write_io_threads = 16 port = 3306 tmpdir = /var/tmp max_connections = 1500 read_only = 1 innodb_buffer_pool_size = 200GB log-bin = mysql-bin #binlog-ignore-db = mysql binlog_transaction_dependency_tracking=WRITESET innodb_flush_method = O_DIRECT basedir = /usr bind-address = 10.1.1.14 max_allowed_packet = 16M datadir = /var/lib/mysql auto-increment-increment = 1 enforce-gtid-consistency = 1 range_optimizer_max_mem_size = 0 max_connect_errors = 3600 table_open_cache = 6000 slow-query-log = 1 innodb_undo_log_truncate = 1 back_log = 200 explicit_defaults_for_timestamp = 1 innodb_log_file_size = 1024M sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" innodb_read_io_threads = 16 innodb_status_output_locks = 1 group-concat-max-len = 1024000 read_buffer_size = 4194304 binlog-format = row user = mysql #replicate-do-db = stickyads pid-file = /var/run/mysqld/mysqld.pid join_buffer_size = 8388608 thread_cache_size = 8 innodb_flush_log_at_trx_commit = 1 auto-increment-offset = 2 log-bin-index = mysql-bin.index innodb_buffer_pool_dump_at_shutdown = 0 socket = /var/run/mysqld/mysqld.sock slow-query-log-file = /var/log/mysql/mysqld-slow.log log-error = /var/log/mysql/error.log sort_buffer_size = 4194304 log-slave-updates = 1 innodb_buffer_pool_instances = 16 skip-external-locking = 1 expire_logs_days = 33 net_read_timeout = 28800 net_write_timeout = 28800 super_read_only = ON innodb_buffer_pool_load_at_startup = 0 long_query_time = 1 innodb_undo_logs = 128 innodb_io_capacity = 5000 innodb_max_undo_log_size = 2G key_buffer_size = 128M innodb_io_capacity_max = 10000 binlog_checksum = NONE master_info_repository = TABLE relay_log_info_repository = TABLE transaction_write_set_extraction = XXHASH64 loose_group_replication_allow_local_disjoint_gtids_join = OFF loose_group_replication_allow_local_lower_version_join = OFF loose_group_replication_auto_increment_increment = 7 loose_group_replication_bootstrap_group = OFF #loose_group_replication_bootstrap_group = ON loose_group_replication_components_stop_timeout = 31536000 loose_group_replication_compression_threshold = 1000000 loose_group_replication_enforce_update_everywhere_checks = OFF loose_group_replication_exit_state_action = READ_ONLY loose_group_replication_flow_control_applier_threshold = 25000 loose_group_replication_flow_control_certifier_threshold = 25000 loose_group_replication_flow_control_mode = QUOTA loose_group_replication_force_members = loose_group_replication_group_name = 82e0638a-e968-11ec-9a76-9cdc71bc2950 loose_group_replication_group_seeds = db8:33061,db9:33061 loose_group_replication_gtid_assignment_block_size = 1000000 loose_group_replication_ip_whitelist = AUTOMATIC loose_group_replication_local_address = db7:33061 loose_group_replication_member_weight = 80 loose_group_replication_poll_spin_loops = 0 loose_group_replication_recovery_complete_at = TRANSACTIONS_APPLIED loose_group_replication_recovery_reconnect_interval = 60 loose_group_replication_recovery_retry_count = 10 loose_group_replication_recovery_ssl_ca = loose_group_replication_recovery_ssl_capath = loose_group_replication_recovery_ssl_cert = loose_group_replication_recovery_ssl_cipher = loose_group_replication_recovery_ssl_crl = loose_group_replication_recovery_ssl_crlpath = loose_group_replication_recovery_ssl_key = loose_group_replication_recovery_ssl_verify_server_cert = OFF loose_group_replication_recovery_use_ssl = ON loose_group_replication_single_primary_mode = ON loose_group_replication_ssl_mode = REQUIRED loose_group_replication_start_on_boot = ON loose_group_replication_transaction_size_limit = 0 loose_group_replication_unreachable_majority_timeout = 0 [mysqldump] quick = 1 quote-names = 1 max_allowed_packet = 64M # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored.
[17 Sep 2023 15:02]
huang rong
my.cnf of db8 ------------------ # # Ansible managed # [mysql_safe] pid_file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock nice = 0 [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld] query_cache_type = 1 query_cache_size = 134217728 default_password_lifetime=0 relay-log=db8-fw-us-east-relay-bin disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" skip-slave-start slave_parallel_workers=4 slave_preserve_commit_order=1 slave_parallel_type=LOGICAL_CLOCK lower-case-table-names=1 innodb_flush_log_at_trx_commit = 1 sync_binlog=1 tmp_table_size = 67108864 thread_stack = 192K skip-name-resolve = 1 innodb_undo_tablespaces = 3 server-id = 10131711 gtid-mode = ON innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:50G #binlog-do-db = stickyads read_rnd_buffer_size = 8388608 max_binlog_size = 500M innodb_page_cleaners = 16 innodb_write_io_threads = 16 port = 3306 tmpdir = /var/tmp max_connections = 1500 read_only = 1 innodb_buffer_pool_size = 200GB log-bin = mysql-bin #binlog-ignore-db = mysql binlog_transaction_dependency_tracking=WRITESET innodb_flush_method = O_DIRECT basedir = /usr bind-address = 10.1.1.11 max_allowed_packet = 16M datadir = /var/lib/mysql auto-increment-increment = 1 enforce-gtid-consistency = 1 range_optimizer_max_mem_size = 0 max_connect_errors = 3600 table_open_cache = 6000 slow-query-log = 1 innodb_undo_log_truncate = 1 back_log = 200 explicit_defaults_for_timestamp = 1 innodb_log_file_size = 1024M sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" innodb_read_io_threads = 16 innodb_status_output_locks = 1 group-concat-max-len = 1024000 read_buffer_size = 4194304 binlog-format = row user = mysql #replicate-do-db = stickyads pid-file = /var/run/mysqld/mysqld.pid join_buffer_size = 8388608 thread_cache_size = 8 innodb_flush_log_at_trx_commit = 1 auto-increment-offset = 2 log-bin-index = mysql-bin.index innodb_buffer_pool_dump_at_shutdown = 0 socket = /var/run/mysqld/mysqld.sock slow-query-log-file = /var/log/mysql/mysqld-slow.log log-error = /var/log/mysql/error.log sort_buffer_size = 4194304 log-slave-updates = 1 innodb_buffer_pool_instances = 16 skip-external-locking = 1 expire_logs_days = 30 net_read_timeout = 28800 net_write_timeout = 28800 super_read_only = ON innodb_buffer_pool_load_at_startup = 0 long_query_time = 1 innodb_undo_logs = 128 innodb_io_capacity = 5000 innodb_max_undo_log_size = 2G key_buffer_size = 128M innodb_io_capacity_max = 10000 binlog_checksum = NONE master_info_repository = TABLE relay_log_info_repository = TABLE transaction_write_set_extraction = XXHASH64 loose_group_replication_allow_local_disjoint_gtids_join = OFF loose_group_replication_allow_local_lower_version_join = OFF loose_group_replication_auto_increment_increment = 7 loose_group_replication_bootstrap_group = OFF loose_group_replication_components_stop_timeout = 31536000 loose_group_replication_compression_threshold = 1000000 loose_group_replication_enforce_update_everywhere_checks = OFF loose_group_replication_exit_state_action = READ_ONLY loose_group_replication_flow_control_applier_threshold = 25000 loose_group_replication_flow_control_certifier_threshold = 25000 loose_group_replication_flow_control_mode = QUOTA loose_group_replication_force_members = loose_group_replication_group_name = 82e0638a-e968-11ec-9a76-9cdc71bc2950 loose_group_replication_group_seeds = db7:33061,db9:33061 loose_group_replication_gtid_assignment_block_size = 1000000 loose_group_replication_ip_whitelist = AUTOMATIC loose_group_replication_local_address = db8:33061 loose_group_replication_member_weight = 70 loose_group_replication_poll_spin_loops = 0 loose_group_replication_recovery_complete_at = TRANSACTIONS_APPLIED loose_group_replication_recovery_reconnect_interval = 60 loose_group_replication_recovery_retry_count = 10 loose_group_replication_recovery_ssl_ca = loose_group_replication_recovery_ssl_capath = loose_group_replication_recovery_ssl_cert = loose_group_replication_recovery_ssl_cipher = loose_group_replication_recovery_ssl_crl = loose_group_replication_recovery_ssl_crlpath = loose_group_replication_recovery_ssl_key = loose_group_replication_recovery_ssl_verify_server_cert = OFF loose_group_replication_recovery_use_ssl = ON loose_group_replication_single_primary_mode = ON loose_group_replication_ssl_mode = REQUIRED loose_group_replication_start_on_boot = ON loose_group_replication_transaction_size_limit = 0 loose_group_replication_unreachable_majority_timeout = 0 [mysqldump] quick = 1 quote-names = 1 max_allowed_packet = 64M # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. #
[17 Sep 2023 15:03]
huang rong
my.cnf of db9 ------------------------- # # Ansible managed # [mysql_safe] pid_file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock nice = 0 [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld] query_cache_type = 1 query_cache_size = 134217728 default_password_lifetime=0 relay-log=db9-fw-us-east-relay-bin disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" skip-slave-start slave_parallel_workers=4 slave_preserve_commit_order=1 slave_parallel_type=LOGICAL_CLOCK lower-case-table-names=1 innodb_flush_log_at_trx_commit = 1 sync_binlog=1 tmp_table_size = 67108864 thread_stack = 192K skip-name-resolve = 1 innodb_undo_tablespaces = 3 server-id = 10131712 gtid-mode = ON innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:50G #binlog-do-db = stickyads read_rnd_buffer_size = 8388608 max_binlog_size = 500M innodb_page_cleaners = 16 innodb_write_io_threads = 16 port = 3306 tmpdir = /var/tmp max_connections = 1500 read_only = 1 innodb_buffer_pool_size = 200GB log-bin = mysql-bin #binlog-ignore-db = mysql binlog_transaction_dependency_tracking=WRITESET innodb_flush_method = O_DIRECT basedir = /usr bind-address = 10.1.1.12 max_allowed_packet = 16M datadir = /var/lib/mysql auto-increment-increment = 1 enforce-gtid-consistency = 1 range_optimizer_max_mem_size = 0 max_connect_errors = 3600 table_open_cache = 6000 slow-query-log = 1 innodb_undo_log_truncate = 1 back_log = 200 explicit_defaults_for_timestamp = 1 innodb_log_file_size = 1024M sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" innodb_read_io_threads = 16 innodb_status_output_locks = 1 group-concat-max-len = 1024000 read_buffer_size = 4194304 binlog-format = row user = mysql #replicate-do-db = stickyads pid-file = /var/run/mysqld/mysqld.pid join_buffer_size = 8388608 thread_cache_size = 8 innodb_flush_log_at_trx_commit = 1 auto-increment-offset = 2 log-bin-index = mysql-bin.index innodb_buffer_pool_dump_at_shutdown = 0 socket = /var/run/mysqld/mysqld.sock slow-query-log-file = /var/log/mysql/mysqld-slow.log log-error = /var/log/mysql/error.log sort_buffer_size = 4194304 log-slave-updates = 1 innodb_buffer_pool_instances = 16 skip-external-locking = 1 expire_logs_days = 33 net_read_timeout = 28800 net_write_timeout = 28800 super_read_only = ON innodb_buffer_pool_load_at_startup = 0 long_query_time = 1 innodb_undo_logs = 128 innodb_io_capacity = 5000 innodb_max_undo_log_size = 2G key_buffer_size = 128M innodb_io_capacity_max = 10000 binlog_checksum = NONE master_info_repository = TABLE relay_log_info_repository = TABLE transaction_write_set_extraction = XXHASH64 loose_group_replication_allow_local_disjoint_gtids_join = OFF loose_group_replication_allow_local_lower_version_join = OFF loose_group_replication_auto_increment_increment = 7 loose_group_replication_bootstrap_group = OFF loose_group_replication_components_stop_timeout = 31536000 loose_group_replication_compression_threshold = 1000000 loose_group_replication_enforce_update_everywhere_checks = OFF loose_group_replication_exit_state_action = READ_ONLY loose_group_replication_flow_control_applier_threshold = 25000 loose_group_replication_flow_control_certifier_threshold = 25000 loose_group_replication_flow_control_mode = QUOTA loose_group_replication_force_members = loose_group_replication_group_name = 82e0638a-e968-11ec-9a76-9cdc71bc2950 loose_group_replication_group_seeds = db7:33061,db8:33061 loose_group_replication_gtid_assignment_block_size = 1000000 loose_group_replication_ip_whitelist = AUTOMATIC loose_group_replication_local_address = db9:33061 loose_group_replication_member_weight = 60 loose_group_replication_poll_spin_loops = 0 loose_group_replication_recovery_complete_at = TRANSACTIONS_APPLIED loose_group_replication_recovery_reconnect_interval = 60 loose_group_replication_recovery_retry_count = 10 loose_group_replication_recovery_ssl_ca = loose_group_replication_recovery_ssl_capath = loose_group_replication_recovery_ssl_cert = loose_group_replication_recovery_ssl_cipher = loose_group_replication_recovery_ssl_crl = loose_group_replication_recovery_ssl_crlpath = loose_group_replication_recovery_ssl_key = loose_group_replication_recovery_ssl_verify_server_cert = OFF loose_group_replication_recovery_use_ssl = ON loose_group_replication_single_primary_mode = ON loose_group_replication_ssl_mode = REQUIRED loose_group_replication_start_on_boot = ON loose_group_replication_transaction_size_limit = 0 loose_group_replication_unreachable_majority_timeout = 0 [mysqldump] quick = 1 quote-names = 1 max_allowed_packet = 64M # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. #
[20 Sep 2023 19:53]
MySQL Verification Team
Hi, I spent a while working on this bug report but I am not able to reproduce this. I see in data provided that your system did show a problem but I need a way to properly reproduce this and I cannot.
[21 Sep 2023 1:44]
huang rong
Thank you for the time you've invested in this bug. Concurrently, I've been fervently attempting to reproduce this phenomenon, albeit to no avail thus far. From my comprehension, in a single-primary mode MGR, the primary node, upon initiating a transaction, doesn't undergo conflict detection. Prior to the completion of the transaction, it logs to binlog. Post the binlog inscription on the primary, it then synchronizes to the secondary nodes. Even if the log's two-phase commit remains unfulfilled and the primary node reboots for crash recovery, it merely reapplies the logs rather than generating a fresh binlog. This encapsulates my grasp of the MySQL mechanism. Yet, judging by the content I've shared, transactions at the same GTID point between primary and secondary nodes aren't consistent, which strikes me as profoundly perplexing.
[21 Sep 2023 2:29]
MySQL Verification Team
Thanks. Data looks weird to say the least. Replication team will take a look but since we cannot reproduce this it could be a temporary hw error or some weird glitch that will never happen again and on top it is 5.7.36 that is not very modern release.