搭建MHA前提最好 搭建GTID主从复制
确保主从库的状态
#主库
mysql> show master status;
#从库
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#从库
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
部署MHA之前配置
1.关闭从库删除relay-log的功能
relay_log_purge=0
2.配置从库只读
read_only=1
3.从库保存binlog
log_slave_updates
#禁用自动删除relay log 功能
mysql> set global relay_log_purge = 0;
#设置只读
mysql> set global read_only=1;
#编辑配置文件
[root@mysql-db02 ~]# vim /etc/my.cnf
#在mysqld标签下添加
[mysqld]
#禁用自动删除relay log 永久生效
relay_log_purge = 0
配置
主库配置
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
basedir = /service/mysql
datadir = /service/mysql/data
server_id=1
log_bin=/service/mysql/data/mysql-bin
gtid_mode=on
enforce_gtid_consistency
log-slave-updates
relay_log_purge=0
skip-name-resolve
read_only=1
从库配置
[root@db02 ~]# vim /etc/my.cnf
[mysqld]
basedir = /service/mysql
datadir = /service/mysql/data
server_id=2
log_bin=/service/mysql/data/mysql-bin
gtid_mode=on
enforce_gtid_consistency
log-slave-updates
relay_log_purge=0
skip-name-resolve
read_only=1
[root@db03 ~]# vim /etc/my.cnf
[mysqld]
basedir = /service/mysql
datadir = /service/mysql/data
server_id=3
log_bin=/service/mysql/data/mysql-bin
gtid_mode=on
enforce_gtid_consistency
log-slave-updates
relay_log_purge=0
skip-name-resolve
read_only=1
部署MHA
安装依赖(主从库都要安装)
[root@db01 ~]# yum install perl-DBD-MySQL -y
[root@db02 ~]# yum install perl-DBD-MySQL -y
[root@db03 ~]# yum install perl-DBD-MySQL -y
安装manager依赖(manger机器,10.0.0.53)
[root@db03 ~]# yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
部署node节点(主从库都要安装)
[root@db01 ~]# rz mha4mysql-node-0.56-0.el6.noarch.rpm
[root@db02 ~]# rz mha4mysql-node-0.56-0.el6.noarch.rpm
[root@db03 ~]# rz mha4mysql-node-0.56-0.el6.noarch.rpm
[root@db01 ~]# yum localinstall -y mha4mysql-node-0.56-0.el6.noarch.rpm
[root@db02 ~]# yum localinstall -y mha4mysql-node-0.56-0.el6.noarch.rpm
[root@db03 ~]# yum localinstall -y mha4mysql-node-0.56-0.el6.noarch.rpm
部署manager节点(manager机器,10.0.0.53安装)
[root@db03 ~]# rz mha4mysql-manager-0.56-0.el6.noarch.rpm
[root@db03 ~]# yum localinstall -y mha4mysql-manager-0.56-0.el6.noarch.rpm
配置MHA
#创建MHA配置目录
[root@db03 ~]# mkdir -p /service/mha
#配置MHA
[root@db03 ~]# vim /service/mha/app1.cnf
[server default]
#指定日志存放路径
manager_log=/service/mha/manager
#指定工作目录
manager_workdir=/service/mha/app1
#binlog存放目录
master_binlog_dir=/usr/local/mysql/data
#MHA管理用户
user=mha
#MHA管理用户的密码
password=mha
#检测时间
ping_interval=2
#主从用户
repl_user=rep
#主从用户的密码
repl_password=123
#ssh免密用户
ssh_user=root
[server1]
hostname=172.16.1.51
port=3306
[server2]
#candidate_master=1
#check_repl_delay=0
hostname=172.16.1.52
port=3306
[server3]
hostname=172.16.1.53
port=3306
创建MHA管理用户
#主库执行即可
mysql> grant all on *.* to mha@'172.16.1.%' identified by 'mha';
Query OK, 0 rows affected (0.03 sec)
ssh免密(主从机器都要操作)
#创建秘钥对
[root@db01 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
#发送公钥,包括自己
[root@db01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.51
[root@db01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.52
[root@db01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.53
检测MHA状态
#检测主从
[root@db03 ~]# masterha_check_repl --conf=/service/mha/app1.cnf
MySQL Replication Health is OK.
报错总结
#原因:
从库库没有开启保存binlog
#解决方式:
[root@db01 ~]# vim /etc/my.cnf
log-slave-updates
#检测ssh
[root@db03 ~]# masterha_check_ssh --conf=/service/mha/app1.cnf
Mon Jul 27 11:40:06 2020 - [info] All SSH connection tests passed successfully.
测试MHA
#停掉主库
[root@db01 ~]# /etc/init.d/mysqld stop
#查看MHA的日志
[root@db03 ~]# tail -f /service/mha/manager
#登录数据库查看状态