Commit ef818371 authored by Alfranio Correia's avatar Alfranio Correia

BUG#43406 CHANGE MASTER TO should log previous state in error log

      
When issuing a 'CHANGE MASTER TO' statement, key elements of the previous
state, namely the host, port, the master_log_file and the master_log_pos
are dumped into the error log.
parent 3f647197
...@@ -1134,6 +1134,10 @@ bool change_master(THD* thd, Master_info* mi) ...@@ -1134,6 +1134,10 @@ bool change_master(THD* thd, Master_info* mi)
int thread_mask; int thread_mask;
const char* errmsg= 0; const char* errmsg= 0;
bool need_relay_log_purge= 1; bool need_relay_log_purge= 1;
char saved_host[HOSTNAME_LENGTH + 1];
uint saved_port;
char saved_log_name[FN_REFLEN];
my_off_t saved_log_pos;
DBUG_ENTER("change_master"); DBUG_ENTER("change_master");
lock_slave_threads(mi); lock_slave_threads(mi);
...@@ -1162,6 +1166,17 @@ bool change_master(THD* thd, Master_info* mi) ...@@ -1162,6 +1166,17 @@ bool change_master(THD* thd, Master_info* mi)
could possibly modify the data structures from running could possibly modify the data structures from running
*/ */
/*
Before processing the command, save the previous state.
*/
char *pos;
pos= strmake(saved_host, mi->host, HOSTNAME_LENGTH);
pos= '\0';
saved_port= mi->port;
pos= strmake(saved_log_name, mi->master_log_name, FN_REFLEN - 1);
pos= '\0';
saved_log_pos= mi->master_log_pos;
/* /*
If the user specified host or port without binlog or position, If the user specified host or port without binlog or position,
reset binlog's name to FIRST and position to 4. reset binlog's name to FIRST and position to 4.
...@@ -1325,6 +1340,15 @@ bool change_master(THD* thd, Master_info* mi) ...@@ -1325,6 +1340,15 @@ bool change_master(THD* thd, Master_info* mi)
/* Clear the errors, for a clean start */ /* Clear the errors, for a clean start */
mi->rli.clear_error(); mi->rli.clear_error();
mi->rli.clear_until_condition(); mi->rli.clear_until_condition();
sql_print_information("'CHANGE MASTER TO executed'. "
"Previous state master_host='%s', master_port='%u', master_log_file='%s', "
"master_log_pos='%ld'. "
"New state master_host='%s', master_port='%u', master_log_file='%s', "
"master_log_pos='%ld'.", saved_host, saved_port, saved_log_name,
(ulong) saved_log_pos, mi->host, mi->port, mi->master_log_name,
(ulong) mi->master_log_pos);
/* /*
If we don't write new coordinates to disk now, then old will remain in If we don't write new coordinates to disk now, then old will remain in
relay-log.info until START SLAVE is issued; but if mysqld is shutdown relay-log.info until START SLAVE is issued; but if mysqld is shutdown
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment