关于mysql:MySQL我的从库竟是我自己

4次阅读

共计 2026 个字符,预计需要花费 6 分钟才能阅读完成。

本文将通过复制场景下的异样剖析,介绍手工搭建 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_audit…
正文完
 0