一 Mysql 在服务器中的部署方法
在企业中
90%
的服务器操作系统均为
Linux
在企业中对于
Mysql
的安装通常用源码编译的方式来进行
1.1 在Linux下部署mysql
1.1.1 安装依赖性:
[root@mysql-node10 ~]# dnf install cmake gcc-c++ openssl-devel \ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el7_4.x86_64.rpm rpcgen.x86_64
1.1.2 下载并解压源码包
[root@mysql-node10 ~]# tar zxf mysql-boost-5.7.44.tar.gz[root@mysql-node10 ~]# cd /root/mysql-5.7.44
1.1.3 源码编译安装mysql
[root@mysql-node10 mysql-5.7.44]# cmake \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # 指定安装路径-DMYSQL_DATADIR=/data/mysql \ # 指定数据目录-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \ # 指定套接字文件-DWITH_INNOBASE_STORAGE_ENGINE=1 \ # 指定启用 INNODB 存储引擎,默认用 myisam-DWITH_EXTRA_CHARSETS=all \ # 扩展字符集-DDEFAULT_CHARSET=utf8mb4 \ # 指定默认字符集-DDEFAULT_COLLATION=utf8mb4_unicode_ci \ # 指定默认校验字符集-DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/ # 指定 c++ 库依赖
1.1.4 部署mysql
# 生成启动脚本[root@node10 ~]# dnf install initscripts-10.11.6-1.el9.x86_64 -y[root@node10 ~]# cd /usr/local/mysql/support-files/[root@node10 support-files]# cp mysql.server /etc/init.d/mysqld
#
生成数据目录
[root@mysql-node1 ~]# useradd -s /sbin/nologin -M mysql[root@mysql-node1 ~]# mkdir -p /data/mysql[root@mysql-node1 ~]# chown mysql.mysql /data/mysql/
#
修改环境变量
[root@node10 ~]# vim ~/.bash_profileexport PATH=$PATH:/usr/local/mysql/bin[root@node10 ~]# source ~/.bash_profile
#
修改配置文件
[root@node10 my.cnf.d]# vim /etc/my.cnf[mysqld]datadir=/data/mysql # 指定数据目录socket=/data/mysql/mysql.sock # 指定套接字symbolic-links=0 # 数据只能存放到数据目录中,禁止链接到数据目录
二 mysql的组从复制
2.1 配置mastesr
[root@mysql-node10 ~]# vim /etc/my.cnf[mysqld]datadir=/data/mysqlsocket=/data/mysql/mysql.socksymbolic-links=0log-bin=mysql-binserver-id=1[root@mysql-node10 ~]# /etc/init.d/mysqld restart
#进入数据库配置用户权限
[root@mysql-node10 ~]# mysql -plee
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%'; ## 对这个用户进行授权mysql> SHOW MASTER STATUS;
2.2 在slave上的配置
[root@mysql-node2 ~]# vim /etc/my.cnf[mysqld]datadir=/data/mysqlsocket=/data/mysql/mysql.socksymbolic-links=0server-id=2[root@mysql-node2 ~]# /etc/init.d/mysqld restart[root@mysql-node2 ~]# mysql -plee
启动数据库
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10',MASTER_USER='repl',MASTER_PASSWORD='lee',MASTER_LOG_F ILE='mysqlbin.000001',MASTER_LOG_POS=350mysql> start slave;mysql> SHOW SLAVE STATUS\G;
测试:
[root@mysql-node10 ~]# mysql -pleemysql> CREATE DATABASE lee;
mysql> CREATE TABLE lee.userlist (-> username varchar(20) not null,-> password varchar(50) not null-> );mysql> INSERT INTO lee.userlist VALUE ('lee','123');mysql> SELECT * FROM lee.userlist;
在slave上查看同步
2.4 延迟复制
延迟复制时用来控制
sql
线程的,和
i/o
线程无关 这个延迟复制不是i/o
线程过段时间来复制,
i/o
是正常工作的 是日志已经保存在slave
端了,那个
sql
要等多久进行回放 当master
端误操作,可以在
slave
端进行数据备份
#在slave端
mysql> STOP SLAVE SQL_THREAD;
mysql> CHANGE MASTER TO MASTER_DELAY=60;
mysql> START SLAVE SQL_THREAD;
mysql> SHOW SLAVE STATUS\G;
Master_Server_Id: 1
Master_UUID: db2d8c92-4dc2-11ef-b6b0-000c299355ea
Master_Info_File: /data/mysql/master.info
SQL_Delay: 60 ##延迟效果
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more
updates
Master_Retry_Count: 86400
测试:
经过60秒后才收到
2.5 慢查询日志
- 慢查询,顾名思义,执行很慢的查询
- 当执行SQL超过long_query_time参数设定的时间阈值(默认10s)时,就被认为是慢查询,这个 SQL语句就是需要优化的
- 慢查询被记录在慢查询日志里
- 慢查询日志默认是不开启的
- 如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的
mysql> SHOW variables like "slow%";
+---------------------+----------------------------------+
| Variable_name | Value |
+---------------------+----------------------------------+
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /data/mysql/mysql-node1-slow.log |
+---------------------+----------------------------------+
3 rows in set (0.00 sec)
开启慢查询日志
mysql> SET GLOBAL slow_query_log=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> SET long_query_time=4;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES like "long%";
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 4.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES like "slow%";
+---------------------+----------------------------------+
| Variable_name | Value |
+---------------------+----------------------------------+
| slow_launch_time | 2 |
| slow_query_log | ON | ##慢查询日志开启
| slow_query_log_file | /data/mysql/mysql-node1-slow.log |
+---------------------+----------------------------------+
3 rows in set (0.01 sec)
[root@mysql-node1 ~]# cat /data/mysql/mysql-node1-slow.log #慢查询日志
/usr/local/mysql/bin/mysqld, Version: 5.7.44-log (Source distribution). started
with:
Tcp port: 3306 Unix socket: /data/mysql/mysql.sock
查看日志信息:
mysql> select sleep (10);
[root@mysql-node1 ~]# cat /data/mysql/mysql-node1-slow.log
/usr/local/mysql/bin/mysqld, Version: 5.7.44-log (Source distribution). started
with:
Tcp port: 3306 Unix socket: /data/mysql/mysql.sock
Time Id Command Argument
# Time: 2024-07-29T17:04:07.612704Z
# User@Host: root[root] @ localhost [] Id: 8
# Query_time: 10.000773 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1722272647;
select sleep (10);
2.6 mysql的并行复制
默认情况下
slave
中使用的是
sql
单线程回放
在
master
中时多用户读写,如果使用
sql
单线程回放那么会造成组从延迟严重
开启
MySQL
的多线程回放可以解决上述问题
在slave上
查看
此时
sql
线程转化为协调线程,
16
个
worker
负责处理
sql
协调线程发送过来的处理请求
2.7 原理刨析
三个线程
实际上主从同步的原理就是基于
binlog
进行数据同步的。在主从复制过程中,会基于
3
个线程来操作,
一个主库线程,两个从库线程。
二进制日志转储线程(
Binlog dump thread
)是一个主库线程。当从库线程连接的时候, 主库可以 将二进制日志发送给从库,当主库读取事件(Event
)的时候,会在
Binlog
上加锁,读取完成之 后,再将锁释放掉。
从库
I/O
线程会连接到主库,向主库发送请求更新
Binlog
。这时从库的
I/O
线程就可以读取到主库 的二进制日志转储线程发送的 Binlog
更新部分,并且拷贝到本地的中继日志 (
Relay log
)。
从库
SQL
线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同 步。
2.8 架构缺陷
主从架构采用的是异步机制
master
更新完成后直接发送二进制日志到
slave
,但是
slaves
是否真正保存了数据
master
端不会检测
master
端直接保存二进制日志到磁盘
当
master
端到
slave
端的网络出现问题时或者
master
端直接挂掉,二进制日志可能根本没有到达
slave
master
出现问题
slave
端接管
master
,这个过程中数据就丢失了
这样的问题出现就无法达到数据的强一致性,零数据丢失
三 半同步模式
3.1半同步模式原理
1.
用户线程写入完成后
master
中的
dump
会把日志推送到
slave
端
2.slave
中的
io
线程接收后保存到
relaylog
中继日志
3.
保存完成后
slave
向
master
端返回
ack
4.
在未接受到
slave
的
ack
时
master
端时不做提交的,一直处于等待当收到
ack
后提交到存储引擎
5.
在
5.6
版本中用到的时
after_commit
模式,
after_commit
模式时先提交在等待
ack
返回后输出
ok
3.2 gtid模式
当为启用gtid时我们要考虑的问题
在
master
端的写入时多用户读写,在
slave
端的复制时单线程日志回放,所以
slave
端一定会延迟与
master
端 这种延迟在slave
端的延迟可能会不一致,当
master
挂掉后
slave
接管,一般会挑选一个和
master
延迟日
志最接近的充当新的
master 那么为接管master
的主机继续充当
slave
角色并会指向到新的
master
上,作为其
slave
这时候按照之前的配置我们需要知道新的
master
上的
pos
的
id
,但是我们无法确定新的
master
和
slave
之
间差多少
当激活
GITD
之后
当
master
出现问题后,
slave2
和
master
的数据最接近,会被作为新的
master slave1指向新的
master
,但是他不会去检测新的
master
的
pos id
,只需要继续读取自己
gtid_next
即可
在master上开启gitd
[root@mysql-node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
symbolic-links=0
[root@mysql-node1 ~]# /etc/init.d/mysqld restart
在slave上开启
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=2
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
symbolic-links=0
[root@mysql-node2 ~]# /etc/init.d/mysqld restart
[root@mysql-node3 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=3
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
symbolic-links=0
[root@mysql-node3 ~]# /etc/init.d/mysqld restart
查看效果
3.3.启用半同步模式
在
master
端配置启用半同步模式
[root@mysql-node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1 #开启半同步功能
symbolic-links=0
[root@mysql-node1 ~]# mysql -p lee
#安装半同步插件
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
#
查看插件情况
#打开半同步功能
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
#查看半同步功能状态
在slave端开启半同步功能
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1 #开启半同步功能
symbolic-links=0
[root@mysql-node2 ~]# mysql -plee
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
Query OK, 0 rows affected (0.00 sec)
mysql> STOP SLAVE IO_THREAD; #重启io线程,半同步才能生效
Query OK, 0 rows affected (0.00 sec)
mysql> START SLAVE IO_THREAD; ##重启io线程,半同步才能生效
Query OK, 0 rows affected (0.00 sec)
测试:
四 mysql高可用之组复制 (MGR)
MySQL Group Replication(
简称
MGR )
是
MySQL
官方于
2016
年
12
月推出的一个全新的高可用与高扩 展的解决方案 组复制是 MySQL 5.7.17 版本出现的新特性,它提供了高可用、高扩展、高可靠的
MySQL
集群服务 MySQL 组复制分单主模式和多主模式,传统的
mysql
复制技术仅解决了数据同步的问题, MGR 对属于同一组的服务器自动进行协调。对于要提交的事务,组成员必须就全局事务序列中给定事务 的顺序达成一致 提交或回滚事务由每个服务器单独完成,但所有服务器都必须做出相同的决定 如果存在网络分区,导致成员无法达成事先定义的分割策略,则在解决此问题之前系统不会继续进行, 这是一种内置的自动裂脑保护机制 MGR由组通信系统(
Group Communication System
,
GCS )
协议支持 该系统提供故障检测机制、组成员服务以及安全且有序的消息传递
4.1 组复制流程
首先我们将多个节点共同组成一个复制组,在执行读写(
RW
)事务的时候,需要通过一致性协议层 (Consensus
层)的同意,也就是读写事务想要进行提交,必须要经过组里
“
大多数人
”
(对应
Node
节 点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1
),这样才可以进行提交,而不是原发起 方一个说了算。而针对只读(RO
)事务则不需要经过组内同意,直接 提交 即可
4.2 组复制单主和多主模式
single-primary mode(单写或单主模式)
4.3.实现mysql组复制
编辑主配置文件:
在
mysql-node10
中:
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=1 #配置server唯一标识号
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #禁用指定存储
引擎
gtid_mode=ON #启用全局事件标识
enforce_gtid_consistency=ON #强制gtid一致
master_info_repository=TABLE #复制事件数据到表中而不记录在数据目录中
relay_log_info_repository=TABLE
binlog_checksum=NONE #禁止对二进制日志校验
log_slave_updates=ON #打开数据库中继,
#当slave中sql线程读取日志后也会写入到自己的binlog中
log_bin=binlog #重新指定log名称
binlog_format=ROW #使用行日志格式
plugin_load_add='group_replication.so' #加载组复制插件
transaction_write_set_extraction=XXHASH64 #把每个事件编码为加密散列
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #通知插件正
式加入
#或创建的组
名
#名称为
uuid格式
group_replication_start_on_boot=off #在server启动时不自动启动组复
制
group_replication_local_address="172.25.254.10:33061" #指定插件接受其他成员的信息端
口
group_replication_group_seeds="172.25.254.10:33061,172.25.254.20:33061,
172.25.254.30:33061" #本地地址允许访
问成员列表
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8" #主机白名单
#不随系统自启而启动,只在初始成员主机中手动开启,
#需要在两种情况下做设定:1.初始化建组时 2.关闭并重新启动整个组时
group_replication_bootstrap_group=off
group_replication_single_primary_mode=OFF #使用多主模式
group_replication_enforce_update_everywhere_checks=ON #组同步中有任何改变
检测更新
group_replication_allow_local_disjoint_gtids_join=1 #放弃自己信息以
master事件为主
[root@mysql-node10 ~]# mysqld --user=mysql --initialize
[root@mysql-node10 ~]# /etc/init.d/mysqld start
[root@mysql-node10 ~]# mysql -uroot -p初始化后生成的密码 -e "alter user
root@localhost identified by 'lee';"
测试:
#在mysql-node10中
[root@mysql-node10 ~]# mysql -p
mysql> CREATE DATABASE lee;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE TABLE lee.userlist(
-> username VARCHAR(10) PRIMARY KEY NOT NULL,
-> password VARCHAR(50) NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO lee.userlist VALUES ('user1','111');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
+----------+----------+
1 row in set (0.00 sec)
#在mysql-node20中
[root@mysql-node20 ~]# mysql -p
mysql> INSERT INTO lee.userlist values ('user2','222');
Query OK, 1 row affected (0.00 sec)
mysql> select * from lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
| user2 | 222 |
+----------+----------+
2 rows in set (0.00 sec)
#mysql—node30中
[root@mysql-node30 ~]# mysql -p
mysql> INSERT INTO lee.userlist values ('user3','333');
Query OK, 1 row affected (0.00 sec)
mysql> select * from lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
| user2 | 222 |
| user3 | 333 |
+----------+----------+
3 rows in set (0.00 sec)
五 mysql-router(mysql路由)
MySQL Router
是一个对应用程序透明的
InnoDB Cluster
连接路由服务,提供负载均衡、应用连接故障转移和客户端路 由。 利用路由器的连接路由特性,用户可以编写应用程序来连接到路由器,并令路由器使用相应的路由策略 来处理连接,使其连接到正确的MySQL数据库服务器
Mysql route
的部署方式
我们需要在所有的数据库主机之外再开一台主机
mysql-router
#
安装
mysql-router
[root@mysql-router ~]# rpm -ivh mysql-router-community-8.4.0-1.el7.x86_64.rpm
配置
mysql-router
[root@mysql-router ~]# vim /etc/mysqlrouter/mysqlrouter.conf[routing:ro]bind_address = 0.0.0.0bind_port = 7001destinations = 172.25.254.10:3306,172.25.254.20:3306,172.25.254.30:3306routing_strategy = round-robin[routing:rw]bind_address = 0.0.0.0bind_port = 7002destinations = 172.25.254.30:3306,172.25.254.20:3306,172.25.254.10:3306routing_strategy = first-available
建立测试用户
mysql> CREATE USER lee@'%' IDENTIFIED BY 'lee';mysql> GRANT ALL ON lee.* TO lee@'%';
查看
六 mysql高可用之MHA
6.1.MHA概述
什么是
MHA
?
- MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
- MHA 的出现就是解决MySQL 单点的问题。
- MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
- MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用
MHA
的组成
- MHA由两部分组成:MHAManager (管理节点) MHA Node (数据库节点),
- MHA Manager 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave 节点上。
- MHA Manager 会定时探测集群中的 master 节点。
- 当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。
6.2 MHA部署实施
6.2.1 搭建主两从架构
前期准备:进行公钥免密认证,安装软件包,编写本地解析
#在master节点中
[root@mysql-node10 ~]# /etc/init.d/mysqld stop
[root@mysql-node10 ~]# rm -fr /data/mysql/*
[root@mysql-node10 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=ON
symbolic-links=0
[root@mysql-node10 ~]# mysqld --user mysql --initialize
[root@mysql-node10 ~]# /etc/init.d/mysqld start
[root@mysql-node10 ~]# mysql_secure_installation
数据库配置
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
slave上配置
[root@mysql-node20 & 30 ~]# /etc/init.d/mysqld stop
[root@mysql-node20 & 30 ~]# rm -fr /data/mysql/*
[root@mysql-node20 & 30 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=ON
symbolic-links=0
[root@mysql-node20 & 30 ~]# mysqld --user mysql --initialize
[root@mysql-node20 & 300 ~]# /etc/init.d/mysqld start
[root@mysql-node20 & 30 ~]# mysql_secure_installation
数据库配置
mysql> start slave;mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1mysql> STOP SLAVE IO_THREAD;mysql> START SLAVE IO_THREAD;
6.2.2安装MHA所需要的软件
[root@mysql-mha ~]# unzip MHA-7.zip
[root@mysql-mha MHA-7]# yum install *.rpm -y
6.2.3 配置MHA 的管理环境
#生成配置文件
[root@mysql-mha ~]# mkdir /etc/masterha
[root@mysql-mha MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz
[root@mysql-mha MHA-7]# cd mha4mysql-manager-0.58/samples/conf/
[root@mysql-mha conf]# cat masterha_default.cnf app1.cnf >
/etc/masterha/app1.cnf
#编辑配置文件
[root@mysql-mha ~]# vim /etc/masterha/app1.cnf
[server default]
user=root #mysql管理员用户,因为需要做自动化配置
password=lee #mysql密码
ssh_user=root #ssh远程登陆用户
repl_user=repl #mysql主从复制中负责认证的用户
repl_password=lee #mysql主从复制中负责认证的用户密码
master_binlog_dir= /data/mysql #二进制日志目录
remote_workdir=/tmp #远程工作目录
#此参数使为了提供冗余检测,方式是mha主机网络自身的问题无法连接数据库节点,应为集群之外的主机
secondary_check_script= masterha_secondary_check -s 172.25.254.10 -s
172.25.254.11
ping_interval=3 #每隔3秒检测一次
#发生故障后调用的脚本,用来迁移vip
# master_ip_failover_script= /script/masterha/master_ip_failover
#电源管理脚本
# shutdown_script= /script/masterha/power_manager
#当发生故障后用此脚本发邮件或者告警通知
# report_script= /script/masterha/send_report
#在线切换时调用的vip迁移脚本,手动
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/etc/masterha #mha工作目录
manager_log=/var/etc/masterha/manager.log #mha日志
[server1]
hostname=172.25.254.10
candidate_master=1 #可能作为master的主机
check_repl_delay=0 ##默认情况下如果一个slave落后master 100M的relay logs的话
#MHA将不会选择该slave作为一个新的master
#因为对于这个slave的恢复需要花费很长时间
#通过设置check_repl_delay=0
#MHA触发切换在选择一个新的master的时候将会忽略复制延时
#这个参数对于设置了candidate_master=1的主机非常有用
#因为这个候选主在切换的过程中一定是新的master
[server2]
hostname=172.25.254.20
candidate_master=1 #可能作为master的主机
check_repl_delay=0
[server3]
hostname=172.25.254.30
no_master=1 #不会作为master的主机