MySQL 主主复制失败问题

本贴最后更新于 2095 天前,其中的信息可能已经沧海桑田

今天遇到 mysql 主主同步复制失败的问题,记录下解决办法

mysql 主主复制基础可以参考这篇:https://www.cnblogs.com/kristain/articles/4142970.html

注意下文中 mysql 版本比较老,现在新版版本支持了很多新的特性。笔者用的 mysql 版本是 5.7。

问题描述:

DB1 和 DB2 设置了主主复制,在 DB1 上新建数据库后,在 DB2 上没有同步。查看 DB2 的 slave 状态 show slave status\G;

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.82.40
                  Master_User: root
                  Master_Port: 3300
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002  //同步文件
          Read_Master_Log_Pos: 48527            //同步位置
               Relay_Log_File: WRD02-relay-bin.000003
                Relay_Log_Pos: 58655
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: NO               //io状态
            Slave_SQL_Running: NO               //sql状态
              Replicate_Do_DB: smp,sdp,crm,webrtcgw,rtc

与 DB1 的 master 状态对比,show master status;

mysql> show master status;
+------------------+----------+--------------------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB             | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------------------+------------------+-------------------+
| mysql-bin.000003 |   162880 | smp,sdp,crm,webrtcgw,rtc |                  |                   |
+------------------+----------+--------------------------+------------------+-------------------+
1 row in set (0.01 sec)

可以看到 DB1 上的 bin-log 已经记录到了 mysql-bin.000003 的 162880 位置,但是 DB2 上只是同步到了 mysql-bin.000002 的 48527 位置,并且 Slave_IO_Running 和 Slave_SQL_Running 都为 NO,说明 DB2 的同步功能不正常。

同样的方法查看 DB1,发现 DB1 的同步状态为:

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.82.41
                  Master_User: root
                  Master_Port: 3300
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 85486
               Relay_Log_File: WRD01-relay-bin.000010
                Relay_Log_Pos: 27380
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: smp,sdp,crm,webrtcgw,rtc

同步状态正常且与 DB2 的 master 状台一致:

mysql> show master status;
+------------------+----------+--------------------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB             | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------------------+------------------+-------------------+
| mysql-bin.000004 |    85486 | smp,sdp,crm,webrtcgw,rtc |                  |                   |
+------------------+----------+--------------------------+------------------+-------------------+
1 row in set (0.01 sec)

所以问题只出现在 DB2 上,先关闭 slave 再重启试试:

stop slave;
start slave;

查看 show slave status\G;发现正在连接

             Slave_IO_Running: CONNECTING
            Slave_SQL_Running: Yes

过会再查看还是两个 NO,这时候需要关闭 slave 手动同步,执行:

stop slave

CHANGE MASTER TO 
       MASTER_HOST='172.16.82.40', 
       MASTER_USER='root', 
       MASTER_PASSWORD='cinCC1234', 
       MASTER_LOG_FILE='mysql-bin.000003', 
       MASTER_LOG_POS=162880;
       
start slave

查看 show slave status\G;发现状态正常。

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.82.40
                  Master_User: root
                  Master_Port: 3300
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 162880
               Relay_Log_File: WRD02-relay-bin.000003
                Relay_Log_Pos: 58655
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: smp,sdp,crm,webrtcgw,rtc

在 DB1 上修改数据库,DB2 同步正常。

PS:

记一下修改 my.cnf 时候启动报错 The server quit without updating PID file,解决办法:

查看 my.cnf 中 log_error=/home/mysql/data/log_error,查看 log_error.err 中的具体报错信息,发现是 my.cnf 配置的一个变量名写错了,改了就行。

更多解决办法参考:https://www.jb51.net/article/48625.htm

参考前还是建议先看错误日志,不建议直接照着帖子做。

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6519 引用 • 29300 回帖 • 248 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 4 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 130 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 421 回帖 • 1 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • OnlyOffice
    4 引用 • 28 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    3 引用 • 80 回帖 • 1 关注
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    14 引用 • 4 回帖 • 26 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    7 引用 • 26 回帖 • 3 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    53 引用 • 85 回帖
  • 996
    13 引用 • 200 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 19 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 3 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 47 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    333 引用 • 323 回帖 • 70 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1746 回帖 • 1 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 22 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 404 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 45 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 43 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 17 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 452 关注