1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-32589 FULL_NODUP mode for binlog_row_image

This patch provides a new mode FULL_NODUP to binlog_row_image system
variable. With FULL_NODUP mode, all columns are included in before
image, but only updated columns are included in after image for UPDATE.
While all columns are included in the after image for INSERT.

FULL_NODUP is for replacing FULL mode. It includes all data of
the before and after image as FULL mode, but it uses less storage
especially in the case that only a few columns are updated.

Note: It will binlog full before and after image for all modes if the
      table has no primary key. FULL_NODUP follows the behavior.
This commit is contained in:
Libing Song
2023-10-26 17:24:22 +08:00
committed by Andrew Hutchings
parent 6218b5f7cb
commit a119c5f998
20 changed files with 14325 additions and 18 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,796 @@
include/rpl_init.inc [topology=1->2->3]
connection server_1;
connection server_2;
connection server_3;
connection server_1;
#
# binlog_row_image=FULL_NODUP should write all columns to the binary log
#
CON: 'server_1', IMG: 'FULL_NODUP', RESTART SLAVE: 'N'
connection server_1;
SET SESSION binlog_row_image= 'FULL_NODUP';
SET GLOBAL binlog_row_image= 'FULL_NODUP';
FLUSH TABLES;
SHOW VARIABLES LIKE 'binlog_row_image';
Variable_name Value
binlog_row_image FULL_NODUP
CON: 'server_2', IMG: 'FULL_NODUP', RESTART SLAVE: 'Y'
connection server_2;
SET SESSION binlog_row_image= 'FULL_NODUP';
SET GLOBAL binlog_row_image= 'FULL_NODUP';
include/stop_slave.inc
include/start_slave.inc
FLUSH TABLES;
SHOW VARIABLES LIKE 'binlog_row_image';
Variable_name Value
binlog_row_image FULL_NODUP
CON: 'server_3', IMG: 'FULL_NODUP', RESTART SLAVE: 'Y'
connection server_3;
SET SESSION binlog_row_image= 'FULL_NODUP';
SET GLOBAL binlog_row_image= 'FULL_NODUP';
include/stop_slave.inc
include/start_slave.inc
FLUSH TABLES;
SHOW VARIABLES LIKE 'binlog_row_image';
Variable_name Value
binlog_row_image FULL_NODUP
connection server_1;
### engines: MyISAM, MyISAM, MyISAM
# Create sequences with specific engines per server
connection server_1;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/save_master_gtid.inc
connection server_2;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/sync_with_master_gtid.inc
connection server_3;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/sync_with_master_gtid.inc
# Pt.1 Ensure SETVAL replicates and binlogs correctly
connection server_1;
SELECT SETVAL(s1, 10);
SETVAL(s1, 10)
10
include/save_master_gtid.inc
# Validate SETVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged SETVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged SETVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged SETVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Pt.2 Ensure NEXTVAL replicates and binlogs correctly
connection server_1;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
11
include/save_master_gtid.inc
# Validate NEXTVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged NEXTVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged NEXTVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged NEXTVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Cleanup
connection server_1;
DROP TABLE s1;
include/save_master_gtid.inc
connection server_3;
include/sync_with_master_gtid.inc
### engines: MyISAM, MyISAM, InnoDB
# Create sequences with specific engines per server
connection server_1;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/save_master_gtid.inc
connection server_2;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/sync_with_master_gtid.inc
connection server_3;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/sync_with_master_gtid.inc
# Pt.1 Ensure SETVAL replicates and binlogs correctly
connection server_1;
SELECT SETVAL(s1, 10);
SETVAL(s1, 10)
10
include/save_master_gtid.inc
# Validate SETVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged SETVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged SETVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged SETVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Pt.2 Ensure NEXTVAL replicates and binlogs correctly
connection server_1;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
11
include/save_master_gtid.inc
# Validate NEXTVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged NEXTVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged NEXTVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged NEXTVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Cleanup
connection server_1;
DROP TABLE s1;
include/save_master_gtid.inc
connection server_3;
include/sync_with_master_gtid.inc
### engines: MyISAM, InnoDB, MyISAM
# Create sequences with specific engines per server
connection server_1;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/save_master_gtid.inc
connection server_2;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/sync_with_master_gtid.inc
connection server_3;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/sync_with_master_gtid.inc
# Pt.1 Ensure SETVAL replicates and binlogs correctly
connection server_1;
SELECT SETVAL(s1, 10);
SETVAL(s1, 10)
10
include/save_master_gtid.inc
# Validate SETVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged SETVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged SETVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged SETVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Pt.2 Ensure NEXTVAL replicates and binlogs correctly
connection server_1;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
11
include/save_master_gtid.inc
# Validate NEXTVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged NEXTVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged NEXTVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged NEXTVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Cleanup
connection server_1;
DROP TABLE s1;
include/save_master_gtid.inc
connection server_3;
include/sync_with_master_gtid.inc
### engines: MyISAM, InnoDB, InnoDB
# Create sequences with specific engines per server
connection server_1;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/save_master_gtid.inc
connection server_2;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/sync_with_master_gtid.inc
connection server_3;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/sync_with_master_gtid.inc
# Pt.1 Ensure SETVAL replicates and binlogs correctly
connection server_1;
SELECT SETVAL(s1, 10);
SETVAL(s1, 10)
10
include/save_master_gtid.inc
# Validate SETVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged SETVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged SETVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged SETVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Pt.2 Ensure NEXTVAL replicates and binlogs correctly
connection server_1;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
11
include/save_master_gtid.inc
# Validate NEXTVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged NEXTVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged NEXTVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged NEXTVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Cleanup
connection server_1;
DROP TABLE s1;
include/save_master_gtid.inc
connection server_3;
include/sync_with_master_gtid.inc
### engines: InnoDB, MyISAM, MyISAM
# Create sequences with specific engines per server
connection server_1;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/save_master_gtid.inc
connection server_2;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/sync_with_master_gtid.inc
connection server_3;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/sync_with_master_gtid.inc
# Pt.1 Ensure SETVAL replicates and binlogs correctly
connection server_1;
SELECT SETVAL(s1, 10);
SETVAL(s1, 10)
10
include/save_master_gtid.inc
# Validate SETVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged SETVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged SETVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged SETVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Pt.2 Ensure NEXTVAL replicates and binlogs correctly
connection server_1;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
11
include/save_master_gtid.inc
# Validate NEXTVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged NEXTVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged NEXTVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged NEXTVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Cleanup
connection server_1;
DROP TABLE s1;
include/save_master_gtid.inc
connection server_3;
include/sync_with_master_gtid.inc
### engines: InnoDB, MyISAM, InnoDB
# Create sequences with specific engines per server
connection server_1;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/save_master_gtid.inc
connection server_2;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/sync_with_master_gtid.inc
connection server_3;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/sync_with_master_gtid.inc
# Pt.1 Ensure SETVAL replicates and binlogs correctly
connection server_1;
SELECT SETVAL(s1, 10);
SETVAL(s1, 10)
10
include/save_master_gtid.inc
# Validate SETVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged SETVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged SETVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged SETVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Pt.2 Ensure NEXTVAL replicates and binlogs correctly
connection server_1;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
11
include/save_master_gtid.inc
# Validate NEXTVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged NEXTVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged NEXTVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged NEXTVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Cleanup
connection server_1;
DROP TABLE s1;
include/save_master_gtid.inc
connection server_3;
include/sync_with_master_gtid.inc
### engines: InnoDB, InnoDB, MyISAM
# Create sequences with specific engines per server
connection server_1;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/save_master_gtid.inc
connection server_2;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/sync_with_master_gtid.inc
connection server_3;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=MyISAM;
include/sync_with_master_gtid.inc
# Pt.1 Ensure SETVAL replicates and binlogs correctly
connection server_1;
SELECT SETVAL(s1, 10);
SETVAL(s1, 10)
10
include/save_master_gtid.inc
# Validate SETVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged SETVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged SETVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged SETVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Pt.2 Ensure NEXTVAL replicates and binlogs correctly
connection server_1;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
11
include/save_master_gtid.inc
# Validate NEXTVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged NEXTVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged NEXTVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged NEXTVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Cleanup
connection server_1;
DROP TABLE s1;
include/save_master_gtid.inc
connection server_3;
include/sync_with_master_gtid.inc
### engines: InnoDB, InnoDB, InnoDB
# Create sequences with specific engines per server
connection server_1;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/save_master_gtid.inc
connection server_2;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/sync_with_master_gtid.inc
connection server_3;
SET STATEMENT sql_log_bin=0 FOR create sequence s1 cache=0 engine=InnoDB;
include/sync_with_master_gtid.inc
# Pt.1 Ensure SETVAL replicates and binlogs correctly
connection server_1;
SELECT SETVAL(s1, 10);
SETVAL(s1, 10)
10
include/save_master_gtid.inc
# Validate SETVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged SETVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged SETVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged SETVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Pt.2 Ensure NEXTVAL replicates and binlogs correctly
connection server_1;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
11
include/save_master_gtid.inc
# Validate NEXTVAL replicated correctly to other servers
connection server_3;
include/sync_with_master_gtid.inc
include/diff_tables.inc [server_1:test.s1,server_2:test.s1,server_3:test.s1]
# Validate server_1 binlogged NEXTVAL with the correct columns
connection server_1;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_2 binlogged NEXTVAL with the correct columns
connection server_2;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Validate server_3 binlogged NEXTVAL with the correct columns
connection server_3;
FLUSH LOGS;
include/ensure_binlog_row_event_columns.inc [(1,2,3,4,5,6,7,8)]
# MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
# Verifying all expected column ids appear in binlog event output..
# ..success
# Verifying only expected column ids appear in binlog event output..
# ..success
# Cleanup
connection server_1;
DROP TABLE s1;
include/save_master_gtid.inc
connection server_3;
include/sync_with_master_gtid.inc
CON: 'server_1', IMG: 'FULL', RESTART SLAVE: 'N'
connection server_1;
SET SESSION binlog_row_image= 'FULL';
SET GLOBAL binlog_row_image= 'FULL';
FLUSH TABLES;
SHOW VARIABLES LIKE 'binlog_row_image';
Variable_name Value
binlog_row_image FULL
CON: 'server_2', IMG: 'FULL', RESTART SLAVE: 'Y'
connection server_2;
SET SESSION binlog_row_image= 'FULL';
SET GLOBAL binlog_row_image= 'FULL';
include/stop_slave.inc
include/start_slave.inc
FLUSH TABLES;
SHOW VARIABLES LIKE 'binlog_row_image';
Variable_name Value
binlog_row_image FULL
CON: 'server_3', IMG: 'FULL', RESTART SLAVE: 'Y'
connection server_3;
SET SESSION binlog_row_image= 'FULL';
SET GLOBAL binlog_row_image= 'FULL';
include/stop_slave.inc
include/start_slave.inc
FLUSH TABLES;
SHOW VARIABLES LIKE 'binlog_row_image';
Variable_name Value
binlog_row_image FULL
connection server_3;
include/rpl_end.inc
# End of tests

