MHA在MySQL數據庫中被廣泛使用,它小巧易用,功能強大,實現了基於MySQL replication架構的自手動主從故障轉移,從庫重定向到主庫並自動同步。盡管如此,在部署配置的過程中,由於疏忽總難以避免這樣或那樣的錯誤。本文是對MHA配置中常見問題的一個匯總,供大家參考。http://hovertree.com/menu/mysql/
1、非root用戶等效性環境等效性配置
a、添加所有節點(含管理節點)主機名及IP到host文件,所有節點操作
b、生成基於非root用戶(如使用mysql賬戶)的對稱密鑰,使用ssh-keygen
c、復制公鑰到其他各節點(含管理節點),如下,且使用了非缺省ssh 端口
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 50011 [email protected]"
d、驗證等效性(首次需要輸入密碼)
ssh -p 50011 vdbsrv1 date;ssh -p 50011 vdbsrv2 date;ssh -p 50011 vdbsrv3 date;ssh -p 55555 vdbsrv4 date
2、MHA管理節點目錄權限問題
###如果在管理節點使用了非root用戶進行mha管理,則需要相關權限,否則報錯
###如下我們使用mysql用戶管理mha,則在root賬戶先創建相關目錄,在賦權給mysql
# mkdir -p /var/log/masterha/app1
# chown -R mysql:mysql /var/log/masterha
# su - mysql
$ masterha_check_repl --conf=/etc/app1.cnf ###使用mysql用戶校驗復制關系
3、需要添加用於登陸到mysql服務器賬戶
###需要STOP SLAVE, CHANGE MASTER, RESET SLAVE等相關權限,該賬戶要添加到mha配置文件中,主從切換時用到
###在mysql數據庫各節點執行,如下由於跨網段,所以分配了跨網段賬戶,否則,單條賦權即可
### Author : Leshami
### Blog : http://blog.csdn.net/leshami
mysql> grant all privileges on *.* to 'mha'@'172.16.16.%' identified by '***';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to 'mha'@'192.168.1.%' identified by '***';
Query OK, 0 rows affected (0.00 sec)
4、需要添加用於建立復制關系的賬戶
###在mysql數據庫各節點執行,如下由於跨網段,所以分配了跨網段賬戶,否則,單條賦權即可
mysql> grant replication slave on *.* to 'repl'@'172.16.16.%' identified by '***';
Query OK, 0 rows affected (0.00 sec)
mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '***';
Query OK, 0 rows affected (0.00 sec)
5、從庫的各客戶端應開啟binlog,即log_bin=on
###未開啟則收到如下提示:
Mon Apr 13 20:02:15 2015 - [warning] log-bin is not set on slave SZ-DB-SLAVE01(192.168.81.3:3306).
This host cannot be a master.
6、各主從庫應該使用相同的復制過濾規則
###否則收到如下的錯誤提示:
Mon Apr 13 20:02:15 2015 - [error][/usr/lib/perl5/site_perl/5.8.8/MHA/ServerManager.pm, ln546] Replication
filtering check failed on dbsrv3(192.168.1.3:3306)! All slaves must have same replication filtering rules.
Check SHOW SLAVE STATUS output and set my.cnf correctly.
Mon Apr 13 20:02:15 2015 - [warning] Bad Binlog/Replication filtering rules:
7、各從庫應設置relay_log_purge=0
###否則收到以下告警信息 ##mysql -e 'set global relay_log_purge=0' 動態修改該參數,因為隨時slave會提升為master。補充@150420
Mon Apr 13 20:02:15 2015 - [warning] relay_log_purge=0 is not set on slave vdbsrv2(172.16.16.12:3306).
8、各從庫設置read_only=1
###否則收到以下告警信息 ## mysql -e 'set global read_only=1' 動態修改該參數,因為隨時slave會提升為master。補充@150420
Mon Apr 13 20:19:54 2015 - [info] read_only=1 is not set on slave vdbsrv3(172.16.16.13:3306).
9、mysqlbinlog version過低
###大多數情況下我們使用yum方式安裝perl-DBD-MySQL,該方式會自動安裝mysql rpm包。
###MHA在執行master_check_repl會調用/usr/bin/mysqlbinlog,對於源碼安裝在不同的路徑的mysql高版本
###則收到如下錯誤提示:
Thu Apr 16 14:01:44 2015 - [info] Connecting to [email protected](vdbsrv2:22)..
mysqlbinlog version is 3.2 (included in MySQL Client 5.0 or lower). This is not recommended.
Consider upgrading MySQL Client to 5.1 or higher.
###解決方案是編譯安裝perl-DBD-MySQL時指定mysql安裝位置,或者參考:mysqlbinlog can not parse row based events
10、缺省路徑下mysql客戶端如果不存在則出現以下提示
###通過建立軟鏈或者yum install perl-DBD-MySQL會自動安裝mysql
Testing mysql connection and privileges..sh: mysql: command not found
mysql command failed with rc 127:0!
at /usr/bin/apply_diff_relay_logs line 375
11、清理mysql.user用戶表中用戶名為空的記錄(補充@20150421)
筆者有一次在做在線切換時發現復制賬戶從一個slave可以到新master,而無法從original master連接到新master,刪除用戶為空記錄後正常
推薦:http://www.cnblogs.com/roucheng/p/mysqljichu.html