mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 78fcb9474c
			
		
	
	
	78fcb9474c
	
	
	
		
			
			Clarify confusing comments in the previous commit, and note that the failure started after push of MDEV-34504. Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
		
			
				
	
	
		
			210 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # This test uses chmod, can't be run with root permissions
 | |
| -- source include/not_as_root.inc
 | |
| 
 | |
| -- source include/have_log_bin.inc
 | |
| 
 | |
| #
 | |
| # Test is run with max_binlog_size=2048 to force automatic rotation of the
 | |
| # binary log
 | |
| # Tests done:
 | |
| # - Check that slaves reports correct failures if master.info has strange
 | |
| #   modes/information
 | |
| # - Automatic binary log rotation
 | |
| # - Ensure that temporary tables works over flush logs and binary log
 | |
| #   changes
 | |
| # - Test creating a duplicate key error and recover from it
 | |
| 
 | |
| # Requires statement logging
 | |
| -- source include/have_binlog_format_mixed_or_statement.inc
 | |
| 
 | |
| connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
 | |
| connect (slave,localhost,root,,test,$SLAVE_MYPORT,$SLAVE_MYSOCK);
 | |
| 
 | |
| # Reset the GTID position explicitly (since we're not using rpl_init.inc).
 | |
| SET GLOBAL gtid_slave_pos= "";
 | |
| 
 | |
| # Create empty file
 | |
| let $MYSQLD_SLAVE_DATADIR= `select @@datadir`;
 | |
| write_file $MYSQLD_SLAVE_DATADIR/master.info;
 | |
| EOF
 | |
| chmod 0000 $MYSQLD_SLAVE_DATADIR/master.info;
 | |
| connection slave;
 | |
| 
 | |
| CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
 | |
| # START SLAVE will fail because it can't read the file (mode 000)
 | |
| # (system error 13)
 | |
| --replace_result $MYSQL_TEST_DIR TESTDIR
 | |
| --error 1105,1105,29
 | |
| start slave;
 | |
| chmod 0600  $MYSQLD_SLAVE_DATADIR/master.info;
 | |
| # It will fail again because the file is empty so the slave cannot get valuable
 | |
| # info about how to connect to the master from it (failure in
 | |
| # init_strvar_from_file() in init_master_info()).
 | |
| --error 1201
 | |
| start slave;
 | |
| --replace_result $MASTER_MYPORT MASTER_PORT
 | |
| 
 | |
| # CHANGE MASTER will fail because it first parses master.info before changing
 | |
| # it (so when master.info is bad, people have to use RESET SLAVE first).
 | |
| --error 1201
 | |
| eval change master to master_host='127.0.0.1',master_port=$MASTER_MYPORT, master_user='root';
 | |
| reset slave;
 | |
| --replace_result $MASTER_MYPORT MASTER_PORT
 | |
| eval change master to master_host='127.0.0.1',master_port=$MASTER_MYPORT, master_user='root', master_ssl_verify_server_cert=0; 
 | |
| connection master;
 | |
| reset master;
 | |
| connection slave;
 | |
| start slave;
 | |
| --source include/wait_for_slave_to_start.inc
 | |
| connection master;
 | |
| 
 | |
| #
 | |
| # Test FLUSH LOGS
 | |
| #
 | |
| create temporary table temp_table (a char(80) not null);
 | |
| insert into temp_table values ("testing temporary tables");
 | |
| create table t1 (s text);
 | |
| insert into t1 values('Could not break slave'),('Tried hard');
 | |
| sync_slave_with_master;
 | |
| let $status_items= Master_Log_File, Relay_Master_Log_File;
 | |
| source include/show_slave_status.inc;
 | |
| source include/check_slave_is_running.inc;
 | |
| select * from t1;
 | |
| connection master;
 | |
| flush logs;
 | |
| create table t2(m int not null auto_increment primary key);
 | |
| insert into t2 values (34),(67),(123);
 | |
| flush logs;
 | |
| source include/show_binary_logs.inc;
 | |
| create table t3 select * from temp_table;
 | |
| 
 | |
| sync_slave_with_master;
 | |
| 
 | |
| select * from t3;
 | |
| connection master;
 | |
| drop table temp_table, t3;
 | |
| 
 | |
| #
 | |
| # Now lets make some duplicate key mess and see if we can recover from it
 | |
| #
 | |
| 
 | |
| # First insert a value on the slave
 | |
| connection slave;
 | |
| insert into t2 values(1234);
 | |
| 
 | |
| #same value on the master
 | |
| connection master;
 | |
| set insert_id=1234;
 | |
| insert into t2 values(NULL);
 | |
| connection slave;
 | |
| # 1062 = ER_DUP_ENTRY
 | |
| call mtr.add_suppression("Slave SQL.*Error .Duplicate entry .1234. for key .PRIMARY.. on query.* error.* 1062");
 | |
