diff options
author | unknown <knielsen@knielsen-hq.org> | 2012-09-13 14:31:29 +0200 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2012-09-13 14:31:29 +0200 |
commit | 288eeb3a31e4bfb52180f3906a4d354ac9cc457e (patch) | |
tree | 57555aba1d6f3bcdf97f180298d1c97dddbc58b5 /mysql-test | |
parent | 0697ee265fa4fe4d617dc96194fcf2532fd73402 (diff) | |
download | mariadb-git-288eeb3a31e4bfb52180f3906a4d354ac9cc457e.tar.gz |
MDEV-232: Remove one fsync() from commit phase.
Introduce a new storage engine API method commit_checkpoint_request().
This is used to replace the fsync() at the end of every storage engine
commit with a single fsync() when a binlog is rotated.
Binlog rotation is now done during group commit instead of being
delayed until unlog(), removing some server stall and avoiding an
expensive lock/unlock of LOCK_log inside unlog().
Diffstat (limited to 'mysql-test')
27 files changed, 570 insertions, 250 deletions
diff --git a/mysql-test/extra/rpl_tests/rpl_insert_delayed.test b/mysql-test/extra/rpl_tests/rpl_insert_delayed.test index df08622b0bd..bb34f4be207 100644 --- a/mysql-test/extra/rpl_tests/rpl_insert_delayed.test +++ b/mysql-test/extra/rpl_tests/rpl_insert_delayed.test @@ -133,7 +133,7 @@ if (`SELECT @@global.binlog_format = 'STATEMENT'`) { #must show two INSERT DELAYED --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) - --let $binlog_limit= 1,6 + --let $binlog_limit= 2,6 --source include/show_binlog_events.inc } select * from t1; diff --git a/mysql-test/r/mysqlbinlog.result b/mysql-test/r/mysqlbinlog.result index 33904dfd9bd..255b0679244 100644 --- a/mysql-test/r/mysqlbinlog.result +++ b/mysql-test/r/mysqlbinlog.result @@ -892,6 +892,7 @@ DROP DATABASE test1; FLUSH LOGS; show binlog events in 'master-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Query # # CREATE DATABASE test1 master-bin.000002 # Query # # use `test1`; CREATE TABLE t1(id int) master-bin.000002 # Query # # DROP DATABASE test1 diff --git a/mysql-test/r/mysqlbinlog2.result b/mysql-test/r/mysqlbinlog2.result index 806cf74479e..bf65bab602d 100644 --- a/mysql-test/r/mysqlbinlog2.result +++ b/mysql-test/r/mysqlbinlog2.result @@ -697,7 +697,6 @@ SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; BEGIN /*!*/; -SET INSERT_ID=6/*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; @@ -1483,17 +1482,6 @@ COMMIT /*!*/; DELIMITER ; DELIMITER /*!*/; -SET TIMESTAMP=1579609943/*!*/; -SET @@session.pseudo_thread_id=999999999/*!*/; -SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; -SET @@session.sql_mode=0/*!*/; -SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; -/*!\C latin1 *//*!*/; -SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; -SET @@session.lc_time_names=0/*!*/; -SET @@session.collation_database=DEFAULT/*!*/; -BEGIN -/*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; diff --git a/mysql-test/suite/binlog/r/binlog_checkpoint.result b/mysql-test/suite/binlog/r/binlog_checkpoint.result new file mode 100644 index 00000000000..7532e33367e --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_checkpoint.result @@ -0,0 +1,88 @@ +SET @old_max_binlog_size= @@global.max_binlog_size; +SET GLOBAL max_binlog_size= 4096; +SET @old_innodb_flush_log_at_trx_commit= @@global.innodb_flush_log_at_trx_commit; +SET GLOBAL innodb_flush_log_at_trx_commit= 1; +RESET MASTER; +CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb; +CREATE TABLE t2 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Myisam; +*** Test that RESET MASTER waits for pending commit checkpoints to complete. +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con1_ready WAIT_FOR con1_go"; +INSERT INTO t1 VALUES (1, REPEAT("x", 4100)); +SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; +INSERT INTO t2 VALUES (1, REPEAT("x", 4100)); +INSERT INTO t2 VALUES (2, REPEAT("x", 4100)); +show binary logs; +Log_name File_size +master-bin.000001 # +master-bin.000002 # +master-bin.000003 # +master-bin.000004 # +show binlog events in 'master-bin.00000<binlog_start>' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.00000<binlog_start> # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.000001 +SET DEBUG_SYNC= "execute_command_after_close_tables SIGNAL reset_master_done"; +RESET MASTER; +This will timeout, as RESET MASTER is blocked +SET DEBUG_SYNC= "now WAIT_FOR reset_master_done TIMEOUT 1"; +Warnings: +Warning 1639 debug sync point wait timed out +SET DEBUG_SYNC= "now SIGNAL con1_go"; +show binary logs; +Log_name File_size +master-bin.000001 # +show binlog events in 'master-bin.000001' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000001 # Binlog_checkpoint # # master-bin.000001 +*** Test that binlog N is active, and commit checkpoint for (N-1) is +*** done while there is still a pending commit checkpoint for (N-2). +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con1_ready WAIT_FOR con1_continue"; +INSERT INTO t1 VALUES (20, REPEAT("x", 4100)); +SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con2_ready WAIT_FOR con2_continue"; +INSERT INTO t1 VALUES (21, REPEAT("x", 4100)); +SET DEBUG_SYNC= "now WAIT_FOR con2_ready"; +show binary logs; +Log_name File_size +master-bin.000001 # +master-bin.000002 # +master-bin.000003 # +show binlog events in 'master-bin.000001' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000001 # Binlog_checkpoint # # master-bin.000001 +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Rotate # # master-bin.000002;pos=<binlog_start> +show binlog events in 'master-bin.000002' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000002 # Binlog_checkpoint # # master-bin.000001 +master-bin.000002 # Query # # BEGIN +master-bin.000002 # Table_map # # table_id: # (test.t1) +master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000002 # Xid # # COMMIT /* XID */ +master-bin.000002 # Rotate # # master-bin.000003;pos=<binlog_start> +show binlog events in 'master-bin.000003' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000003 # Binlog_checkpoint # # master-bin.000001 +SET DEBUG_SYNC= "now SIGNAL con2_continue"; +con1 is still pending, no new binlog checkpoint should have been logged. +show binlog events in 'master-bin.000003' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000003 # Binlog_checkpoint # # master-bin.000001 +SET DEBUG_SYNC= "now SIGNAL con1_continue"; +No commit checkpoints are pending, a new binlog checkpoint should have been logged. +show binlog events in 'master-bin.000003' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000003 # Binlog_checkpoint # # master-bin.000001 +master-bin.000003 # Binlog_checkpoint # # master-bin.000003 +DROP TABLE t1, t2; +SET GLOBAL max_binlog_size= @old_max_binlog_size; +SET GLOBAL innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit; diff --git a/mysql-test/suite/binlog/r/binlog_mdev342.result b/mysql-test/suite/binlog/r/binlog_mdev342.result index 0e1d8f8ac78..6ec6dcd783b 100644 --- a/mysql-test/suite/binlog/r/binlog_mdev342.result +++ b/mysql-test/suite/binlog/r/binlog_mdev342.result @@ -21,6 +21,7 @@ master-bin.000002 # show binlog events in 'master-bin.000001' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000001 # Binlog_checkpoint # # master-bin.000001 master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) diff --git a/mysql-test/suite/binlog/r/binlog_row_binlog.result b/mysql-test/suite/binlog/r/binlog_row_binlog.result index 26710178cd8..99ab1ac9ec2 100644 --- a/mysql-test/suite/binlog/r/binlog_row_binlog.result +++ b/mysql-test/suite/binlog/r/binlog_row_binlog.result @@ -234,6 +234,7 @@ master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Rotate # # master-bin.000002;pos=4 show binlog events in 'master-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ set @ac = @@autocommit; set autocommit= 0; diff --git a/mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result b/mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result index ae732ffcc08..55f4154574b 100644 --- a/mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result +++ b/mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result @@ -34,8 +34,8 @@ DELIMITER /*!*/; # at # #010909 4:46:40 server id # end_log_pos # Start: binlog v 4, server v #.##.## created 010909 4:46:40 at startup ROLLBACK/*!*/; -#010909 4:46:40 server id # end_log_pos # Binlog checkpoint master-bin.000001 # at # +#010909 4:46:40 server id # end_log_pos # Binlog checkpoint master-bin.000001 # at # use `new_test1`/*!*/; #010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 @@ -230,8 +230,8 @@ DELIMITER /*!*/; # at # #010909 4:46:40 server id # end_log_pos # Start: binlog v 4, server v #.##.## created 010909 4:46:40 at startup ROLLBACK/*!*/; -#010909 4:46:40 server id # end_log_pos # Binlog checkpoint master-bin.000001 # at # +#010909 4:46:40 server id # end_log_pos # Binlog checkpoint master-bin.000001 # at # use `new_test1`/*!*/; #010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 diff --git a/mysql-test/suite/binlog/r/binlog_stm_binlog.result b/mysql-test/suite/binlog/r/binlog_stm_binlog.result index f9d9fa1d18d..d676f5184ac 100644 --- a/mysql-test/suite/binlog/r/binlog_stm_binlog.result +++ b/mysql-test/suite/binlog/r/binlog_stm_binlog.result @@ -145,6 +145,7 @@ master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Rotate # # master-bin.000002;pos=4 show binlog events in 'master-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ set @ac = @@autocommit; set autocommit= 0; diff --git a/mysql-test/suite/binlog/r/binlog_xa_recover.result b/mysql-test/suite/binlog/r/binlog_xa_recover.result index 41df149a928..0ac14fd7f7d 100644 --- a/mysql-test/suite/binlog/r/binlog_xa_recover.result +++ b/mysql-test/suite/binlog/r/binlog_xa_recover.result @@ -1,175 +1,198 @@ SET GLOBAL max_binlog_size= 4096; +SET GLOBAL innodb_flush_log_at_trx_commit= 1; +RESET MASTER; CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb; -CREATE TABLE t2 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Myisam; -SET @@global.debug_dbug='+d,skip_commit_ordered'; -INSERT INTO t1 VALUES (0, REPEAT("x", 4100)); -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con1_ready WAIT_FOR _ever"; +INSERT INTO t1 VALUES (100, REPEAT("x", 4100)); +INSERT INTO t1 VALUES (101, REPEAT("x", 4100)); +INSERT INTO t1 VALUES (102, REPEAT("x", 4100)); +SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con1_wait WAIT_FOR con1_cont"; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con1_ready WAIT_FOR _ever"; INSERT INTO t1 VALUES (1, REPEAT("x", 4100)); -SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; -INSERT INTO t2 VALUES (1, "force binlog rotation"); -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con2_ready WAIT_FOR _ever"; +SET DEBUG_SYNC= "now WAIT_FOR con1_wait"; +SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con2_wait WAIT_FOR con2_cont"; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con2_ready WAIT_FOR _ever"; INSERT INTO t1 VALUES (2, NULL); -SET DEBUG_SYNC= "now WAIT_FOR con2_ready"; -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con3_ready WAIT_FOR _ever"; +SET DEBUG_SYNC= "now WAIT_FOR con2_wait"; +SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con3_wait WAIT_FOR con3_cont"; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con3_ready WAIT_FOR _ever"; INSERT INTO t1 VALUES (3, REPEAT("x", 4100)); +SET DEBUG_SYNC= "now WAIT_FOR con3_wait"; +SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con4_wait WAIT_FOR con4_cont"; +SET SESSION debug_dbug="+d,crash_commit_after_log"; +INSERT INTO t1 VALUES (4, NULL); +SET DEBUG_SYNC= "now WAIT_FOR con4_wait"; +SET DEBUG_SYNC= "now SIGNAL con1_cont"; +SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; +SET DEBUG_SYNC= "now SIGNAL con2_cont"; +SET DEBUG_SYNC= "now WAIT_FOR con2_ready"; +SET DEBUG_SYNC= "now SIGNAL con3_cont"; SET DEBUG_SYNC= "now WAIT_FOR con3_ready"; -INSERT INTO t2 VALUES (2, "force binlog rotation"); -FLUSH TABLES t2; show binary logs; Log_name File_size master-bin.000001 # master-bin.000002 # master-bin.000003 # master-bin.000004 # -show binlog events in 'master-bin.000001' from <binlog_start>; -Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION -master-bin.000001 # Binlog_checkpoint # # master-bin.000001 -master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb -master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Myisam -master-bin.000001 # Query # # BEGIN -master-bin.000001 # Table_map # # table_id: # (test.t1) -master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Xid # # COMMIT /* XID */ -master-bin.000001 # Rotate # # master-bin.000002;pos=<binlog_start> -show binlog events in 'master-bin.000002' from <binlog_start>; -Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000002 # Format_desc # # SERVER_VERSION, BINLOG_VERSION -master-bin.000002 # Binlog_checkpoint # # master-bin.000002 -master-bin.000002 # Query # # BEGIN -master-bin.000002 # Table_map # # table_id: # (test.t1) -master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000002 # Xid # # COMMIT /* XID */ -master-bin.000002 # Query # # BEGIN -master-bin.000002 # Table_map # # table_id: # (test.t2) -master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000002 # Query # # COMMIT -master-bin.000002 # Rotate # # master-bin.000003;pos=<binlog_start> +master-bin.000005 # +master-bin.000006 # show binlog events in 'master-bin.000003' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION master-bin.000003 # Binlog_checkpoint # # master-bin.000002 +master-bin.000003 # Binlog_checkpoint # # master-bin.000003 master-bin.000003 # Query # # BEGIN master-bin.000003 # Table_map # # table_id: # (test.t1) master-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000003 # Xid # # COMMIT /* XID */ -master-bin.000003 # Query # # BEGIN -master-bin.000003 # Table_map # # table_id: # (test.t1) -master-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000003 # Xid # # COMMIT /* XID */ -master-bin.000003 # Query # # BEGIN -master-bin.000003 # Table_map # # table_id: # (test.t2) -master-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000003 # Query # # COMMIT master-bin.000003 # Rotate # # master-bin.00000<binlog_start>;pos=<binlog_start> show binlog events in 'master-bin.00000<binlog_start>' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info master-bin.00000<binlog_start> # Format_desc # # SERVER_VERSION, BINLOG_VERSION -master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.000002 -master-bin.00000<binlog_start> # Query # # use `test`; FLUSH TABLES t2 -We should see only one entry here, a=0: -SELECT a FROM t1 ORDER BY a; -a -0 -PURGE BINARY LOGS TO "master-bin.000004"; +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.000003 +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.00000<binlog_start> +master-bin.00000<binlog_start> # Query # # BEGIN +master-bin.00000<binlog_start> # Table_map # # table_id: # (test.t1) +master-bin.00000<binlog_start> # Write_rows # # table_id: # flags: STMT_END_F +master-bin.00000<binlog_start> # Xid # # COMMIT /* XID */ +master-bin.00000<binlog_start> # Rotate # # master-bin.000005;pos=<binlog_start> +show binlog events in 'master-bin.000005' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000005 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000005 # Binlog_checkpoint # # master-bin.00000<binlog_start> +master-bin.000005 # Query # # BEGIN +master-bin.000005 # Table_map # # table_id: # (test.t1) +master-bin.000005 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000005 # Xid # # COMMIT /* XID */ +master-bin.000005 # Query # # BEGIN +master-bin.000005 # Table_map # # table_id: # (test.t1) +master-bin.000005 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000005 # Xid # # COMMIT /* XID */ +master-bin.000005 # Rotate # # master-bin.000006;pos=<binlog_start> +show binlog events in 'master-bin.000006' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000006 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.000006 # Binlog_checkpoint # # master-bin.00000<binlog_start> +PURGE BINARY LOGS TO "master-bin.000006"; show binary logs; Log_name File_size -master-bin.000002 # -master-bin.000003 # master-bin.000004 # -SET SESSION debug_dbug="+d,crash_commit_after_log"; -INSERT INTO t1 VALUES (4, NULL); +master-bin.000005 # +master-bin.000006 # +SET DEBUG_SYNC= "now SIGNAL con4_cont"; Got one of the listed errors SELECT a FROM t1 ORDER BY a; a -0 1 2 3 4 -*** Test that RESET MASTER waits for pending XIDs to be unlogged. -SET @old_max_binlog_size= @@global.max_binlog_size; +100 +101 +102 +Test that with multiple binlog checkpoints, recovery starts from the last one. SET GLOBAL max_binlog_size= 4096; -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con10_ready WAIT_FOR con10_go"; -INSERT INTO t1 VALUES (10, NULL); +SET GLOBAL innodb_flush_log_at_trx_commit= 1; +RESET MASTER; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con10_ready WAIT_FOR con10_cont"; +INSERT INTO t1 VALUES (10, REPEAT("x", 4100)); SET DEBUG_SYNC= "now WAIT_FOR con10_ready"; -INSERT INTO t2 VALUES (10, REPEAT("x", 4100)); -INSERT INTO t2 VALUES (11, REPEAT("x", 4100)); +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con11_ready WAIT_FOR con11_cont"; +INSERT INTO t1 VALUES (11, REPEAT("x", 4100)); +SET DEBUG_SYNC= "now WAIT_FOR con11_ready"; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con12_ready WAIT_FOR con12_cont"; +INSERT INTO t1 VALUES (12, REPEAT("x", 4100)); +SET DEBUG_SYNC= "now WAIT_FOR con12_ready"; +INSERT INTO t1 VALUES (13, NULL); show binary logs; Log_name File_size +master-bin.000001 # master-bin.000002 # master-bin.000003 # master-bin.000004 # -master-bin.000005 # -master-bin.000006 # -master-bin.000007 # -SET DEBUG_SYNC= "execute_command_after_close_tables SIGNAL reset_master_done"; +show binlog events in 'master-bin.00000<binlog_start>' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.00000<binlog_start> # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.000001 +master-bin.00000<binlog_start> # Query # # BEGIN +master-bin.00000<binlog_start> # Table_map # # table_id: # (test.t1) +master-bin.00000<binlog_start> # Write_rows # # table_id: # flags: STMT_END_F +master-bin.00000<binlog_start> # Xid # # COMMIT /* XID */ +SET DEBUG_SYNC= "now SIGNAL con10_cont"; +SET DEBUG_SYNC= "now SIGNAL con12_cont"; +SET DEBUG_SYNC= "now SIGNAL con11_cont"; +Checking that master-bin.000004 is the last binlog checkpoint +show binlog events in 'master-bin.00000<binlog_start>' from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.00000<binlog_start> # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.000001 +master-bin.00000<binlog_start> # Query # # BEGIN +master-bin.00000<binlog_start> # Table_map # # table_id: # (test.t1) +master-bin.00000<binlog_start> # Write_rows # # table_id: # flags: STMT_END_F +master-bin.00000<binlog_start> # Xid # # COMMIT /* XID */ +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.000002 +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.00000<binlog_start> +Now crash the server +SET SESSION debug_dbug="+d,crash_commit_after_log"; +INSERT INTO t1 VALUES (14, NULL); +Got one of the listed errors +SELECT a FROM t1 ORDER BY a; +a +1 +2 +3 +4 +10 +11 +12 +13 +14 +100 +101 +102 +*** Check that recovery works if we crashed early during rotate, before +*** binlog checkpoint event could be written. +SET GLOBAL max_binlog_size= 4096; +SET GLOBAL innodb_flush_log_at_trx_commit= 1; RESET MASTER; -This will timeout, as RESET MASTER is blocked -SET DEBUG_SYNC= "now WAIT_FOR reset_master_done TIMEOUT 1"; -Warnings: -Warning 1639 debug sync point wait timed out -SET DEBUG_SYNC= "now SIGNAL con10_go"; -show binary logs; -Log_name File_size -master-bin.000001 # -*** Test that binlog N is active, and last pending trx in (N-1) is -unlogged while there is still a pending trx in (N-2). -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con10_ready WAIT_FOR con10_continue"; -INSERT INTO t1 VALUES (20, REPEAT("x", 4100)); -SET DEBUG_SYNC= "now WAIT_FOR con10_ready"; -INSERT INTO t2 VALUES (3, "force binlog rotation"); -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con11_ready WAIT_FOR con11_continue"; INSERT INTO t1 VALUES (21, REPEAT("x", 4100)); -SET DEBUG_SYNC= "now WAIT_FOR con11_ready"; -INSERT INTO t2 VALUES (4, "force binlog rotation"); +INSERT INTO t1 VALUES (22, REPEAT("x", 4100)); +INSERT INTO t1 VALUES (23, REPEAT("x", 4100)); +SET SESSION debug_dbug="+d,crash_before_write_checkpoint_event"; +INSERT INTO t1 VALUES (24, REPEAT("x", 4100)); +Got one of the listed errors +SELECT a FROM t1 ORDER BY a; +a +1 +2 +3 +4 +10 +11 +12 +13 +14 +21 +22 +23 +24 +100 +101 +102 show binary logs; Log_name File_size master-bin.000001 # master-bin.000002 # master-bin.000003 # -show binlog events in 'master-bin.000001' from <binlog_start>; -Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION -master-bin.000001 # Binlog_checkpoint # # master-bin.000001 -master-bin.000001 # Query # # BEGIN -master-bin.000001 # Table_map # # table_id: # (test.t1) -master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Xid # # COMMIT /* XID */ -master-bin.000001 # Query # # BEGIN -master-bin.000001 # Table_map # # table_id: # (test.t2) -master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # COMMIT -master-bin.000001 # Rotate # # master-bin.000002;pos=<binlog_start> -show binlog events in 'master-bin.000002' from <binlog_start>; -Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000002 # Format_desc # # SERVER_VERSION, BINLOG_VERSION -master-bin.000002 # Binlog_checkpoint # # master-bin.000001 -master-bin.000002 # Query # # BEGIN -master-bin.000002 # Table_map # # table_id: # (test.t1) -master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000002 # Xid # # COMMIT /* XID */ -master-bin.000002 # Query # # BEGIN -master-bin.000002 # Table_map # # table_id: # (test.t2) -master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000002 # Query # # COMMIT -master-bin.000002 # Rotate # # master-bin.000003;pos=<binlog_start> -show binlog events in 'master-bin.000003' from <binlog_start>; -Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION -master-bin.000003 # Binlog_checkpoint # # master-bin.000001 -SET DEBUG_SYNC= "now SIGNAL con11_continue"; -con10 is still pending, no new binlog checkpoint should have been logged. -show binlog events in 'master-bin.000003' from <binlog_start>; -Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION -master-bin.000003 # Binlog_checkpoint # # master-bin.000001 -SET DEBUG_SYNC= "now SIGNAL con10_continue"; -No XIDs are pending, a new binlog checkpoint should have been logged. -show binlog events in 'master-bin.000003' from <binlog_start>; +master-bin.000004 # +master-bin.000005 # +show binlog events in 'master-bin.00000<binlog_start>' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION -master-bin.000003 # Binlog_checkpoint # # master-bin.000001 -master-bin.000003 # Binlog_checkpoint # # master-bin.000003 -DROP TABLE t1, t2; -SET GLOBAL max_binlog_size= @old_max_binlog_size; +master-bin.00000<binlog_start> # Format_desc # # SERVER_VERSION, BINLOG_VERSION +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.000003 +master-bin.00000<binlog_start> # Binlog_checkpoint # # master-bin.00000<binlog_start> +master-bin.00000<binlog_start> # Query # # BEGIN +master-bin.00000<binlog_start> # Table_map # # table_id: # (test.t1) +master-bin.00000<binlog_start> # Write_rows # # table_id: # flags: STMT_END_F +master-bin.00000<binlog_start> # Xid # # COMMIT /* XID */ +master-bin.00000<binlog_start> # Rotate # # master-bin.000005;pos=<binlog_start> +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/t/binlog_checkpoint.test b/mysql-test/suite/binlog/t/binlog_checkpoint.test new file mode 100644 index 00000000000..557791c77e5 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_checkpoint.test @@ -0,0 +1,108 @@ +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/have_binlog_format_row.inc + +SET @old_max_binlog_size= @@global.max_binlog_size; +SET GLOBAL max_binlog_size= 4096; +SET @old_innodb_flush_log_at_trx_commit= @@global.innodb_flush_log_at_trx_commit; +SET GLOBAL innodb_flush_log_at_trx_commit= 1; +RESET MASTER; + +CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb; +CREATE TABLE t2 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Myisam; + +--echo *** Test that RESET MASTER waits for pending commit checkpoints to complete. + +# con1 will hang before doing commit checkpoint, blocking RESET MASTER. +connect(con1,localhost,root,,); +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con1_ready WAIT_FOR con1_go"; +send INSERT INTO t1 VALUES (1, REPEAT("x", 4100)); + +connection default; +SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; +# Let's add a few binlog rotations just for good measure. +INSERT INTO t2 VALUES (1, REPEAT("x", 4100)); +INSERT INTO t2 VALUES (2, REPEAT("x", 4100)); +--source include/show_binary_logs.inc +--let $binlog_file= master-bin.000004 +--let $binlog_start= 4 +--source include/show_binlog_events.inc +SET DEBUG_SYNC= "execute_command_after_close_tables SIGNAL reset_master_done"; +send RESET MASTER; + +connect(con2,localhost,root,,); +--echo This will timeout, as RESET MASTER is blocked +SET DEBUG_SYNC= "now WAIT_FOR reset_master_done TIMEOUT 1"; +# Wake up transaction to allow RESET MASTER to complete. +SET DEBUG_SYNC= "now SIGNAL con1_go"; + +connection con1; +reap; + +connection default; +reap; +--source include/show_binary_logs.inc +--let $binlog_file= master-bin.000001 +--let $binlog_start= 4 +--source include/show_binlog_events.inc + +--echo *** Test that binlog N is active, and commit checkpoint for (N-1) is +--echo *** done while there is still a pending commit checkpoint for (N-2). + +connection con1; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con1_ready WAIT_FOR con1_continue"; +send INSERT INTO t1 VALUES (20, REPEAT("x", 4100)); + +connection default; +SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; + +connection con2; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con2_ready WAIT_FOR con2_continue"; +send INSERT INTO t1 VALUES (21, REPEAT("x", 4100)); + +connection default; +SET DEBUG_SYNC= "now WAIT_FOR con2_ready"; +--source include/show_binary_logs.inc +--let $binlog_file= master-bin.000001 +--source include/show_binlog_events.inc +--let $binlog_file= master-bin.000002 +--source include/show_binlog_events.inc +--let $binlog_file= master-bin.000003 +--source include/show_binlog_events.inc + +SET DEBUG_SYNC= "now SIGNAL con2_continue"; + +connection con2; +reap; + +connection default; +--echo con1 is still pending, no new binlog checkpoint should have been logged. +--let $binlog_file= master-bin.000003 +--source include/show_binlog_events.inc + +SET DEBUG_SYNC= "now SIGNAL con1_continue"; + +connection con1; +reap; + +connection default; + +--echo No commit checkpoints are pending, a new binlog checkpoint should have been logged. +--let $binlog_file= master-bin.000003 + +# Wait for the master-bin.000003 binlog checkpoint to appear. +--let $wait_for_all= 0 +--let $show_statement= SHOW BINLOG EVENTS IN "$binlog_file" +--let $field= Info +--let $condition= = "master-bin.000003" +--source include/wait_show_condition.inc + +--source include/show_binlog_events.inc + + +# Cleanup +connection default; +DROP TABLE t1, t2; +SET GLOBAL max_binlog_size= @old_max_binlog_size; +SET GLOBAL innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit; diff --git a/mysql-test/suite/binlog/t/binlog_xa_recover-master.opt b/mysql-test/suite/binlog/t/binlog_xa_recover-master.opt index 425fda95086..3c44f9fad10 100644 --- a/mysql-test/suite/binlog/t/binlog_xa_recover-master.opt +++ b/mysql-test/suite/binlog/t/binlog_xa_recover-master.opt @@ -1 +1 @@ ---skip-stack-trace --skip-core-file +--skip-stack-trace --skip-core-file --loose-debug-dbug=+d,xa_recover_expect_master_bin_000004 diff --git a/mysql-test/suite/binlog/t/binlog_xa_recover.test b/mysql-test/suite/binlog/t/binlog_xa_recover.test index 7a4cc17112e..36b2ddecb4f 100644 --- a/mysql-test/suite/binlog/t/binlog_xa_recover.test +++ b/mysql-test/suite/binlog/t/binlog_xa_recover.test @@ -5,81 +5,105 @@ # Valgrind does not work well with test that crashes the server --source include/not_valgrind.inc +# (We do not need to restore these settings, as we crash the server). SET GLOBAL max_binlog_size= 4096; +SET GLOBAL innodb_flush_log_at_trx_commit= 1; +RESET MASTER; CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb; -CREATE TABLE t2 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Myisam; - -# Transactions are not guaranteed stored durably on disk in the engine until -# they are fsync()ed, which normally happens during commit(). But there is no -# guarantee that they will _not_ be durable, in particular loosing results -# of a write(2) system call normally requires a kernel crash (as opposed to -# just mysqld crash), which is inconvenient to do in a test suite. -# So instead we do an error insert to prevent commit_ordered() from being -# called in the engine - so nothing will be written to disk at all, and crash -# recovery is sure to be needed. -SET @@global.debug_dbug='+d,skip_commit_ordered'; - -INSERT INTO t1 VALUES (0, REPEAT("x", 4100)); +# Insert some data to force a couple binlog rotations (3), so we get some +# normal binlog checkpoints before starting the test. +INSERT INTO t1 VALUES (100, REPEAT("x", 4100)); +INSERT INTO t1 VALUES (101, REPEAT("x", 4100)); +INSERT INTO t1 VALUES (102, REPEAT("x", 4100)); # Now start a bunch of transactions that span multiple binlog # files. Leave then in the state prepared-but-not-committed in the engine # and crash the server. Check that crash recovery is able to recover all # of them. +# +# We use debug_sync to get all the transactions into the prepared state before +# we commit any of them. This is because the prepare step flushes the InnoDB +# redo log - including any commits made before, so recovery would become +# unnecessary, decreasing the value of this test. +# +# We arrange to have con1 with a prepared transaction in master-bin.000004, +# con2 and con3 with a prepared transaction in master-bin.000005, and a new +# empty master-bin.000006. So the latest binlog checkpoint should be +# master-bin.000006. connect(con1,localhost,root,,); -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con1_ready WAIT_FOR _ever"; +# First wait after prepare and before write to binlog. +SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con1_wait WAIT_FOR con1_cont"; +# Then complete InnoDB commit in memory (but not commit checkpoint / write to +# disk), and hang until crash, leaving a transaction to be XA recovered. +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con1_ready WAIT_FOR _ever"; send INSERT INTO t1 VALUES (1, REPEAT("x", 4100)); connection default; -SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; -INSERT INTO t2 VALUES (1, "force binlog rotation"); +SET DEBUG_SYNC= "now WAIT_FOR con1_wait"; connect(con2,localhost,root,,); -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con2_ready WAIT_FOR _ever"; +SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con2_wait WAIT_FOR con2_cont"; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con2_ready WAIT_FOR _ever"; send INSERT INTO t1 VALUES (2, NULL); connection default; -SET DEBUG_SYNC= "now WAIT_FOR con2_ready"; +SET DEBUG_SYNC= "now WAIT_FOR con2_wait"; connect(con3,localhost,root,,); -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con3_ready WAIT_FOR _ever"; +SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con3_wait WAIT_FOR con3_cont"; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con3_ready WAIT_FOR _ever"; send INSERT INTO t1 VALUES (3, REPEAT("x", 4100)); + connection default; +SET DEBUG_SYNC= "now WAIT_FOR con3_wait"; + +connect(con4,localhost,root,,); +SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con4_wait WAIT_FOR con4_cont"; +SET SESSION debug_dbug="+d,crash_commit_after_log"; +send INSERT INTO t1 VALUES (4, NULL); + +connection default; +SET DEBUG_SYNC= "now WAIT_FOR con4_wait"; + +SET DEBUG_SYNC= "now SIGNAL con1_cont"; +SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; +SET DEBUG_SYNC= "now SIGNAL con2_cont"; +SET DEBUG_SYNC= "now WAIT_FOR con2_ready"; +SET DEBUG_SYNC= "now SIGNAL con3_cont"; SET DEBUG_SYNC= "now WAIT_FOR con3_ready"; -INSERT INTO t2 VALUES (2, "force binlog rotation"); -# So we won't get warnings about t2 being crashed. -FLUSH TABLES t2; # Check that everything is committed in binary log. --source include/show_binary_logs.inc ---let $binlog_file= master-bin.000001 +--let $binlog_file= master-bin.000003 --let $binlog_start= 4 --source include/show_binlog_events.inc ---let $binlog_file= master-bin.000002 +--let $binlog_file= master-bin.000004 --source include/show_binlog_events.inc ---let $binlog_file= master-bin.000003 +--let $binlog_file= master-bin.000005 --source include/show_binlog_events.inc ---let $binlog_file= master-bin.000004 +--let $binlog_file= master-bin.000006 --source include/show_binlog_events.inc -# Check that transactions really are not yet committed in engine. -# (This works because of debug_dbug='+d,skip_commit_ordered'). ---echo We should see only one entry here, a=0: -SELECT a FROM t1 ORDER BY a; - # Check that server will not purge too much. -PURGE BINARY LOGS TO "master-bin.000004"; +PURGE BINARY LOGS TO "master-bin.000006"; --source include/show_binary_logs.inc # Now crash the server with one more transaction in prepared state. -system echo wait-binlog_xa_recover.test >> $MYSQLTEST_VARDIR/tmp/mysqld.1.expect; -SET SESSION debug_dbug="+d,crash_commit_after_log"; +--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +wait-binlog_xa_recover.test +EOF +SET DEBUG_SYNC= "now SIGNAL con4_cont"; +connection con4; --error 2006,2013 -INSERT INTO t1 VALUES (4, NULL); +reap; -system echo restart-group_commit_binlog_pos.test >> $MYSQLTEST_VARDIR/tmp/mysqld.1.expect; +--remove_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +restart-group_commit_binlog_pos.test +EOF connection default; --enable_reconnect @@ -88,87 +112,128 @@ connection default; # Check that all transactions are recovered. SELECT a FROM t1 ORDER BY a; +--echo Test that with multiple binlog checkpoints, recovery starts from the last one. +SET GLOBAL max_binlog_size= 4096; +SET GLOBAL innodb_flush_log_at_trx_commit= 1; +RESET MASTER; ---echo *** Test that RESET MASTER waits for pending XIDs to be unlogged. +# Rotate to binlog master-bin.000003 while delaying binlog checkpoints. +# So we get multiple binlog checkpoints in master-bin.000003. +# Then complete the checkpoints, crash, and check that we only scan +# the necessary binlog file (ie. that we use the _last_ checkpoint). -SET @old_max_binlog_size= @@global.max_binlog_size; -SET GLOBAL max_binlog_size= 4096; -# con10 will hang with a pending XID, blocking RESET MASTER. connect(con10,localhost,root,,); -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con10_ready WAIT_FOR con10_go"; -send INSERT INTO t1 VALUES (10, NULL); +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con10_ready WAIT_FOR con10_cont"; +send INSERT INTO t1 VALUES (10, REPEAT("x", 4100)); connection default; SET DEBUG_SYNC= "now WAIT_FOR con10_ready"; -# Let's add a few binlog rotations just for good measure. -INSERT INTO t2 VALUES (10, REPEAT("x", 4100)); -INSERT INTO t2 VALUES (11, REPEAT("x", 4100)); ---source include/show_binary_logs.inc -SET DEBUG_SYNC= "execute_command_after_close_tables SIGNAL reset_master_done"; -send RESET MASTER; connect(con11,localhost,root,,); ---echo This will timeout, as RESET MASTER is blocked -SET DEBUG_SYNC= "now WAIT_FOR reset_master_done TIMEOUT 1"; -# Wake up transaction to allow RESET MASTER to complete. -SET DEBUG_SYNC= "now SIGNAL con10_go"; - -connection con10; -reap; +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con11_ready WAIT_FOR con11_cont"; +send INSERT INTO t1 VALUES (11, REPEAT("x", 4100)); connection default; -reap; ---source include/show_binary_logs.inc - - ---echo *** Test that binlog N is active, and last pending trx in (N-1) is ---echo unlogged while there is still a pending trx in (N-2). +SET DEBUG_SYNC= "now WAIT_FOR con11_ready"; -connection con10; -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con10_ready WAIT_FOR con10_continue"; -send INSERT INTO t1 VALUES (20, REPEAT("x", 4100)); +connect(con12,localhost,root,,); +SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con12_ready WAIT_FOR con12_cont"; +send INSERT INTO t1 VALUES (12, REPEAT("x", 4100)); connection default; -SET DEBUG_SYNC= "now WAIT_FOR con10_ready"; -INSERT INTO t2 VALUES (3, "force binlog rotation"); +SET DEBUG_SYNC= "now WAIT_FOR con12_ready"; +INSERT INTO t1 VALUES (13, NULL); -connection con11; -SET DEBUG_SYNC= "ha_commit_trans_after_log_and_order SIGNAL con11_ready WAIT_FOR con11_continue"; -send INSERT INTO t1 VALUES (21, REPEAT("x", 4100)); - -connection default; -SET DEBUG_SYNC= "now WAIT_FOR con11_ready"; -INSERT INTO t2 VALUES (4, "force binlog rotation"); --source include/show_binary_logs.inc ---let $binlog_file= master-bin.000001 ---source include/show_binlog_events.inc ---let $binlog_file= master-bin.000002 ---source include/show_binlog_events.inc ---let $binlog_file= master-bin.000003 +--let $binlog_file= master-bin.000004 +--let $binlog_start= 4 --source include/show_binlog_events.inc -SET DEBUG_SYNC= "now SIGNAL con11_continue"; - +SET DEBUG_SYNC= "now SIGNAL con10_cont"; +connection con10; +reap; +connection default; +SET DEBUG_SYNC= "now SIGNAL con12_cont"; +connection con12; +reap; +connection default; +SET DEBUG_SYNC= "now SIGNAL con11_cont"; connection con11; reap; connection default; ---echo con10 is still pending, no new binlog checkpoint should have been logged. ---let $binlog_file= master-bin.000003 +# Wait for the last (master-bin.000004) binlog checkpoint to appear. +--let $wait_for_all= 0 +--let $show_statement= SHOW BINLOG EVENTS IN "master-bin.000004" +--let $field= Info +--let $condition= = "master-bin.000004" +--source include/wait_show_condition.inc + +--echo Checking that master-bin.000004 is the last binlog checkpoint --source include/show_binlog_events.inc -SET DEBUG_SYNC= "now SIGNAL con10_continue"; +--echo Now crash the server +# It is not too easy to test XA recovery, as it runs early during server +# startup, before any connections can be made. +# What we do is set a DBUG error insert which will crash if XA recovery +# starts from any other binlog than master-bin.000004 (check the file +# binlog_xa_recover-master.opt). Then we will fail here if XA recovery +# would start from the wrong place. +--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +wait-binlog_xa_recover.test +EOF +SET SESSION debug_dbug="+d,crash_commit_after_log"; +--error 2006,2013 +INSERT INTO t1 VALUES (14, NULL); -connection con10; -reap; +--remove_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +restart-group_commit_binlog_pos.test +EOF connection default; ---echo No XIDs are pending, a new binlog checkpoint should have been logged. ---let $binlog_file= master-bin.000003 ---source include/show_binlog_events.inc +--enable_reconnect +--source include/wait_until_connected_again.inc +# Check that all transactions are recovered. +SELECT a FROM t1 ORDER BY a; + + +--echo *** Check that recovery works if we crashed early during rotate, before +--echo *** binlog checkpoint event could be written. + +SET GLOBAL max_binlog_size= 4096; +SET GLOBAL innodb_flush_log_at_trx_commit= 1; +RESET MASTER; + +# We need some initial data to reach binlog master-bin.000004. Otherwise +# crash recovery fails due to the error insert used for previous test. +INSERT INTO t1 VALUES (21, REPEAT("x", 4100)); +INSERT INTO t1 VALUES (22, REPEAT("x", 4100)); +INSERT INTO t1 VALUES (23, REPEAT("x", 4100)); +--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +wait-binlog_xa_recover.test +EOF +SET SESSION debug_dbug="+d,crash_before_write_checkpoint_event"; +--error 2006,2013 +INSERT INTO t1 VALUES (24, REPEAT("x", 4100)); + +--remove_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +restart-group_commit_binlog_pos.test +EOF + +--enable_reconnect +--source include/wait_until_connected_again.inc + +# Check that all transactions are recovered. +SELECT a FROM t1 ORDER BY a; + +--source include/show_binary_logs.inc +--let $binlog_file= master-bin.000004 +--let $binlog_start= 4 +--source include/show_binlog_events.inc # Cleanup connection default; -DROP TABLE t1, t2; -SET GLOBAL max_binlog_size= @old_max_binlog_size; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/binlog_consistent.result b/mysql-test/suite/innodb/r/binlog_consistent.result index 68838e8d52b..f0b665b5ac9 100644 --- a/mysql-test/suite/innodb/r/binlog_consistent.result +++ b/mysql-test/suite/innodb/r/binlog_consistent.result @@ -63,15 +63,15 @@ binlog_snapshot_file master-bin.000001 binlog_snapshot_position 945 SHOW MASTER STATUS; File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000002 286 +master-bin.000002 326 COMMIT; SHOW STATUS LIKE 'binlog_snapshot_%'; Variable_name Value binlog_snapshot_file master-bin.000002 -binlog_snapshot_position 286 +binlog_snapshot_position 326 SHOW MASTER STATUS; File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000002 286 +master-bin.000002 326 SHOW BINLOG EVENTS; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 246 Server ver: #, Binlog ver: # diff --git a/mysql-test/suite/innodb/r/group_commit_binlog_pos.result b/mysql-test/suite/innodb/r/group_commit_binlog_pos.result index 29aa765c1b4..ccf458809d8 100644 --- a/mysql-test/suite/innodb/r/group_commit_binlog_pos.result +++ b/mysql-test/suite/innodb/r/group_commit_binlog_pos.result @@ -1,3 +1,4 @@ +SET GLOBAL innodb_flush_log_at_trx_commit=3; CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb; INSERT INTO t1 VALUES (0); SET DEBUG_SYNC= "commit_after_get_LOCK_log SIGNAL con1_waiting WAIT_FOR con3_queued"; diff --git a/mysql-test/suite/innodb/r/group_commit_binlog_pos_no_optimize_thread.result b/mysql-test/suite/innodb/r/group_commit_binlog_pos_no_optimize_thread.result index 3c3b0709331..44cf2f3979d 100644 --- a/mysql-test/suite/innodb/r/group_commit_binlog_pos_no_optimize_thread.result +++ b/mysql-test/suite/innodb/r/group_commit_binlog_pos_no_optimize_thread.result @@ -1,3 +1,4 @@ +SET GLOBAL innodb_flush_log_at_trx_commit=3; CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb; INSERT INTO t1 VALUES (0); SET DEBUG_SYNC= "commit_after_get_LOCK_log SIGNAL con1_waiting WAIT_FOR con3_queued"; diff --git a/mysql-test/suite/innodb/t/group_commit_binlog_pos.test b/mysql-test/suite/innodb/t/group_commit_binlog_pos.test index 72798a68a1e..213dbc9d3d8 100644 --- a/mysql-test/suite/innodb/t/group_commit_binlog_pos.test +++ b/mysql-test/suite/innodb/t/group_commit_binlog_pos.test @@ -17,6 +17,19 @@ # Test that we get the correct position when we group commit several # transactions together. +# What we really want to test here is what happens when a group of +# transactions get written only partially to disk inside InnoDB before +# the crash. But that is hard to test in mysql-test-run automated +# tests. Instead, we use debug_sync to tightly control when each +# transaction is written to the redo log. And we set +# innodb_flush_log_at_trx_commit=3 so that we can write out +# transactions individually - as with +# innodb_flush_log_at_trx_commit=1, all commits are written together, +# as part of a commit_checkpoint. +# (Note that we do not have to restore innodb_flush_log_at_trx_commit, as +# we crash the server). +SET GLOBAL innodb_flush_log_at_trx_commit=3; + CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb; INSERT INTO t1 VALUES (0); diff --git a/mysql-test/suite/innodb/t/group_commit_binlog_pos_no_optimize_thread.test b/mysql-test/suite/innodb/t/group_commit_binlog_pos_no_optimize_thread.test index e9a234577e2..3ae3c50085d 100644 --- a/mysql-test/suite/innodb/t/group_commit_binlog_pos_no_optimize_thread.test +++ b/mysql-test/suite/innodb/t/group_commit_binlog_pos_no_optimize_thread.test @@ -17,6 +17,19 @@ # Test that we get the correct position when we group commit several # transactions together. +# What we really want to test here is what happens when a group of +# transactions get written only partially to disk inside InnoDB before +# the crash. But that is hard to test in mysql-test-run automated +# tests. Instead, we use debug_sync to tightly control when each +# transaction is written to the redo log. And we set +# innodb_flush_log_at_trx_commit=3 so that we can write out +# transactions individually - as with +# innodb_flush_log_at_trx_commit=1, all commits are written together, +# as part of a commit_checkpoint. +# (Note that we do not have to restore innodb_flush_log_at_trx_commit, as +# we crash the server). +SET GLOBAL innodb_flush_log_at_trx_commit=3; + CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb; INSERT INTO t1 VALUES (0); diff --git a/mysql-test/suite/rpl/r/rpl_checksum.result b/mysql-test/suite/rpl/r/rpl_checksum.result index 9e561908a7b..fb61f159c80 100644 --- a/mysql-test/suite/rpl/r/rpl_checksum.result +++ b/mysql-test/suite/rpl/r/rpl_checksum.result @@ -71,7 +71,7 @@ insert into t1 values (1) /* will not be applied on slave due to simulation */; set @@global.debug_dbug='d,simulate_slave_unaware_checksum'; start slave; include/wait_for_slave_io_error.inc [errno=1236] -Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replication events with the checksum that master is configured to log; the first event 'master-bin.000009' at 286, the last event read from 'master-bin.000010' at 246, the last byte read from 'master-bin.000010' at 246.'' +Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replication events with the checksum that master is configured to log; the first event 'master-bin.000009' at 326, the last event read from 'master-bin.000010' at 246, the last byte read from 'master-bin.000010' at 246.'' select count(*) as zero from t1; zero 0 diff --git a/mysql-test/suite/rpl/r/rpl_insert_delayed,stmt.rdiff b/mysql-test/suite/rpl/r/rpl_insert_delayed,stmt.rdiff index 5e0e7db5b63..44d8a305f61 100644 --- a/mysql-test/suite/rpl/r/rpl_insert_delayed,stmt.rdiff +++ b/mysql-test/suite/rpl/r/rpl_insert_delayed,stmt.rdiff @@ -36,7 +36,7 @@ a 1 On slave -+show binlog events in 'slave-bin.000002' from <binlog_start> limit 1,6; ++show binlog events in 'slave-bin.000002' from <binlog_start> limit 2,6; +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000002 # Query # # BEGIN +slave-bin.000002 # Query # # use `test`; INSERT IGNORE INTO t1 VALUES(1) diff --git a/mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result b/mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result index 9af3d4bbfd2..8a068ad8d72 100644 --- a/mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result +++ b/mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result @@ -54,7 +54,7 @@ master-bin.000002 # Query # # COMMIT SELECT * FROM t1; a 2 -show relaylog events in 'slave-relay-bin.000005' from <binlog_start> limit 4,5; +show relaylog events in 'slave-relay-bin.000005' from <binlog_start> limit 5,5; Log_name Pos Event_type Server_id End_log_pos Info slave-relay-bin.000005 # Query # # BEGIN slave-relay-bin.000005 # Query # # # Dummy ev diff --git a/mysql-test/suite/rpl/r/rpl_row_log.result b/mysql-test/suite/rpl/r/rpl_row_log.result index b9be2cd0144..13938762991 100644 --- a/mysql-test/suite/rpl/r/rpl_row_log.result +++ b/mysql-test/suite/rpl/r/rpl_row_log.result @@ -205,6 +205,7 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Rotate # # master-bin.000002;pos=4 show binlog events in 'master-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Query # # use `test`; create table t3 (a int)ENGINE=MyISAM master-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=MyISAM master-bin.000002 # Query # # BEGIN @@ -236,6 +237,7 @@ slave-bin.000001 # Query # # use `test`; create table t3 (a int)ENGINE=MyISAM slave-bin.000001 # Rotate # # slave-bin.000002;pos=4 show binlog events in 'slave-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 slave-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=MyISAM slave-bin.000002 # Query # # BEGIN slave-bin.000002 # Table_map # # table_id: # (test.t2) diff --git a/mysql-test/suite/rpl/r/rpl_row_log_innodb.result b/mysql-test/suite/rpl/r/rpl_row_log_innodb.result index 15aa8f23b55..c9489a3dc66 100644 --- a/mysql-test/suite/rpl/r/rpl_row_log_innodb.result +++ b/mysql-test/suite/rpl/r/rpl_row_log_innodb.result @@ -205,6 +205,7 @@ master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Rotate # # master-bin.000002;pos=4 show binlog events in 'master-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Query # # use `test`; create table t3 (a int)ENGINE=InnoDB master-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=InnoDB master-bin.000002 # Query # # BEGIN @@ -236,6 +237,7 @@ slave-bin.000001 # Query # # use `test`; create table t3 (a int)ENGINE=InnoDB slave-bin.000001 # Rotate # # slave-bin.000002;pos=4 show binlog events in 'slave-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 slave-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=InnoDB slave-bin.000002 # Query # # BEGIN slave-bin.000002 # Table_map # # table_id: # (test.t2) diff --git a/mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result b/mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result index 8534bf00711..a6d691f420e 100644 --- a/mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result +++ b/mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result @@ -128,14 +128,16 @@ DROP TABLE t1; ******** [master] SHOW BINLOG EVENTS IN <FILE> ******** show binlog events in 'master-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [master] SHOW BINLOG EVENTS IN <FILE> LIMIT 1 ******** show binlog events in 'master-bin.000002' from <binlog_start> limit 1; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 ******** [master] SHOW BINLOG EVENTS IN <FILE> LIMIT 1,3 ******** show binlog events in 'master-bin.000002' from <binlog_start> limit 1,3; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [master] SHOW BINLOG EVENTS ******** show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info @@ -156,14 +158,16 @@ master-bin.000001 # Rotate # # master-bin.000002;pos=4 ******** [slave] SHOW BINLOG EVENTS IN <FILE> ******** show binlog events in 'slave-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 slave-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [slave] SHOW BINLOG EVENTS IN <FILE> LIMIT 1 ******** show binlog events in 'slave-bin.000002' from <binlog_start> limit 1; Log_name Pos Event_type Server_id End_log_pos Info -slave-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ +slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 ******** [slave] SHOW BINLOG EVENTS IN <FILE> LIMIT 1,3 ******** show binlog events in 'slave-bin.000002' from <binlog_start> limit 1,3; Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [slave] SHOW BINLOG EVENTS ******** show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info @@ -186,6 +190,7 @@ show relaylog events in 'slave-relay-bin.000006' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info slave-relay-bin.000006 # Rotate # # master-bin.000002;pos=4 slave-relay-bin.000006 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +slave-relay-bin.000006 # Binlog_checkpoint # # master-bin.000001 slave-relay-bin.000006 # Binlog_checkpoint # # master-bin.000002 slave-relay-bin.000006 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [slave] SHOW RELAYLOG EVENTS IN <FILE> LIMIT 1 ******** @@ -196,8 +201,8 @@ slave-relay-bin.000006 # Rotate # # master-bin.000002;pos=4 show relaylog events in 'slave-relay-bin.000006' from <binlog_start> limit 1,3; Log_name Pos Event_type Server_id End_log_pos Info slave-relay-bin.000006 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +slave-relay-bin.000006 # Binlog_checkpoint # # master-bin.000001 slave-relay-bin.000006 # Binlog_checkpoint # # master-bin.000002 -slave-relay-bin.000006 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [slave] SHOW RELAYLOG EVENTS ******** show relaylog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info diff --git a/mysql-test/suite/rpl/r/rpl_stm_log.result b/mysql-test/suite/rpl/r/rpl_stm_log.result index 3bb3f347a43..ea4fc259b14 100644 --- a/mysql-test/suite/rpl/r/rpl_stm_log.result +++ b/mysql-test/suite/rpl/r/rpl_stm_log.result @@ -205,6 +205,7 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Rotate # # master-bin.000002;pos=4 show binlog events in 'master-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Query # # use `test`; create table t3 (a int)ENGINE=MyISAM master-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=MyISAM master-bin.000002 # Query # # BEGIN @@ -235,6 +236,7 @@ slave-bin.000001 # Query # # use `test`; create table t3 (a int)ENGINE=MyISAM slave-bin.000001 # Rotate # # slave-bin.000002;pos=4 show binlog events in 'slave-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 slave-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=MyISAM slave-bin.000002 # Query # # BEGIN slave-bin.000002 # Query # # use `test`; insert into t2 values (1) diff --git a/mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result b/mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result index a978c3c900c..2c93a15a7b3 100644 --- a/mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result +++ b/mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result @@ -113,14 +113,16 @@ DROP TABLE t1; ******** [master] SHOW BINLOG EVENTS IN <FILE> ******** show binlog events in 'master-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [master] SHOW BINLOG EVENTS IN <FILE> LIMIT 1 ******** show binlog events in 'master-bin.000002' from <binlog_start> limit 1; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ +master-bin.000002 # Binlog_checkpoint # # master-bin.000002 ******** [master] SHOW BINLOG EVENTS IN <FILE> LIMIT 1,3 ******** show binlog events in 'master-bin.000002' from <binlog_start> limit 1,3; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [master] SHOW BINLOG EVENTS ******** show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info @@ -138,14 +140,16 @@ master-bin.000001 # Rotate # # master-bin.000002;pos=4 ******** [slave] SHOW BINLOG EVENTS IN <FILE> ******** show binlog events in 'slave-bin.000002' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 slave-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [slave] SHOW BINLOG EVENTS IN <FILE> LIMIT 1 ******** show binlog events in 'slave-bin.000002' from <binlog_start> limit 1; Log_name Pos Event_type Server_id End_log_pos Info -slave-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ +slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 ******** [slave] SHOW BINLOG EVENTS IN <FILE> LIMIT 1,3 ******** show binlog events in 'slave-bin.000002' from <binlog_start> limit 1,3; Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000002 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [slave] SHOW BINLOG EVENTS ******** show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info @@ -165,6 +169,7 @@ show relaylog events in 'slave-relay-bin.000006' from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info slave-relay-bin.000006 # Rotate # # master-bin.000002;pos=4 slave-relay-bin.000006 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +slave-relay-bin.000006 # Binlog_checkpoint # # master-bin.000001 slave-relay-bin.000006 # Binlog_checkpoint # # master-bin.000002 slave-relay-bin.000006 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [slave] SHOW RELAYLOG EVENTS IN <FILE> LIMIT 1 ******** @@ -175,8 +180,8 @@ slave-relay-bin.000006 # Rotate # # master-bin.000002;pos=4 show relaylog events in 'slave-relay-bin.000006' from <binlog_start> limit 1,3; Log_name Pos Event_type Server_id End_log_pos Info slave-relay-bin.000006 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +slave-relay-bin.000006 # Binlog_checkpoint # # master-bin.000001 slave-relay-bin.000006 # Binlog_checkpoint # # master-bin.000002 -slave-relay-bin.000006 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ ******** [slave] SHOW RELAYLOG EVENTS ******** show relaylog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info diff --git a/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test b/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test index 36f4defa252..251136a2fe1 100644 --- a/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test +++ b/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test @@ -61,7 +61,7 @@ connection slave; SELECT * FROM t1; let $binlog_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1); let $binlog_start= 0; -let $binlog_limit=4,5; +let $binlog_limit=5,5; --source include/show_relaylog_events.inc --echo # Test that slave which cannot tolerate holes in binlog stream but diff --git a/mysql-test/suite/sys_vars/r/innodb_flush_log_at_trx_commit_basic.result b/mysql-test/suite/sys_vars/r/innodb_flush_log_at_trx_commit_basic.result index 441fb4cd362..268d40c1be3 100644 --- a/mysql-test/suite/sys_vars/r/innodb_flush_log_at_trx_commit_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_flush_log_at_trx_commit_basic.result @@ -50,7 +50,7 @@ Warnings: Warning 1292 Truncated incorrect innodb_flush_log_at_trx_commit value: '1001' SELECT @@global.innodb_flush_log_at_trx_commit; @@global.innodb_flush_log_at_trx_commit -2 +3 '#----------------------FN_DYNVARS_046_05------------------------#' SELECT @@global.innodb_flush_log_at_trx_commit = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES @@ -60,22 +60,22 @@ VARIABLE_VALUE 1 SELECT @@global.innodb_flush_log_at_trx_commit; @@global.innodb_flush_log_at_trx_commit -2 +3 SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_flush_log_at_trx_commit'; VARIABLE_VALUE -2 +3 '#---------------------FN_DYNVARS_046_06-------------------------#' SET @@global.innodb_flush_log_at_trx_commit = OFF; ERROR 42000: Incorrect argument type to variable 'innodb_flush_log_at_trx_commit' SELECT @@global.innodb_flush_log_at_trx_commit; @@global.innodb_flush_log_at_trx_commit -2 +3 SET @@global.innodb_flush_log_at_trx_commit = ON; ERROR 42000: Incorrect argument type to variable 'innodb_flush_log_at_trx_commit' SELECT @@global.innodb_flush_log_at_trx_commit; @@global.innodb_flush_log_at_trx_commit -2 +3 '#---------------------FN_DYNVARS_046_07----------------------#' SET @@global.innodb_flush_log_at_trx_commit = TRUE; SELECT @@global.innodb_flush_log_at_trx_commit; |