1. 程式人生 > 其它 >記一次MHA搭建中問題及報錯

記一次MHA搭建中問題及報錯

0.58 版本,github搜尋mha4mysql可下載
mha4mysql-manager_0.58-0_all.deb
mha4mysql-node_0.58-0_all.deb

依賴問題

本來使用的是centos7的rpm包,下載rpm包後利用yum安裝解決依賴問題,安裝起來比較方便;
但是用的資料庫版本mariadb5.5的版本,管理節點檢查複製時報錯,如下

[root@37 ~]# masterha_check_repl --conf=/etc/mha/app1.conf
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.

查了一下是該版本不支援這個super_read_only特性

後來又用ubuntu1804部署,用的mysql5.7,使用的mha就是deb包了
但是deb包安裝起來不如rpm包方便,安裝manage與node節點是需要太多的依賴,花了不短時間一個一個貼上複製,需要安裝的依賴及大概如下,

apt install -y libdevel-globaldestruction-perl libdist-checkconflicts-perl libmodule-runtime-perl libnamespace-autoclean-perl libparams-validationcompiler-perl libspecio-perl libtry-tiny-perl libmail-sendmail-perl libmailtools-perl libmime-lite-perl libconfig-tiny-perl liblog-dispatch-perl libparallel-forkmanager-perl libsys-hostname-long-perl libtimedate-perl libnet-smtp-ssl-perl libemail-date-format-perl libmime-types-perl libparams-classify-perl libb-hooks-endofscope-perl libnamespace-clean-perl libsub-identify-perl libeval-closure-perl libexception-class-perl libdevel-stacktrace-perl libeval-closure-perl libmro-compat-perl librole-tiny-perl libsub-quote-perl libref-util-perl libmodule-implementation-perl libsub-exporter-progressive-perl libvariable-magic-perl libsub-exporter-progressive-perl libsub-exporter-perl libdevel-lexalias-perl libclass-data-inheritable-perl libclass-c3-perl libclass-c3-xs-perl libpackage-stash-perl libsub-name-perl libio-socket-ssl-perl libauthen-sasl-perl libdevel-callchecker-perl libb-hooks-op-check-perl libdynaloader-functions-perl libdevel-caller-perl libnet-ssleay-perl libnet-libidn-perl libnet-idn-encode-perl liburi-perl libdata-optlist-perl libsub-install-perl libalgorithm-c3-perl libparams-util-perl libpadwalker-perl perl-openssl-abi-1.1 libclass-method-modifiers-perl libdbi-perl libdbd-mysql-perl libmysqlclient20

檢查複製報錯

安裝完成後,進行檢查,主要報錯如下

root@ubuntu1804:~# masterha_check_repl --conf=/etc/mha/app1.cnf
Sat Mar 26 05:20:18 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sat Mar 26 05:20:18 2022 - [info] Reading application default configuration from /etc/mha/app1.cnf..
Sat Mar 26 05:20:18 2022 - [info] Reading server configuration from /etc/mha/app1.cnf..
Sat Mar 26 05:20:18 2022 - [info] MHA::MasterMonitor version 0.58.
Sat Mar 26 05:20:19 2022 - [error][/usr/share/perl5/MHA/MasterMonitor.pm, ln427] Error happened on checking configurations. Redundant argument in sprintf at /usr/share/perl5/MHA/NodeUtil.pm line 195.
Sat Mar 26 05:20:19 2022 - [error][/usr/share/perl5/MHA/MasterMonitor.pm, ln525] Error happened on monitoring servers.
Sat Mar 26 05:20:19 2022 - [info] Got exit code 1 (Not master dead).

MySQL Replication Health is NOT OK!

提示這裡有報錯 at /usr/share/perl5/MHA/NodeUtil.pm line 195;
開啟檔案檢視,發現是解析mysql版本有問題,檢視mysql版本,網上查詢解決辦法,註釋後原始碼及修改後程式碼如下:

mysql> select version();
+-----------------------------+
| version()                   |
+-----------------------------+
| 5.7.37-0ubuntu0.18.04.1-log |
+-----------------------------+
1 row in set (0.00 sec)
vim /usr/share/perl5/MHA/NodeUtil.pm +195

#sub parse_mysql_version($) {
#  my $str = shift;
#  my $result = sprintf( '%03d%03d%03d', $str =~ m/(\d+)/g );
#  return $result;
#}
sub parse_mysql_version($) {
  my $str = shift;
 ($str) =  $str =~ m/^[^-]*/g;
  my $result = sprintf( '%03d%03d%03d', $str =~ m/(\d+)/g );
  return $result;
}

#sub parse_mysql_major_version($) {
#  my $str = shift;
#  my $result = sprintf( '%03d%03d', $str =~ m/(\d+)/g );
#  return $result;
#}
sub parse_mysql_major_version($) {
  my $str = shift;
  $str =~ /(\d+)\.(\d+)/;
  my $strmajor = "$1.$2";
  my $result = sprintf( '%03d%03d', $strmajor =~ m/(\d+)/g );
  return $result;
}

再次檢查
root@ubuntu1804:~# masterha_check_repl --conf=/etc/mha/app1.cnf
...
MySQL Replication Health is OK.

1

https://github.com/yoshinorim/mha4mysql-manager/issues/116