記一次MHA搭建中問題及報錯
阿新 • • 發佈:2022-03-26
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.