View File

@@ -47,6 +47,14 @@
-- let $row_img_test_script= include/rpl_row_img_blobs.test
-- source include/rpl_row_img_general_loop.inc
## FULL_NODUP
-- let $row_img_set=server_1:FULL_NODUP:N,server_2:FULL_NODUP:Y,server_3:FULL_NODUP:Y
-- source include/rpl_row_img_set.inc
-- let $row_img_test_script= include/rpl_row_img_blobs.test
-- source include/rpl_row_img_general_loop.inc
## FULL
-- let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y

View File

@@ -0,0 +1 @@
!include suite/rpl/t/rpl_row_img.cnf

View File

@@ -0,0 +1,34 @@
#Want to skip this test from daily Valgrind execution
--source include/no_valgrind_without_big.inc
#
# This file contains tests for FULL_NODUP row image mode
#
--let $rpl_topology= 1->2->3
--source include/rpl_init.inc
-- source include/have_binlog_format_row.inc
-- connection server_1
-- source include/have_innodb.inc
-- connection server_2
-- source include/have_innodb.inc
-- connection server_3
-- source include/have_innodb.inc
-- connection server_1
# Tests for different storage engines on each server,
# but same index structure on tables. The tests are conducted
# using FULL_NODUP binlog-row-image on all servers.
#
-- let $row_img_set=server_1:FULL_NODUP:N,server_2:FULL_NODUP:Y,server_3:FULL_NODUP:Y
-- source include/rpl_row_img_set.inc
-- let $row_img_test_script= include/rpl_row_img.test
-- source include/rpl_row_img_general_loop.inc
-- let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y
-- source include/rpl_row_img_set.inc
--source include/rpl_end.inc

