由于公司现有主库要转移到新的主库上,所以,我打算利用MySQLfailover工具的故障转移。

1、开发把程序账号转移到新主库上

2、停止现有主库,使之进行故障转移,转移期间会自动锁表,保持数据一致性。

3、查看转移状态,检查是否转移成功

在启动MySQLfailover的时候,报错:

The master and one of the candidates are the same host and port.

大概意思是说主库和候选机使用了相同的端口和host。

检查MySQLfailover源码:

# Parse the master, slaves, and candidates connection parameters
try:
  master_val, slaves_val, candidates_val = parse_topology_connections(
    opt)
  except UtilRplError:
    _, e, _ = sys.exc_info()
    print("ERROR: {0}".format(e.errmsg))
    sys.exit(1)

  # Check hostname alias
    for slave_val in slaves_val:
      if check_hostname_alias(master_val, slave_val):
      parser.error("The master and one of the slaves are the same "
        "host and port.")
    for cand_val in candidates_val:
      if check_hostname_alias(master_val, cand_val):
      parser.error("The master and one of the candidates are the same "
        "host and port.")

这段是报错的代码,可以看到是一段异常捕获代码,这里调用了check_hostname_alias()这个函数。查找开头引用:

  from mysql.utilities.common.server import check_hostname_alias

可以看到是引用了server文件里的check_hostname_alias方法。进入common目录下查看:

/usr/lib/python2.6/site-packages/mysql/utilities/common

查看server.py文件:

def check_hostname_alias(server1_vals, server2_vals):

  server1_vals[in] connection dictionary for server1
  server2_vals[in] connection dictionary for server2

  Returns bool - true = server1 and server2 are the same host
    """
  server1 = Server({'conn_info': server1_vals})
  server2 = Server({'conn_info': server2_vals})
  server1_socket = server1_vals.get('unix_socket', None)
  server2_socket = server1_vals.get('unix_socket', None)
  if server1_socket:
    server1.connect()
    server1.disconnect()
  if server2_socket:
    server2.connect()
    server2.disconnect()

  return (server1.is_alias(server2.host) and
    int(server1.port) == int(server2.port))

可以看出,这段代码主要是检查主库和候选机的端口和host,如果相同,则返回一个true。

如果返回true,则会触发到异常捕获代码,从而报错。

可以肯定是因为新主库没有设置Host名称所导致的错误。

这里可以编辑一下check_hostname_alias这个方法,让他返回一个flase就可以了。改成这样:

  return (server1.is_alias(server2.host) and
    int(server1.port) == int(3333))

然后启动MySQLfailover进程,发现不会报错,正常运行了。

MySQLfailover错误一则的更多相关文章

  1. 航空概论(历年资料,引之百度文库,PS:未调格式,有点乱)

    航空航天尔雅 选择题1. 已经实现了<天方夜谭>中的飞毯设想.—— A——美国2. 地球到月球大约—— C 38 万公里3. 建立了航空史上第一条定期空中路线—— B——德国4. 对于孔明 ...

  2. Keepalived + MySQLfailover + GTIDs 高可用

    架构图     10.1.1.207    mysql master + keepalived     10.1.1.206    mysql slave ( backup master ) + ke ...

  3. 日期格式代码出现两次的错误 ORA-01810

    错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...

  4. ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”

    DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...

  5. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”

    在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...

  6. 实时的.NET程序错误监控产品Exceptionless

    Exceptionless可以对ASP.NET, Web API, WebForms, WPF, Console, 和 MVC 应用提供错误监控.上传.报表服务.使用时需要在Exceptionless ...

  7. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  8. SQL Server 致程序员(容易忽略的错误)

    标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...

  9. C# - 值类型、引用类型&走出误区,容易错误的说法

    1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信息的一小片数据. 3)对于值类型的表达式,它的值是实际的数据. ...

随机推荐

  1. hyperledger fabric 1.0.5 分布式部署 (四)

    chaincode 的开发 作者在hyperledger fabric 1.0.5 分布式部署 (三)中向读者介绍了如何开发fabric 的chaincode,那么实际上chaincode 还有其他的 ...

  2. Git - .gitignore怎么忽略已经被版本控制的文件

    问题 如果某个文件已经存在于远程仓库了,也就是说某个文件已经被版本控制了,如果将该文件添加到.gitignore中,是无法生效的.因为.gitignore是用来控制尚未被纳入版本控制的文件,如果文件已 ...

  3. 测试 | 代码覆盖测试工具 | Eclemma

    安装: 打开eclipse,点击Help菜单下的Install New Software 在弹出的对话框中,点击Add 输入Name,如EclEmma 输入Location: http://updat ...

  4. Django (八) 中间件&验证码&富文本&缓存

    中间件&验证码&富文本&缓存 1. 中间件&AOP   中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程) ​ 中间件的本质就是一 ...

  5. Python开发 第01课 Python 简介

    一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

  6. Java EE学习笔记(六)

    初识MyBatis 1.MyBatis的定义 1).MyBatis(前身是iBatis)是一个支持普通SQL查询.存储过程以及高级映射的持久层框架. 2).MyBatis框架也被称之为ORM(Obje ...

  7. Spring+Quartz配置定时任务

    一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是出了名的任务调度框架,它可以与J2SE和J2EE应用程序相结合 ...

  8. Sql 2000系统表 语句查询表结构

     SQL2000系统表的应用  –1:获取当前数据库中的所有用户表 select Name from sysobjects where xtype=’u’ and status>=0 –2:获取 ...

  9. 详解JS作用域(一)

    一.什么是作用域 存储和访问变量,是任何一种编程语言最基本的功能之一,变量存在哪里?程序需要时如何找到它?这些问题需要一套良好的规则来规范,这套规则,就成为作用域. 二.编译原理 js通常归类为解释语 ...

  10. html 手机端click 事件去掉黑色阴影效果

    添加css样式 html{-webkit-text-size-adjust: 100%;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);} 1.  -web ...