最近在部署mysql环境的时候,用到mha,但是中间遇到了问题,在这记录一下,希望能帮助更多的朋友:
(1)报错信息如下:
Checking if super_read_only is defined and turned on..DBD::mysql::st execute failed: Unknown system variable 'super_read_only' at /usr/share/perl5/vendor_perl/MHA/SlaveUtil.pm line 245.
......
MySQL Replication Health is NOT OK!
(2)分析
由于MariaDB没有全局的super_read_only变量,在使用masterha_check_repl做主从状态检查或其他命令做切换的时候会抛出异常,所以需要对源代码进行修改。
(3)解决
修改vim /usr/share/perl5/vendor_perl/MHA/SlaveUtil.pm文件,所有安装MHA的节点都要改(我这里是一个master节点两个slave节点一个manager节点)
第244行:
my $sth = $dbh->prepare("SELECT \@\@global.super_read_only as Value");
改为
my $sth = $dbh->prepare("SELECT 0 as Value");
第262行:
$dbh->do("SET GLOBAL super_read_only=off;");
这一行注释起来就行了。
第275行:
$dbh->do("SET GLOBAL super_read_only=on;");
改为
$dbh->do("SET GLOBAL read_only=on;");
修改完成后,保存。就可以了。
注意:pm文件修改完成后是即时生效的,无需做其他操作。我这里就是重新执行命令:masterha_check_repl --conf=/etc/masterha/app1.cnf
就不会报错了。