1.配置binlog-server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@db03 ~]# cat /service/mha/app1.cnf ... ... [server1] hostname=172.16.1.51 port=3306 [server2] hostname=172.16.1.52 port=3306 [server3] hostname=172.16.1.53 port=3306 [binlog1] no_master=1 hostname=172.16.1.53 master_binlog_dir=/data/mysql/binlog/ |
2.创建存放binlog的目录
1 |
[root@db03 ~]# mkdir /data/mysql/binlog/ -p |
3.手动执行实时备份binlog的命令
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@db03 ~]# cd /data/mysql/binlog/ #备份binlog命令 [root@db03 /data/mysql/binlog]# mysqlbinlog -R --host=172.16.1.51 --user=mha --password=mha --raw --stop-never mysql-bin.000001 & #参数详解 -R #从远端服务器获取binlog --host=172.16.1.51 #指定远端的主机 --user=mha #数据库mha用户 --password=mha #数据库mha用户的密码 --raw #binlog获取时的一种格式 --stop-never mysql-bin.000001 #从mysql-bin.000001开始不停的备份binlog |
4.启动mha
1 2 |
#启动mha nohup masterha_manager --conf=/service/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /service/mha/app1/manager.log 2>&1 & |
5.加入恢复MHA进程脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
[root@db01 /scripts]# vim start_mha.sh #!/bin/bash #1.mysql进程数赋值 mysqlpid=`ps -ef | grep [m]ysql | wc -l` #2.获取配置主从语句 change=`ssh 172.16.1.53 "grep 'CHANGE MASTER TO' /service/mha/manager | tail -1 | sed 's#xxx#123#g'" | awk -F: '{print $4}'` #3.判断MySQL是否假死,如果假死杀掉重启,如果关闭则启动 if [ $mysqlpid -eq 0 ];then systemctl start mysqld else systemctl stop mysqld systemctl start mysqld systemctl restart mysqld fi sleep 5 #4.执行主从语句并启动线程 mysql -e "stop slave" mysql -e "reset slave all" mysql -e "$change" mysql -e "start slave" #5.获取主节点IP master_ip=`ssh 172.16.1.53 "mysql -e 'show slave status\G'" | awk 'NR==3 {print $2}'` #6.启动实时获取binlog进程 ssh 172.16.1.53 "cd /data/mysql/binlog && nohup mysqlbinlog -R --host=$master_ip --user=mha --password=mha --raw --stop-never < /dev/null > mysql-bin.000001 2>&1 &" #7.替换MHA配置文件 ssh 172.16.1.53 "\cp /service/mha/app1.bak /service/mha/app1.cnf" #8.启动MHA ssh 172.16.1.53 "nohup masterha_manager --conf=/service/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /service/mha/app1/manager.log 2>&1 &" |