| --let $slave_sql_errno= 1062
 | |
| --source include/wait_for_slave_sql_error_and_skip.inc
 | |
| 
 | |
| connection master;
 | |
| 
 | |
| #let slave catch up
 | |
| sync_slave_with_master;
 | |
| connection master;
 | |
| purge master logs to 'master-bin.000002';
 | |
| source include/show_master_logs.inc;
 | |
| # we just tests if synonyms are accepted
 | |
| purge binary logs to 'master-bin.000002';
 | |
| source include/show_binary_logs.inc;
 | |
| --source include/wait_for_binlog_checkpoint.inc
 | |
| 
 | |
| # Set the purge time 1 second after the last modify time of master-bin.000002.
 | |
| perl;
 | |
| open F, ">>".$ENV{'MYSQLTEST_VARDIR'}.'/tmp/rpl_rotate_logs.tmp' or die "Tmp file rpl_rotate_logs.tmp not found";
 | |
| my $binlogpath = $ENV{'MYSQLTEST_VARDIR'}.'/mysqld.1/data/master-bin.000002';
 | |
| my @array = stat($binlogpath);
 | |
| my $filemodifytime = $array[9];
 | |
| my @t = localtime $filemodifytime;
 | |
| my $modifytime = sprintf "%04u-%02u-%02u %02u:%02u:%02u",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0];
 | |
| printf F ("let \$tmpval = %s;",$modifytime);
 | |
| close F;
 | |
| EOF
 | |
| 
 | |
| --source $MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.tmp
 | |
| remove_file $MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.tmp;
 | |
| 
 | |
| --disable_result_log
 | |
| --replace_result $tmpval tmpval
 | |
| --eval SELECT @time_for_purge:=DATE_ADD('$tmpval', INTERVAL 1 SECOND)
 | |
| --enable_result_log
 | |
| 
 | |
| # Disable the warning "is not purged because it is the current active binlog".
 | |
| # This warning will appear or not, depending on whether the timestamp of
 | |
| # master-bin.000003 ends up earlier than @time_for_purge or not in the test run.
 | |
| --disable_warnings
 | |
| purge master logs before (@time_for_purge);
 | |
| --enable_warnings
 | |
| source include/show_binary_logs.inc;
 | |
| insert into t2 values (65);
 | |
| sync_slave_with_master;
 | |
| source include/show_slave_status.inc;
 | |
| source include/check_slave_is_running.inc;
 | |
| select * from t2;
 | |
| 
 | |
| #
 | |
| # Test forcing the replication log to rotate
 | |
| # 
 | |
| 
 | |
| connection master;
 | |
| create temporary table temp_table (a char(80) not null);
 | |
| insert into temp_table values ("testing temporary tables part 2");
 | |
| 
 | |
| # the nummber of produced logs is sensitive to whether checksum is NONE or CRC32
 | |
| # the value of 103 makes it even
 | |
| let $1=103;
 | |
| 
 | |
| create table t3 (n int);
 | |
| disable_query_log;
 | |
| while ($1)
 | |
| {
 | |
| #eval means expand $ expressions
 | |
|  eval insert HIGH_PRIORITY into t3 values($1 + 4);
 | |
|  dec $1;
 | |
| }
 | |
| enable_query_log;
 | |
| select count(*) from t3 where n >= 4;
 | |
| create table t4 select * from temp_table;
 | |
| source include/show_binary_logs.inc;
 | |
| source include/show_master_status.inc;
 | |
| sync_slave_with_master;
 | |
| select * from t4;
 | |
| 
 | |
| source include/show_slave_status.inc;
 | |
| source include/check_slave_is_running.inc;
 | |
| # because of concurrent insert, the table may not be up to date
 | |
| # if we do not lock
 | |
| lock tables t3 read;
 | |
| select count(*) from t3 where n >= 4;
 | |
| unlock tables;
 | |
| #clean up
 | |
| connection master;
 | |
| drop table if exists t1,t2,t3,t4;
 | |
| drop temporary table temp_table;
 | |
| sync_slave_with_master;
 | |
| 
 | |
| --echo End of 4.1 tests
 | |
| 
 | |
| #
 | |
| # Bug #29420: crash with show and purge binlogs
 | |
| #
 | |
| --error 1220
 | |
| show binlog events in 'non existing_binlog_file';
 | |
| --disable_warnings
 | |
| purge master logs before now();
 | |
| --error 1220
 | |
| show binlog events in '';
 | |
| purge master logs before now();
 | |
| --enable_warnings
 | |
| 
 | |
| --echo End of 5.0 tests
 | |
| --echo #cleanup
 | |
| 
 | |
| --remove_file $MYSQLD_SLAVE_DATADIR/master.info
 | |
| --source include/stop_slave.inc
 | |
| reset slave all;
 |