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_ip
、report_port
等参数的修改,这个需要引起注意,虽然错误之后看起来对复制运行是没影响的。
关于 SQLE
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
SQLE 获取

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OpenTiny 前端组件库正式开源啦!面向未来,为开发者而生
华为开发者大会 2023(HDC.Cloud 2023)于 7 月 7 日-9 日在东莞拉开帷幕,本届大会以“每一个开发者都了不起”为主题。OpenTiny 作为前端企业级组件库解决方案,在本次大会上正式进行发布。 项目发展历程:从自研走向开源的 TinyVue 组件库 OpenTiny 是一套企业级组件库解决方案,适配 PC 端/移动端等多端,涵盖 Vue2 / Vue3 / Angular 多技术栈,拥有主题配置系统 / 中后台模板 / CLI 命令行等效率提升工具,可帮助开发者高效开发 Web 应用。OpenTiny 孵化自华为云和流程 IT,经过九年持续打磨,服务于华为内外部上千个项目,千锤百炼,是一个稳定可靠的组件库,我们希望将内部的优秀实践开源出来,服务于更广大的企业和个人开发者,另一方面技术在不断地进步,我们希望携手社区开发者一起探索新技术,不断扩展 OpenTiny 的能力边界,让更多开发者受益,因此决定全面拥抱开源。 核心亮点 一套代码同时支持 Vue 2 / Vue 3 随着 Vue 3 的逐渐普及以及 Vue 3 开源生态的持续繁荣,未来将会有更多开...
- 下一篇
Dgraph v23.0.1 发布,具有图形后端的原生 GraphQL 数据库
Dgraph 是一个水平可扩展的分布式 GraphQL 数据库,有一个图形后端。作为一个原生的 GraphQL 数据库,它严格控制数据在磁盘上的排列方式,以优化查询性能和吞吐量,减少集群中的磁盘寻道和网络调用。 Dgraph v23.0.1 现已发布,具体更新内容包括: Fixed Core Dgraph chore(restore):添加 restore fails 时的日志消息(#8893) fix(zero):修复 zero 的 health endpoint 以返回 json 响应(#8858) chore(zero):改进unmarshalling WAL 时的错误消息(#8882) fix(multi-tenancy):在禁止命名空间之前检查是否存在(#7887) fix(bulk):删除缓冲区最大大小(#8841) chore:修复失败的 oss 构建(#8832)修复#8831 将 dgo 升级到 v230.0.1 (#8785) CI ci(dql):添加模糊测试工作流程 (#8874) Chore(ci):添加 OSS 构建 + 单元测试的工作流程 (#8834) ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 2048小游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启