View File

@@ -0,0 +1 @@
!include suite/rpl/t/rpl_row_img.cnf

View File

@@ -0,0 +1,34 @@
#Want to skip this test from daily Valgrind execution
--source include/no_valgrind_without_big.inc
#
# This file contains tests for FULL_NODUP row image mode
#
--let $rpl_topology= 1->2->3
--source include/rpl_init.inc
-- source include/have_binlog_format_row.inc
-- connection server_1
-- source include/have_innodb.inc
-- connection server_2
-- source include/have_innodb.inc
-- connection server_3
-- source include/have_innodb.inc
-- connection server_1
# Tests for different storage engines on each server,
# but same index structure on tables. The tests are conducted
# using FULL_NODUP binlog-row-image on all servers.
#
-- let $row_img_set=server_1:FULL_NODUP:N,server_2:FULL_NODUP:Y,server_3:FULL_NODUP:Y
-- source include/rpl_row_img_set.inc
-- let $row_img_test_script= include/rpl_row_img.test
-- source include/rpl_row_img_general_loop.inc
-- let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y
-- source include/rpl_row_img_set.inc
--source include/rpl_end.inc

View File

@@ -0,0 +1,21 @@
!include include/default_mysqld.cnf
[mysqld.1]
log-slave-updates
innodb
gtid_domain_id=0
[mysqld.2]
log-slave-updates
innodb
gtid_domain_id=1
[mysqld.3]
log-slave-updates
innodb
gtid_domain_id=2
[ENV]
SERVER_MYPORT_1= @mysqld.1.port
SERVER_MYPORT_2= @mysqld.2.port
SERVER_MYPORT_3= @mysqld.3.port

