403Webshell
Server IP : 104.21.38.3  /  Your IP : 162.158.88.163
Web Server : Apache
System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64
User : www ( 1000)
PHP Version : 7.4.33
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /www/server/mysql/mysql-test/suite/group_replication/t/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/server/mysql/mysql-test/suite/group_replication/t/gr_recovery_connection_options.test
################################################################################
# Recovery donor connection options test
# This test checks the user options used for donor connection during recovery.
#
# Test:
#   0) The test requires three servers.
#   1) Start server1 to boot the group. Insert some data for recovery. Create
#      the recovery user for the donor connection.
#   2) Start server2 after changing the connection credentials using the
#      change master for the server. See that the recovery is successful.
#   3) On server3 set incorrect password. Keep recovery retry count to low.
#   4) Set DEBUG point to verify member is in RECOVERY state. Start server3.
#      Check that members is recovering. Then, recovery failed causing the
#      member to go to ERROR state.
#   5) On server3 set master_user to empty user.
#   6) Set DEBUG point to verify member is in RECOVERY state. Start server3.
#      Check that members is recovering. Then, recovery failed causing the
#      member to go to ERROR state.
#   7) On server3 set master_user to non-existing user.
#   8) Set DEBUG point to verify member is in RECOVERY state. Start server3.
#      Check that members is recovering. Then, recovery failed causing the
#      member to go to ERROR state.
#   9) Do the cleanup in the end.
################################################################################

--source include/big_test.inc
--source include/have_debug_sync.inc
--let $group_replication_group_name= b5eb4110-a3a2-11e3-a5e2-0800200c9a66
--source ../inc/have_group_replication_plugin.inc

--let $rpl_skip_group_replication_start= 1
--let $rpl_server_count= 3
--source ../inc/group_replication.inc

--let $recovery_user= recovery_user
--let $recovery_password= recovery_password
--let $recovery_bad_password= recovery_bad_password

--echo #
--echo # Start the donor member
--echo #

--connection server1
--source ../inc/start_and_bootstrap_group_replication.inc

--let $group_replication_number_of_members= 1
--source ../inc/gr_wait_for_number_of_members.inc

#insert some data
CREATE TABLE t1 (c1 INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1);

--echo #
--echo # Install a rpl user for the donor connection
--echo #

--eval CREATE USER "$recovery_user" IDENTIFIED BY "$recovery_password"
--eval GRANT REPLICATION SLAVE ON *.* TO "$recovery_user"
FLUSH PRIVILEGES;

--connection server2

--echo #
--echo # Set valid options
--echo #

--disable_warnings
--eval CHANGE MASTER TO MASTER_USER='$recovery_user', MASTER_PASSWORD='$recovery_password' FOR CHANNEL 'group_replication_recovery';
--enable_warnings

--echo #
--echo # Start the joiner member with the given credentials and check if it is OK
--echo #

--source include/start_group_replication.inc

let $assert_text= On the recovered member, the table should contain 1 elements;
let $assert_cond= [select count(*) from t1] = 1;
source include/assert.inc;

--echo #
--echo # Create a new member and give it a bad password, watching it fail
--echo #

SET @debug_save= @@GLOBAL.DEBUG;

--connection server3
set session sql_log_bin=0;
call mtr.add_suppression("There was an error when connecting to the donor*");
call mtr.add_suppression("For details please check performance_schema.replication_connection_status table and error log messages of Slave I/O for channel group_replication_recovery.");
call mtr.add_suppression("Maximum number of retries when*");
call mtr.add_suppression("Fatal error during the Recovery process of Group Replication. The server will leave the group.");
call mtr.add_suppression("The member is leaving a group without being on one");
call mtr.add_suppression("The member is already leaving or joining a group.");
call mtr.add_suppression("Error leaving the group");
call mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going.");
call mtr.add_suppression(".*Invalid .* username when attempting to connect to the master server.*");
set session sql_log_bin=1;

