mysql mha 丢数据_mha 0.58 gtid模式下 丢数据问题修复

在MySQL MHA(Master High Availability)系统中,使用GTID模式时,若发生故障切换,可能存在数据丢失风险。这是因为MHA在Linux主机存活的情况下,未对比master日志获取差异。解决方案包括修改MasterFailover.pm文件,去除特定条件判断,并在apply_binlog_to_master函数中使用`mysqlbinlog --skip-gtids=true`来避免应用GTIDs,确保数据完整同步。
摘要由CSDN通过智能技术生成

问题描述:

在gtid模式下  ,mha发生故障切换 ,如果Linux主机还存活  ,不会去比对master的日志,获取差异日志 ,有导致数据丢失的风险 。

问题修复:

找到 MasterFailover.pm 文件   ,将下文! 去掉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);

}

去掉后的代码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);

}

找到 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");

}

修改后的代码  cat $_diff_binary_logsub 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");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值