View File

@@ -0,0 +1,51 @@
#
# Purpose:
# The rpl_row_img_sequence group of tests verify that sequence MDL updates,
# i.e. NEXTVAL and SETVAL, respect the binlog_row_image variable value when
# written into the binary log. In particular, it ensures that only changed
# columns are written with MINIMAL image mode, and all columns are written
# otherwise. This test focuses on validating the behavior of
# binlog_row_img=FULL_NODUP.
#
# Methodology
# After issuing a sequence update, ensure that both 1) it was replicated
# correctly, and 2) it was binlogged respective to the binlog_row_image value.
# The sequence table does not use caching to ensure each update is immediately
# binlogged. Each command is binlogged into its own unique log file, and the
# entirety of the file is analyzed for correctness of its sequence event.
# Specifically, mysqlbinlog is used in verbose mode so it outputs the columns
# which belong to the event, and the columns are analyzed to ensure the correct
# ones were logged. rpl_row_img_general_loop.inc is used to test with multiple
# chained replicas, varying engines between InnoDB and MyISAM.
#
# References:
# MDEV-28487: sequences not respect value of binlog_row_image with select
# nextval(seq_gen)
#
--let $rpl_topology= 1->2->3
--source include/rpl_init.inc
--source include/have_binlog_format_row.inc
--connection server_1
--source include/have_innodb.inc
--connection server_2
--source include/have_innodb.inc
--connection server_3
--source include/have_innodb.inc
--connection server_1
--echo #
--echo # binlog_row_image=FULL_NODUP should write all columns to the binary log
--echo #
--let $row_img_set=server_1:FULL_NODUP:N,server_2:FULL_NODUP:Y,server_3:FULL_NODUP:Y
--source include/rpl_row_img_set.inc
--let $expected_columns=(1,2,3,4,5,6,7,8)
--let row_img_test_script= include/rpl_row_img_sequence.inc
--source include/rpl_row_img_general_loop.inc
--let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y
--source include/rpl_row_img_set.inc
--source include/rpl_end.inc
--echo # End of tests