--let $debug_save_count= `SELECT @@GLOBAL.group_replication_recovery_retry_count`
--let $debug_save_rec_int= `SELECT @@GLOBAL.group_replication_recovery_reconnect_interval`

SET @debug_save= @@GLOBAL.DEBUG;
SET @@GLOBAL.DEBUG='d,recovery_thread_wait_before_finish';

--disable_warnings
CHANGE MASTER TO MASTER_USER='$recovery_user', MASTER_PASSWORD='$recovery_bad_password' FOR CHANNEL 'group_replication_recovery';
--enable_warnings

--echo # Set the retry count to try only twice. One time for each member.
--eval SET GLOBAL group_replication_recovery_retry_count= 2;
--echo # Set the reconnect interval to one. To prevent timeout on recovery.
--eval SET GLOBAL group_replication_recovery_reconnect_interval= 1;

--let $assert_text= The value of the recovery retry count should be equal to 2
--let $assert_cond= "[SELECT @@group_replication_recovery_retry_count]" = "2"
--source include/assert.inc

--echo # Start recovery and wait to verify the member is in recovery
--let $group_replication_start_member_state= RECOVERING
--source include/start_group_replication.inc

--echo # The member should error out as it can't connect
SET DEBUG_SYNC= "now SIGNAL signal.recovery_end";
--let $group_replication_member_state= ERROR
--source ../inc/gr_wait_for_member_state.inc

--echo #
--echo # Set MASTER_USER to an empty user name, watching it fail
--echo #

--source include/stop_group_replication.inc

CHANGE MASTER TO MASTER_USER= '', MASTER_PASSWORD= '' FOR CHANNEL 'group_replication_recovery';

--echo # Start recovery and wait to verify the member is in recovery
--let $group_replication_start_member_state= RECOVERING
--source include/start_group_replication.inc

SET DEBUG_SYNC= "now SIGNAL signal.recovery_end";
--let $group_replication_member_state= ERROR
--source ../inc/gr_wait_for_member_state.inc

--echo # Verify that the show slave status shows specific IO_error
let $show_statement= SHOW SLAVE STATUS FOR CHANNEL 'group_replication_recovery';
let $field= Last_IO_Errno;
let $condition= = '1045';
--source include/wait_show_condition.inc

--source include/stop_group_replication.inc

--echo #
--echo # Set MASTER_USER to non existing user, watching it fail
--echo #

CHANGE MASTER TO MASTER_USER= 'parveez', MASTER_PASSWORD= 'me' FOR CHANNEL 'group_replication_recovery';

--echo # Start recovery and wait to verify the member is in recovery
--let $group_replication_start_member_state= RECOVERING
--source include/start_group_replication.inc

SET DEBUG_SYNC= "now SIGNAL signal.recovery_end";
--let $group_replication_member_state= ERROR
--source ../inc/gr_wait_for_member_state.inc

--echo # Verify that show slave status shows specific IO_ERROR
let $show_statement= SHOW SLAVE STATUS FOR CHANNEL 'group_replication_recovery';
let $field= Last_IO_Errno;
let $condition= = '1045';
--source include/wait_show_condition.inc

--source include/stop_group_replication.inc

--connection server2
--let $group_replication_number_of_members= 2
--source ../inc/gr_wait_for_number_of_members.inc

--echo #
--echo # Clean up
--echo #

--eval DROP USER "$recovery_user"
--connection server3
SET DEBUG_SYNC='RESET';
SET @@GLOBAL.DEBUG = @debug_save;
--eval SET GLOBAL group_replication_recovery_retry_count= $debug_save_count
--eval SET GLOBAL group_replication_recovery_reconnect_interval= $debug_save_rec_int

--connection server2
DROP TABLE t1;

--source ../inc/group_replication_end.inc

Youez - 2016 - github.com/yon3zu
LinuXploit