一、搭建环境

软件:VMware,Linux for oracle 6.9,MySQL 5.7.26,MySQL Utilites 1.6.5

机器角色:

Master :192.168.65.2:3306 # master ,failover server

Slave:192.168.65.3:3306 # slave 1

Slave:192.168.65.4:3308 # slave 2

二、MySQL Failover 需求

主从需要开启GTID模式(mysql 应使用5.6.5以上版本) 所有的slave端需要配置以下参数,建议主库也添加(切换后主从模式变化) report-host

report-port

master-info-repository=TABLE

relay-log-info-repository=TABLE

权限(mysqlfailover工具检测及切换期间需要,主从都需要)

SHOW SLAVE STATUS SHOW MASTER STATUS STOP SLAVE, START SLAVE, WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS, CHANGE MASTER TO REPLICATE SLAVE SUPER, GRANT OPTION, RELOAD, DROP, CREATE, INSERT ,SELECT权限

三、Failover 重要参数

    --failover-mode(转移模式)auto:执行故障自动转移到第一候选人。如果没有从可行的,继续从从列表中找到一个可行的候选者。如果没有从被认为是一个可行的候选者,该程序将生成错误并退出。一旦候选者被发现,该程序将进行故障切换到最佳从上。该命令测试每个候选从的先决条件。一旦候选从被选中,其他从作为它的从,收集其他从的任何事务交易。该方式,确保候选者是最新的从elect:这种模式与aoto一样的,除了如果在指定的候选从列表中没有可行的,不检测剩余的从和产生错误并退出。fail: 这种模式会产生一个错误,当主失败后不会进行故障转移。这种模式被用来只进行定期健康监测不进行故障切换。--interval选项来定义检测主状态和产生健康报告的时间间隔,缺省为15s,最小间隔为5s--master=MASTER主服务器连接配置--slaves=SLAVES从服务器连接配置--candidates=CANDIDATES候选服务器连接配置以上3个连接配置值支持是使用下列方式,多个值以逗号分割<user>[:<password>]@<host>[:<port>][:<socket>] <login-path>[:<port>][:<socket>]<config-path>[<[group]>]    --discover-slaves-login=DISCOVER基于主服务器用户密码查询当前所有注册到主服务器的从库端使用<user>[:<password>] or <login-path>--ping=PING  Number of ping attempts for detecting downed server.     侦测服务器宕机检测,缺省为3s--force   override the registration check on master for multipleinstances of the console monitoring the same master.当控制台启动时,主的主机名和端口将被插入一个特殊的表来跟踪记录哪些实例与主联系 在启动时,如果行匹配这些值,控制台无法启动。如果使用--force选项,该行将被删除                                  --daemon(使用守护进程方式,如未指定,则为交互方式)start    启动守护进程。需要--log选项。stop     停止守护进程。如果有指定--pidfile选项,该值需要与start指定的一致。restart  重新启动守护进程。如果有指定--pidfile选项,该值需要与start指定的一致。nodetach 启动守护进程,但是不会从控制台分离进程。需要--log选项。--log=<log_file> 指定日志文件--log-age 选项用于指定日志存放天数,默认是7天。旧的日志自动轮滚掉--exec-before故障转移命令之前执行外部脚本脚本的返回码来确定是否成功执行,0表示成功,非0表示失败并返回错误信息--exec-after故障转移命令之后执行外部脚本脚本的返回码来确定是否成功执行,0表示成功,非0表示失败并返回错误信息-p, --pedantic        fail if some inconsistencies are found (e.g. erranttransactions on slaves).            在检查期间如果发现有不一致的情况(从错误的事务或SQL线程错误)阻止故障转移。 

四、搭建

这里就不演示复制的搭建过程了(GTID),需要了解的可以看我另一篇文章。

1.新建 failover 用户(master)

mysql> grant all on *.* to failover@'%' identified by '123' with grant option; (这里一定要加 with grant option)

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)

检查其他 slave 节点是否也同步产生此账号。

2.启动 MySQLfailover(master)

[root@test2 local]# mysqlfailover --log=/tmp/mysqlfailover.log --master=failover:123@192.168.65.2:3306 --slaves=failover:123@192.168.65.3:3306,failover:123@192.168.65.4:3308 --daemon=start

WARNING: Using a password on the command line interface can be insecure.

Starting failover daemon...

3.查看状态

[root@test2 ~]# tail -f /tmp/mysqlfailover.log

2019-07-19 17:46:29 PM INFO Failover daemon started.

2019-07-19 17:46:29 PM INFO Failover mode = auto.

2019-07-19 17:46:32 PM INFO Master Information

2019-07-19 17:46:32 PM INFO Binary Log File: bin.000001, Position: 1179, Binlog_Do_DB: N/A, Binlog_Ignore_DB: N/A

2019-07-19 17:46:32 PM INFO GTID Executed Set: b5ab9bc1-7cb0-11e9-816c-000c29dbfcd1:1-5

2019-07-19 17:46:32 PM INFO Getting health for master: 192.168.65.2:3306.

2019-07-19 17:46:32 PM INFO Health Status:

2019-07-19 17:46:32 PM INFO host: 192.168.65.2, port: 3306, role: MASTER, state: UP, gtid_mode: ON, health: OK

2019-07-19 17:46:32 PM INFO host: 192.168.65.3, port: 3306, role: SLAVE, state: UP, gtid_mode: ON, health: OK

2019-07-19 17:46:32 PM INFO host: 192.168.65.4, port: 3308, role: SLAVE, state: UP, gtid_mode: ON, health: OK

2019-07-19 17:46:50 PM INFO Master Information

2019-07-19 17:46:50 PM INFO Binary Log File: bin.000001, Position: 1179, Binlog_Do_DB: N/A, Binlog_Ignore_DB: N/A

2019-07-19 17:46:50 PM INFO GTID Executed Set: b5ab9bc1-7cb0-11e9-816c-000c29dbfcd1:1-5

2019-07-19 17:46:50 PM INFO Getting health for master: 192.168.65.2:3306.

2019-07-19 17:46:50 PM INFO Health Status:

2019-07-19 17:46:50 PM INFO host: 192.168.65.2, port: 3306, role: MASTER, state: UP, gtid_mode: ON, health: OK

2019-07-19 17:46:50 PM INFO host: 192.168.65.3, port: 3306, role: SLAVE, state: UP, gtid_mode: ON, health: OK

2019-07-19 17:46:50 PM INFO host: 192.168.65.4, port: 3308, role: SLAVE, state: UP, gtid_mode: ON, health: OK

至此,mysqlfailover 环境搭建成功

五、master 宕机测试

1.在 192.168.65.2 上直接 kill MySQL 进程

[root@test2 local]# kill -9 11999 12912

[root@test2 local]# ps -ef|grep mysql

root 13012 1 0 17:46 ? 00:00:31 python /usr/local/mysql-utilities-1.6.5/scripts/mysqlfailover --log=/tmp/mysqlfailover.log --master=failover:123@192.168.65.2:3306 --slaves=failover:123@192.168.65.3:3306,failover:123@192.168.65.4:3308 --daemon=start

root 13032 13018 0 17:46 pts/2 00:00:00 tail -f /tmp/mysqlfailover.log

root 13401 12988 0 19:29 pts/1 00:00:00 grep mysql

2.查看 mysqlfailover 日志

2019-07-19 19:29:25 PM INFO Health Status:

2019-07-19 19:29:25 PM INFO host: 192.168.65.2, port: 3306, role: MASTER, state: UP, gtid_mode: ON, health: OK

2019-07-19 19:29:25 PM INFO host: 192.168.65.3, port: 3306, role: SLAVE, state: UP, gtid_mode: ON, health: OK

