diff --git a/mysql-test/suite/binlog/r/backup.result b/mysql-test/suite/binlog/r/backup.result new file mode 100644 index 00000000000..5c6f8b0b515 --- /dev/null +++ b/mysql-test/suite/binlog/r/backup.result @@ -0,0 +1,21 @@ +# +# Test BACKUP STAGES BLOCK_COMMIT with binary logging on +# +SET BINLOG_FORMAT=MIXED; +RESET MASTER; +create table t1 (a int) engine=aria; +insert into t1 values (1); +BACKUP STAGE START; +BACKUP STAGE BLOCK_COMMIT; +SELECT @@gtid_binlog_pos; +@@gtid_binlog_pos +0-1-2 +BACKUP STAGE END; +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; create table t1 (a int) engine=aria +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; insert into t1 values (1) +master-bin.000001 # Query # # COMMIT +drop table t1; diff --git a/mysql-test/suite/binlog/t/backup.test b/mysql-test/suite/binlog/t/backup.test new file mode 100644 index 00000000000..e1d921c787e --- /dev/null +++ b/mysql-test/suite/binlog/t/backup.test @@ -0,0 +1,19 @@ +--source include/have_log_bin.inc +--source include/have_binlog_format_mixed.inc + +--echo # +--echo # Test BACKUP STAGES BLOCK_COMMIT with binary logging on +--echo # + +SET BINLOG_FORMAT=MIXED; +RESET MASTER; + +create table t1 (a int) engine=aria; +insert into t1 values (1); + +BACKUP STAGE START; +BACKUP STAGE BLOCK_COMMIT; +SELECT @@gtid_binlog_pos; +BACKUP STAGE END; +source include/show_binlog_events.inc; +drop table t1; diff --git a/sql/backup.cc b/sql/backup.cc index 73cd13ffe2a..5976506cf92 100644 --- a/sql/backup.cc +++ b/sql/backup.cc @@ -290,6 +290,14 @@ static bool backup_block_commit(THD *thd) /* We can ignore errors from flush_tables () */ (void) flush_tables(thd, FLUSH_SYS_TABLES); + + if (mysql_bin_log.is_open()) + { + mysql_mutex_lock(mysql_bin_log.get_log_lock()); + mysql_file_sync(mysql_bin_log.get_log_file()->file, + MYF(MY_WME|MY_SYNC_FILESIZE)); + mysql_mutex_unlock(mysql_bin_log.get_log_lock()); + } thd->clear_error(); DBUG_RETURN(0);