Lost data restoration problem under mha 0.58 gtid mode


Problem Description: 

In gtid mode, mha failover occurs, if the Linux host still alive, will not go to master than the log, access log differences, leading to the risk of data loss.


Bug fixes:

Find MasterFailover.pm file, below! Remove

    if ( !$_server_manager->is_gtid_auto_pos_enabled() ) {
      $log->info();
      $log->info("* Phase 3.2: Saving Dead Master's Binlog Phase..\n");
      $log->info();
      save_master_binlog($dead_master);
    }

After removing the code

    if ( $_server_manager->is_gtid_auto_pos_enabled() ) {
      $log->info();
      $log->info("* Phase 3.2: Saving Dead Master's Binlog Phase..\n");
      $log->info();
      save_master_binlog($dead_master);
    }

Defined function to find the location apply_binlog_to_master

sub apply_binlog_to_master($) {
  my $target   = shift;
  my $err_file = "$g_workdir/mysql_from_binlog.err";
  my $command =
"cat $_diff_binary_log  | mysql --binary-mode --user=$target->{mysql_escaped_user} --password=$target->{mysql_escaped_password} --host=$target->{ip} --port=$target->{port} -vvv --unbuffered > $err_file 2>&1";

  $log->info("Checking if super_read_only is defined and turned on..");
  my ($super_read_only_enabled, $dbh) =
          MHA::SlaveUtil::check_if_super_read_only($target->{hostname}, $target->{ip}, $target->{port}, $target->{user}, $target->{password});
  if ($super_read_only_enabled) {
    MHA::SlaveUtil::disable_super_read_only($dbh);
  } else {
    $log->info(" not present or turned off, ignoring.\n");
  }

The revised Code cat $ _diff_binary_log 

sub apply_binlog_to_master($) {
  my $target   = shift;
  my $err_file = "$g_workdir/mysql_from_binlog.err";
  my $command =
"mysqlbinlog $_diff_binary_log --skip-gtids=true | mysql --binary-mode --user=$target->{mysql_escaped_user} --password=$target->{mysql_escaped_password} --host=$target->{ip} --port=$target->{port} -vvv --unbuffered > $err_file 2>&1";

  $log->info("Checking if super_read_only is defined and turned on..");
  my ($super_read_only_enabled, $dbh) =
          MHA::SlaveUtil::check_if_super_read_only($target->{hostname}, $target->{ip}, $target->{port}, $target->{user}, $target->{password});
  if ($super_read_only_enabled) {
    MHA::SlaveUtil::disable_super_read_only($dbh);
  } else {
    $log->info(" not present or turned off, ignoring.\n");
  }






Guess you like

Origin blog.51cto.com/dwchaoyue/2463960