## 实验环境


此次实验的环境如下

- MySQL 5.7.25

- Redhat 6.10

- 操作系统账号:mysql

- 数据库复制账号:repl

- 复制格式:基于行的复制

- MHA版本: 0.56



| IP地址 |主从关系|复制账号  |复制格式  |
| --- | --- | --- | --- |
| 11.12.14.29 | 主库 | repl |Row-Based  |
| 11.12.14.30| 从库(半同步/备master)| repl |Row-Based|
| 11.12.14.39 | 从库(异步) | repl |Row-Based  |
| 11.12.14.40| 管理节点| 无 |无|
| 11.12.14.41| VIP| 无 |无|



[image:680 size:orig]




这节的内容为在正式部署MHA前需要做哪些准备

## 1. hosts文件

首先我们在四台服务器上添加其他服务器的hosts信息

```
11.12.14.29  shytest
11.12.14.30  shytest2
11.12.14.39  shytest3
11.12.14.40  shytest4
```


## 2. 配置免密码登录

接下来我们需要配置各服务请求间的免密码登录

ssh-kengen 命令后请一路下一步

**11.12.14.29**

```
ssh-keygen -t rsa

ssh-copy-id 11.12.14.30
ssh-copy-id 11.12.14.39
ssh-copy-id 11.12.14.40

ssh-copy-id shytest2
ssh-copy-id shytest3
ssh-copy-id shytest4
```

**11.12.14.30**

```
ssh-keygen -t rsa

ssh-copy-id 11.12.14.29
ssh-copy-id 11.12.14.39
ssh-copy-id 11.12.14.40

ssh-copy-id shytest
ssh-copy-id shytest3
ssh-copy-id shytest4
```

**11.12.14.39**

```
ssh-keygen -t rsa

ssh-copy-id 11.12.14.29
ssh-copy-id 11.12.14.30
ssh-copy-id 11.12.14.40

ssh-copy-id shytest
ssh-copy-id shytest2
ssh-copy-id shytest4
```

**11.12.14.40**

```
ssh-keygen -t rsa

ssh-copy-id 11.12.14.29
ssh-copy-id 11.12.14.30
ssh-copy-id 11.12.14.39


ssh-copy-id shytest
ssh-copy-id shytest2
ssh-copy-id shytest3
```


设置完之后记得测试登录

## 3. 搭建主从备份

我们根据上面的拓扑建立主从关系,11.12.14.30采用半同步,11.12.14.39采用异步

采用基于GTID的复制,否则建议关闭GTID功能 

这里就不多做介绍了,具体见上一个专题

注意在做主从同步的时候建议清理下从库相关信息

- reset master ;
- reset slave all;


## 4. 时间同步

请确认四台服务器的时间是同步的,可使用ntp进行同步


## 5.创建监控账户

接下来我们创建用于MHA监控的数据库账户

**master数据库**

```
grant all privileges on *.* to 'monitor'@'11.12.14.%' identified by '123456';
grant all privileges on *.* to 'monitor'@'127.0.0.1' identified by '123456';
flush privileges;
```


## 6. 关闭防火墙

如果防火墙开始,需要开通服务器间3306端口的通信


## 7.关闭relay日志自动清理

由于默认情况下从库的relay logs会在SQL线程执行完毕后被自动删除,但是对于MHA场景下,对于某些滞后从库的恢复依赖于其他从库的relay log,因此采取禁用自动删除功能以及定期清理的办法

使用purge_relay_logs脚本这个后面说明  

**主从库3台**

```
relay_log_purge=0
```

## 8. 从库开启只读

从库需要设置只读模式

**2台从库**

```
read_only=1
```


## 9. 二进制日志过滤参数一致


请保证一些二进制日志的过滤参数是一致的,如

- replicate-wild%
- binlog-do-db


## 10. master节点绑定VIP

刚开始需要手动将VIP绑定至master节点


```
/sbin/ifconfig eth0:2 11.12.14.41  netmask 255.255.255.0 up
```
[image:681 size:orig]

## 11. 准备自定义脚本


这里我们通过网盘下载,放到/etc/mha/script下面并赋予可执行权限
 
 
链接: https://pan.baidu.com/s/18H12bTIYHi2H0dXs2DI7NA 提取码: mwkq
 
[image:682 size:orig]


接下来我们修改相关的文件

**master_ip_failover**

该文件只需要修改

my $vip = '11.12.14.41'

**master_ip_online_change**

该文件也是需要修改

my $vip = '11.12.14.41'


**send_report**

该文件需要修改邮件配置,这个后面做介绍




## 11. 参考资料



[https://www.percona.com/blog/2016/09/02/mha-quickstart-guide/](https://www.percona.com/blog/2016/09/02/mha-quickstart-guide/)

[http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/](http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/)

[https://www.cnblogs.com/ivictor/p/5686275.html](https://www.cnblogs.com/ivictor/p/5686275.html)

[https://andblog.cn/?p=974](https://andblog.cn/?p=974)