2019-07-19 19:29:25 PM INFO host: 192.168.65.4, port: 3308, role: SLAVE, state: UP, gtid_mode: ON, health: OK

2019-07-19 19:29:49 PM INFO Master may be down. Waiting for 3 seconds.

2019-07-19 19:30:04 PM INFO Failed to reconnect to the master after 3 attempts.

2019-07-19 19:30:04 PM CRITICAL Master is confirmed to be down or unreachable.

2019-07-19 19:30:04 PM INFO Failover starting in 'auto' mode...

2019-07-19 19:30:04 PM INFO Candidate slave 192.168.65.3:3306 will become the new master.

2019-07-19 19:30:04 PM INFO Checking slaves status (before failover).

2019-07-19 19:30:04 PM INFO Preparing candidate for failover.

2019-07-19 19:30:04 PM INFO Creating replication user if it does not exist.

2019-07-19 19:30:04 PM INFO Stopping slaves.

2019-07-19 19:30:04 PM INFO Performing STOP on all slaves.

2019-07-19 19:30:04 PM INFO Switching slaves to new master.

2019-07-19 19:30:04 PM INFO Disconnecting new master as slave.

2019-07-19 19:30:04 PM INFO Starting slaves.

2019-07-19 19:30:04 PM INFO Performing START on all slaves.

2019-07-19 19:30:04 PM INFO Checking slaves for errors.

2019-07-19 19:30:04 PM INFO Failover complete.

2019-07-19 19:30:09 PM INFO Unregistering existing instances from slaves.

2019-07-19 19:30:09 PM INFO Registering instance on new master 192.168.65.3:3306.

2019-07-19 19:30:09 PM INFO Master Information

2019-07-19 19:30:09 PM INFO Binary Log File: bin.000001, Position: 1152, Binlog_Do_DB: N/A, Binlog_Ignore_DB: N/A

2019-07-19 19:30:09 PM INFO GTID Executed Set: b5ab9bc1-7cb0-11e9-816c-000c29dbfcd1:1-5[...]

2019-07-19 19:30:09 PM INFO Getting health for master: 192.168.65.3:3306.

2019-07-19 19:30:09 PM INFO Health Status:

2019-07-19 19:30:09 PM INFO host: 192.168.65.3, port: 3306, role: MASTER, state: UP, gtid_mode: ON, health: OK

2019-07-19 19:30:09 PM INFO host: 192.168.65.4, port: 3308, role: SLAVE, state: UP, gtid_mode: ON, health: OK

可以看到 192.168.65.3 自动变成了 master,而 192.168.65.4 的复制关系也指向的新的 master。

3.旧 master 恢复后加入 failover 组

当旧 master 恢复启动后,不会自动加入到failover中,重新加入步骤如下:

a.将旧 master 作为从库,与新 master 建立复制关系;

PS:在重新导入数据(mysql < backup.bak)的时候可能会出现:

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED

is empty.

的错误,这种错误可以在 master 用mysqldump备份数据的时候指定 --set-gtid-purged=OFF 参数来解决,再次

在 slave 导入的时候就不会出现上述报错

b.停止 mysqlfailover 功能;

c.重新启动 mysqlfailover即可;

