MySQL:我的从库竟是我自己!?

本文将通过复制场景下的异常分析,介绍手工搭建MySQL主从复制时需要注意的关键细节。

作者:秦福朗

爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。热爱互联网,会摄影、懂厨艺,不会厨艺的 DBA 不是好司机,didi~

本文来源:原创投稿

  • 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

背景

有人反馈装了一个数据库,来做现有库的从库。做好主从复制关系后,在现有主库上使用 show slave hosts; 管理命令去查询从库的信息时,发现从库的 IP 地址竟是自己的 IP 地址,这是为什么呢?

因生产环境涉及 IP,端口等保密信息,以下以本地环境来还原现象。

本地复现

基本信息

主库 从库
IP 10.186.65.33 10.186.65.34
端口 6607 6607
版本 8.0.18 8.0.18

问题现象

不多说,先上图,以下为在主库执行 show slave hosts; 出现的现象:

可以看到这里的 Host 是主库的 IP 地址。

我们登陆从库查看一下 show slave status\G

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.186.65.33
                  Master_User: universe_op
                  Master_Port: 6607
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 74251749
               Relay_Log_File: mysql-relay.000008
                Relay_Log_Pos: 495303
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

我们看到确实从库是在正常运行的,且复制的源就是主库。

为什么执行 show 命令看到的 Host 和实际的情况对不上呢?

查阅资料

首先查阅官方文档,关于 show slave hosts; 语句的解释:

  • 首先说明 8.0.22 之后版本的 show slave hosts 语句被废弃(可执行),改为 show replicas,具体机制还是一样的。
  • 这里说明了各个数据的来源,多数来源于 report-xxxx 相关参数,其中 Host 的数据来自于从库的 report_host 这个参数。

然后,我们测试在从库执行 show variables like "%report%";

mysql> show variables like "%report%";
+-----------------+--------------+
| Variable_name   | Value        |
+-----------------+--------------+
| report_host     | 10.186.65.33 |
| report_password |              |
| report_port     | 6607         |
| report_user     |              |
+-----------------+--------------+
4 rows in set (0.01 sec)

可以看到这里显示的就是主库的 IP。

我们再查询 report_host 的参数基本信息:

可以看到该参数非动态配置,在从库注册时上报给主库,所以主库上执行 show slave hosts; 看到的是 IP 是从这里来的,且无法在线修改。

最后也通过查看从库上的 my.cnf 上的 report_port 参数,证实确实是主库的 IP:

结论

经了解,生产上的从库是复制了主库的配置文件来部署的,部署时没有修改 report_host 这个值,导致启动建立复制后将 report_host 这个 IP 传递给主库,然后主库查询 show slave hosts 时就出现了自己的 IP,让主库怀疑自己的从库竟然是自己。

生产上大部分人知道复制主库的配置文件建立新库要修改 server_id 等相关 ID 信息,但比较容易忽略掉 report_ipreport_port 等参数的修改,这个需要引起注意,虽然错误之后看起来对复制运行是没影响的。

关于 SQLE

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。

SQLE 获取

类型 地址
版本库 https://github.com/actiontech/sqle
文档 https://actiontech.github.io/sqle-docs/
发布信息 https://github.com/actiontech/sqle/releases
数据审核插件开发文档 https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html
优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/actiontechoss/blog/10087606

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。