1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
################################################################################
# This test proves credentials passed in START GR have preference over channel.
# This test also proves credentials are deleted on STOP GR.
#
# Test:
# 0. The test requires two servers: M1 and M2.
# 1. Bootstrap M1. And create new users.
# 2. Reset recovery interval to 1 and count to 2 for M2.
# 3. Test START GR passing right credentials and wrong in channel.
# 4. Stop GR and check start GR does not work without credentials.
# Confirming credentials have been deleted.
# 5. Test START GR fails passing wrong credentials and right in channel.
# 6. Start GR without credentials should work due to channel.
# Confirming credentials have been deleted.
# 7. Cleanup.
################################################################################
--source include/have_group_replication_xcom_communication_stack.inc
--source include/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--source include/group_replication.inc
--echo
--echo # 1. Bootstrap M1. And create new users.
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--source include/start_and_bootstrap_group_replication.inc
SET SQL_LOG_BIN=0;
CREATE USER 'regular_user_p' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO "regular_user_p";
SET SQL_LOG_BIN=1;
--echo
--echo # 2. Reset recovery interval to 1 and count to 2 for M2.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
SET @saved_group_replication_recovery_reconnect_interval = @@GLOBAL.group_replication_recovery_reconnect_interval;
SET @saved_gr_recovery_retry_count = @@GLOBAL.group_replication_recovery_retry_count;
SET GLOBAL group_replication_recovery_reconnect_interval= 1;
SET GLOBAL group_replication_recovery_retry_count= 2;
--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME
--eval SET GLOBAL group_replication_group_name= "$group_replication_group_name"
--echo
--echo # 3. Test START GR passing right credentials and wrong in channel.
CHANGE REPLICATION SOURCE TO SOURCE_USER= 'invalid', SOURCE_PASSWORD='wrong' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION USER='regular_user_p', PASSWORD='password';
--let $group_replication_member_state = ONLINE
--source include/gr_wait_for_member_state.inc
--source include/stop_group_replication.inc
--echo
--echo # 4. Stop GR and check start GR does not work without credentials.
--echo # Confirming credentials have been deleted.
START GROUP_REPLICATION;
--let $group_replication_member_state = ERROR
--source include/gr_wait_for_member_state.inc
--source include/stop_group_replication.inc
--echo
--echo # 5. Test START GR fails passing wrong credentials and right in channel.
CHANGE REPLICATION SOURCE TO SOURCE_USER= 'regular_user_p', SOURCE_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION USER='user_wrong' , PASSWORD='password_wrong';
--let $group_replication_member_state = ERROR
--source include/gr_wait_for_member_state.inc
--source include/stop_group_replication.inc
--echo
--echo # 6. Start GR without credentials should work due to channel.
--echo # Confirming credentials have been deleted.
--source include/start_group_replication.inc
--source include/stop_group_replication.inc
--echo
--echo # 7. Cleanup.
CHANGE REPLICATION SOURCE TO SOURCE_USER = 'root' , SOURCE_PASSWORD = '' FOR CHANNEL 'group_replication_recovery';
SET SESSION sql_log_bin = 0;
call mtr.add_suppression("Replica I/O for channel 'group_replication_recovery': Fatal error: Invalid .* username when attempting to connect to the source server.*");
call mtr.add_suppression("There was an error when connecting to the donor server. Please check that group_replication_recovery channel credentials and all MEMBER_HOST column values of performance_schema.replication_group_members table are correct and DNS resolvable.");
call mtr.add_suppression("For details please check performance_schema.replication_connection_status table and error log messages of Replica I/O for channel group_replication_recovery.");
call mtr.add_suppression("Maximum number of retries when trying to connect to a donor reached. Aborting group replication incremental recovery.");
call mtr.add_suppression("Fatal error during the incremental recovery process of Group Replication. The server will leave the group.");
call mtr.add_suppression("The server was automatically set into read only mode after an error was detected.");
call mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going.");
call mtr.add_suppression("The server was automatically set into read only mode after an error was detected.");
SET SESSION sql_log_bin = 1;
SET @@GLOBAL.group_replication_recovery_reconnect_interval = @saved_group_replication_recovery_reconnect_interval;
SET @@GLOBAL.group_replication_recovery_retry_count = @saved_gr_recovery_retry_count;
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
SET SQL_LOG_BIN=0;
DROP USER 'regular_user_p';
SET SQL_LOG_BIN=1;
--source include/group_replication_end.inc
|