MySQL Failover搭建相关推荐

  1. MySQL FailOver(官方自带,free)

    为什么 传统复制和GTIDs切换的缺点 当replication故障出现之后,最头疼是replication架构的调整 一旦master down了,就需要配置某一台slave作为master sla ...

  2. docker部署django项目、mysql主从搭建、django实现读写分离

    目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dock ...

  3. mysql在线搭建从库_Mysql主从库搭建

    基于Docker的Mysql主从复制搭建 首先安装docker 拉取mysql镜像:5.7版本 启动主从数据库容器 docker run -p 3339:3306 --name Maste -e MY ...

  4. mysql+server+80_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程

    准备篇 一.环境说明: 操作系统:Windows Server 2019 PHP版本:php 7.3.11 MySQL版本:MySQL 8.0.18.0 二.相关软件下载: 1.PHP下载地址: ht ...

  5. ksweb如何安装php5.6_Android端的服务器容器 KSWEB PHP+MySQL环境搭建及应用

    1. KSWEB ksweb是 一个Android端的服务器容器.有 2.7.2 及 2.8.2 版本,可以用下面链接下载: http://bbs.xiaomi.cn/thread-9690863-1 ...

  6. 【MySQL】基于Docker的Mysql主从复制搭建

    基于Docker的Mysql主从复制搭建 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相 ...

  7. apache支持mysql ubuntu_Ubuntu+Apache+PHP+Mysql环境搭建(完整版)

    Ubuntu+Apache+PHP+Mysql环境搭建(完整版) 一.操作系统 Ubuntu 14.04 64位,阿里云服务器 二.Apache 1.安装Apache,安装命令:sudo apt-ge ...

  8. php7 iis10 mysql_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程

    准备篇 一.环境说明: 操作系统:Windows Server 2019 PHP版本:php 7.3.11 MySQL版本:MySQL 8.0.18.0 二.相关软件下载: 1.PHP下载地址: ht ...

  9. ubuntu php mysql apache_Ubuntu+Apache+PHP+Mysql环境搭建(完整版)(转)

    标签: http://www.2cto.com/os/201505/401588.html Ubuntu+Apache+PHP+Mysql环境搭建(完整版) 一.操作系统 Ubuntu 14.04 6 ...

  10. apache php mysql环境搭建_Ubuntu+Apache+PHP+Mysql环境搭建(完整版)

    Ubuntu+Apache+PHP+Mysql环境搭建(完整版) 一.操作系统 Ubuntu 14.04 64位,阿里云服务器 二.Apache 1.安装Apache,安装命令:sudo apt-ge ...

最新文章

  1. 小米AI实验室六篇论文获ICASSP2022收录,多模态语音唤醒挑战赛夺冠
  2. UITableVeiw相关的需求解决
  3. php怎样输出多个空格,【整理】解决php输出时出现多余的空格或者换行
  4. Spring事务“套路”面试
  5. OSPF路由器建立全毗邻关系的状态转换过程
  6. 算法组合 优化算法_算法交易简化了风险价值和投资组合优化
  7. 前端学习(563):干掉block重叠margin重叠
  8. Debian服务器安装详细流程
  9. linux内核虚拟内存之物理页面分配
  10. 西门子step7安装注册表删除_如何完全删除step 7
  11. canvas实现圆饼图,柱状图,折线图(满满的干货)
  12. php mysql 微博系统_基于校网学堂的校园微博系统设计与实现(PHP,MySQL)(含录像)
  13. OpenCV之凸包检测基础
  14. java id pid 递归,父子结构数据(id,pid)递归查询所有子id合集和父id合集
  15. 深空天体反差指数计算
  16. 序列化和反序列化的详解
  17. vue 环信im 发送图片、接收图片
  18. Ubuntu下VS code空格间距很小解决办法
  19. 5g网络模式是以什么划分的_5g组网模式有几种
  20. Xmind 8 pro 软件破解版 思维导图

热门文章

  1. Codeforces 39H - Multiplication Table(进制转换)
  2. 图解电影的网站有那些?
  3. VUE + ONLYOFFICE
  4. java.io.FileNotFoundException ….. (Permission denied)
  5. 简明c语言,简明易懂的C语言俄罗斯方块
  6. winrar破解方法
  7. matlab 矩阵分解行满秩,matlab生成满秩矩阵
  8. 2014.07.30 Hosts更新
  9. arm mali 天梯图_手机CPU天梯图2018年12月最新版 秒懂十二月手机处理器排名
  10. IdentityHashMap 源代码