【MySQL命令】show slave status\G 超详细全面解释

这篇具有很好参考价值的文章主要介绍了【MySQL命令】show slave status\G 超详细全面解释。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

     这个命令是DBA日常运维中常用来查看主从状态的命令,很多监控工具也会使用到该命令监控主从状态是否正常,主从延迟,备份工具获取位点信息等。作为常用日常命令,一定要完全理解该命令的输出。今天主要结合 官方文档 和 实际输出 详细解释该命令。达到完全搞懂!

该语句提供有关副本线程的基本参数的状态信息。它需要 SUPER 或 REPLICATION SLAVE 权限。

建议使用\G语句终止符来获得更具可读性的垂直布局:

SHOW SLAVE STATUS\G 输出以及解释

以下输出来自 MySQL 5.7.19 版本。各版本输出略有差异

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event --IO thread的状态
                  Master_Host: 10.10.10.10         -- 主库的地址     
                  Master_User: repl                -- 用于连接主库复制账号(这个账号是在主库上创建)
                  Master_Port: 3300                -- 主库的端口 
                Connect_Retry: 10                  -- 连接重试之间的秒数(默认 60)
              Master_Log_File: mysql-bin.005395    -- I/O 线程当前正在读取的主库的二进制日志文件名称。
          Read_Master_Log_Pos: 684976832           -- I/O 线程已读取的当前主库二进制日志文件中的位点
               Relay_Log_File: dd-relay.000063     -- SQL线程正在读取和执行的中继日志名称
                Relay_Log_Pos: 684953253           -- SQL线程正在读取和执行的当前中继日志的位点
        Relay_Master_Log_File: mysql-bin.005395    -- SQL 线程执行的最新事件 对应在主库上的二进制日志文件名称。
             Slave_IO_Running: Yes                 -- IO线程是否已启动并已成功连接到主库
            Slave_SQL_Running: Yes                 -- SQL线程是否启动。
              Replicate_Do_DB:                     -- 需要复制的DB
          Replicate_Ignore_DB:                     -- 复制忽略的DB
           Replicate_Do_Table:                     -- 需要复制的表
       Replicate_Ignore_Table:                     -- 复制忽略的表
      Replicate_Wild_Do_Table:                     -- 用于指定需要复制的数据库表,支持通配符(wildcard)的形式
  Replicate_Wild_Ignore_Table:                     -- 用于指定需要忽略(不复制)的数据库表,同样支持通配符的形式。
                   Last_Errno: 0                   -- Last_SQL_Errno的别名
                   Last_Error:                     -- Last_SQL_Error的别名
                 Skip_Counter: 0                   -- 系统变sql_slave_skip_counter 的当前值  (从库跳过的SQL数量)
          Exec_Master_Log_Pos: 684953080           -- SQL线程已经读取和执行过的中继日志 对应在主库二进制日志文件的位点
              Relay_Log_Space: 684977292           -- 所有现有中继日志文件的总大小。
              Until_Condition: None                -- start slave 中制定 until 语句
               Until_Log_File:                     -- start slave 中制定 until 语句
                Until_Log_Pos: 0                   -- start slave 中制定 until 语句
           Master_SSL_Allowed: No                  -- 是否允许与源的 SSL 连接
           Master_SSL_CA_File:                     -- 指定用于验证主服务器证书的证书颁发机构(CA)文件的路径
           Master_SSL_CA_Path:                     -- 指定用于验证主服务器证书的证书颁发机构(CA)路径的路径
              Master_SSL_Cert:                     -- 指定从服务器的 SSL 证书文件的路径
            Master_SSL_Cipher:                     -- 指定在 SSL 通信中使用的密码套件
               Master_SSL_Key:                     -- 指定从服务器的 SSL 私钥文件的路径
        Seconds_Behind_Master: 0                   -- 主从延迟
Master_SSL_Verify_Server_Cert: No                  -- 表示是否验证主服务器的 SSL 证书。
                Last_IO_Errno: 0                   -- 导致IO线程停止的最近一次的错误码,Errno :0 表示表示没有错误
                Last_IO_Error:                     -- 导致IO线程停止的最近的错误信息 。Erro为空表示没有错误 
               Last_SQL_Errno: 0                   -- 导致SQL线程停止的最近的错误码。Errno :0 表示没有错误 
               Last_SQL_Error:                     -- 导致SQL线程停止的错误信息,Erro为空表示没有错误 
  Replicate_Ignore_Server_Ids:                     -- 忽略复制的主库的server_id
             Master_Server_Id: 181323300           -- 主库的参数server_id的值
                  Master_UUID: 127ef593-1826-11eb-8a97-6c92bf7d39de           -- 主库参数server_uuid的值
             Master_Info_File: mysql.slave_master_info                        -- 在从库上存储主库信息的文件或表
                    SQL_Delay: 0                                              -- 从库延迟主库多少秒
          SQL_Remaining_Delay: NULL                                           -- 当Slave_SQL_Running_State为 时 Waiting until MASTER_DELAY seconds after master executed event,该字段包含剩余延迟秒数。其他时候,该字段为 NULL。
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates -- SQL线程的运行状态
           Master_Retry_Count: 86400  -- 在连接丢失的情况下,从库可以尝试重新连接到主库的次数。
                  Master_Bind:       -- 
      Last_IO_Error_Timestamp:       -- 最近的I/O 线程发生错误的时间 格式YYMMDD hh:mm:ss
     Last_SQL_Error_Timestamp:       -- 最近的SQL 线程发生错误的时间 格式YYMMDD hh:mm:ss
               Master_SSL_Crl:       -- 指定撤销列表 (CRL) 文件的路径,该文件包含已被撤销的 SSL 证书列表
           Master_SSL_Crlpath:       -- 指定撤销列表 (CRL) 文件的路径,该文件包含已被撤销的 SSL 证书列表
           Retrieved_Gtid_Set: 127ef593-1826-11eb-8a97-6c92bf7d39de:330411-2764671 -- 从库已经接收到的GTID的集合(I/O线程),如果GTID模式没有开启则为空。这个值是现在存在或者已经存在在relay log中的GTID集合 
            Executed_Gtid_Set: 127ef593-1826-11eb-8a97-6c92bf7d39de:1-2764671,
3133d0b5-8d65-11e7-9f2e-c88d83a9846a:1-12697883,
657b7d6b-8d60-11e7-b85f-6c92bf4e09e6:1-1661102840    -- 已经被写进binlog的GTID的集合(SQL线程),这个值和 系统参数 gtid_executed 相同。也和在该实例上执行 show master status 中的Executed_Gtid_Set 值相同
                Auto_Position: 1  -- 如果正在使用自动定位1;否则为 0。
         Replicate_Rewrite_DB:    -- 用于指定需要在主从复制过程中进行数据库名重写的规则。
                 Channel_Name:    -- 正在显示的复制通道
           Master_TLS_Version:    -- 源上使用的 TLS 版本

分类对比

大家理解该命令的时候可以 ”分类对比“ 理解:

注意下图中主从延迟解释只能在网络状况良好的情况的才能如此计算,延迟具体的计算方式参考我的博客 【MySQL源码】Seconds_Behind_Master是如何计算的-CSDN博客

【MySQL命令】show slave status\G 超详细全面解释,MySQL,mysql,数据库

重要参数的详细解释 

线程状态(IO  和 SQL Thread)

Slave_IO_State

副本 I/O 线程的输出State字段 ,从库 IO 线程正在做什么:尝试连接到源、等待来自源的事件、重新连接到源等等,具体有一下状态

  • Checking master version

    建立与源的连接后发生的非常短暂的状态。

  • Connecting to master

    IO 线程 正在尝试连接到源。

  • Queueing master event to the relay log

    该状态比较常见,IO 线程已读取事件并将其写入到中继日志,以便 SQL 线程可以处理它。

  • Reconnecting after a failed binlog dump request

    IO 线程正在尝试重新连接到源。

  • Reconnecting after a failed master event read

    IO 线程正在尝试重新连接到源。当再次建立连接时,状态变为 Waiting for master to send event

  • Registering slave on master

    建立与源的连接后非常短暂地发生的状态。

  • Requesting binlog dump

    建立与源的连接后发生的非常短暂的状态。该线程向源发送对其二进制日志内容的请求,从请求的二进制日志文件名和位置开始。

  • Waiting for its turn to commit

    如果启用,当副本线程等待旧工作线程提交时出现的状态 slave_preserve_commit_order 。

  • Waiting for master to send event

    该状态比较常见,IO 线程已连接到源并正在等待二进制日志事件到达。如果源空闲,这可以持续很长时间。如果等待持续 slave_net_timeout几秒,就会发生超时。此时,该线程认为连接已断开并尝试重新连接。

  • Waiting for master update

    之前的初始状态Connecting to master

  • Waiting for slave mutex on exit

    线程停止时短暂出现的状态。

  • Waiting for the slave SQL thread to free enough relay log space

    您使用的是非零 relay_log_space_limit 值,并且中继日志已变得足够大,以至于它们的总大小超过了该值。I/O 线程正在等待,直到 SQL 线程通过处理中继日志内容释放足够的空间,以便它可以删除一些中继日志文件。

  • Waiting to reconnect after a failed binlog dump request

    如果二进制日志转储请求失败(由于断开连接),线程在休眠时进入此状态,然后尝试定期重新连接。重试之间的间隔可以使用该 CHANGE MASTER TO语句指定。

  • Waiting to reconnect after a failed master event read

    读取时发生错误(由于断开连接)。CHANGE MASTER TO在尝试重新连接之前, 线程将休眠语句设置的秒数 (默认为 60)。

Slave_SQL_Running_State

SQL 线程的状态(类似于 Slave_IO_State

详细状态参考官方文档 :

MySQL :: MySQL 5.7 Reference Manual :: 8.14.7 Replication Replica SQL Thread States

文件和位点

有三类文件和位点,结合我上面的截图理解 :

第一类:

Master_Log_File

I/O 线程当前正在读取的主库的二进制日志文件名称

Read_Master_Log_Pos

I/O 线程已读取的当前主库二进制日志文件中的位点

第二类:

Relay_Log_File

SQL线程正在读取和执行的中继日志名称

Relay_Log_Pos

SQL线程正在读取和执行的当前中继日志的位点

第三类:

Relay_Master_Log_File

SQL 线程执行的最新事件 对应 在主库上的二进制日志文件名称。

Exec_Master_Log_Pos

SQL线程已经读取和执行过的中继日志 对应在主库二进制日志文件的位点

两个线程是否启动

通过这两个字段可以判断主从状态是否正常 

Slave_IO_Running

I/O 线程是否已启动并已成功连接到主库。在内部,该线程的状态由以下三个值之一表示:

  • MYSQL_SLAVE_NOT_RUN。  副本 I/O 线程未运行。对于这个状态, Slave_IO_Running是 No

  • MYSQL_SLAVE_RUN_NOT_CONNECT。  副本 I/O 线程正在运行,但未连接到复制源。对于这个状态, Slave_IO_Running是 Connecting

  • MYSQL_SLAVE_RUN_CONNECT。  副本 I/O 线程正在运行,并连接到复制源。对于这个状态, Slave_IO_Running是 Yes

系统状态变量的值 Slave_running与该值相对应。

Slave_SQL_Running

SQL线程是否启动。

复制过滤规则

  • Replicate_Do_DB:

    • 用于指定主从复制过程中需要复制的数据库。设置为一个数据库名,表示只复制该数据库的更新操作。可以使用逗号分隔的多个数据库名,例如 db1,db2
    • 例如,Replicate_Do_DB = db1 表示只复制 db1 数据库的更新。
  • Replicate_Ignore_DB:

    • 用于指定主从复制过程中需要忽略的数据库。设置为一个数据库名,表示不复制该数据库的更新操作。可以使用逗号分隔的多个数据库名,例如 db3,db4
    • 例如,Replicate_Ignore_DB = db3 表示不复制 db3 数据库的更新。
  • Replicate_Wild_Do_Table:

    • 用于指定需要复制的数据库表,支持通配符(wildcard)的形式。只有匹配指定通配符的数据库表才会被复制到从服务器。
    • 例如,如果设置 Replicate_Wild_Do_Table = testdb.test_table%,则表示只有以 test_table 开头的表才会被复制。
  • Replicate_Wild_Ignore_Table:

    • 用于指定需要忽略(不复制)的数据库表,同样支持通配符的形式。匹配指定通配符的数据库表将不会被复制到从服务器。
    • 例如,如果设置 Replicate_Wild_Ignore_Table = testdb.ignore_table%,则表示以 ignore_table 开头的表将被忽略,不会被复制。

这两个字段的使用可以帮助管理员灵活地配置主从复制,选择性地复制或忽略特定的数据库表。这在一些特定的场景下非常有用,例如在主从服务器之间同步部分数据而忽略其他数据,或者限制复制的表以满足特定需求。

SHOW SLAVE STATUS 输出中,这两个字段的值会列举出匹配的数据库表。例如:

Replicate_Wild_Do_Table: testdb.test_table% 
Replicate_Wild_Ignore_Table: testdb.ignore_table%

这表示主从服务器之间的复制将仅涉及以 test_table 开头的表,并忽略以 ignore_table 开头的表。

复制停止条件

Until_Condition, Until_Log_File, 和 Until_Log_PosSHOW SLAVE STATUS 输出中用于指定主从复制停止条件的字段。

  •  Until_Condition:

    • 用于指定主从复制停止的条件。可能的值包括:
      • None: 表示不设置停止条件,正常复制。
      • Master_Pos: 表示使用日志文件和位置来指定停止的位置。
      • Relay_Log_Pos: 表示使用中继日志文件和位置来指定停止的位置。
      • Relay_Master_Log_File: 表示使用中继日志文件和主服务器的位置来指定停止的位置。
      • Executed_Gtid_Set: 表示使用 GTID 集合来指定停止的位置。
  • Until_Log_File:

    • 如果 Until_Condition 设置为 Master_PosRelay_Master_Log_File,则指定主从复制停止的日志文件名。
  • Until_Log_Pos:

    • 如果 Until_Condition 设置为 Master_PosRelay_Master_Log_File,则指定主从复制停止的日志位置。 

这些字段主要用于设置主从复制的停止条件,以便在特定的位置或 GTID 集合上停止复制。这在执行部分恢复或在特定时间点将主从复制同步到一致状态时很有用。如果设置了这些字段,主从复制将在指定条件下停止,并且不再继续同步。

安全参数

  • Master_SSL_Allowed: 表示是否允许使用 SSL 进行主从复制。

    • 如果值为 No,则表示不启用 SSL 加密;
    • 如果值为 Yes,则表示启用 SSL 加密。
    • Ignored如果允许 SSL 连接但副本服务器未启用 SSL 支持

  • Master_SSL_CA_File:

    • 指定用于验证主服务器证书的证书颁发机构(CA)文件的路径。如果 SSL 启用,并且需要验证主服务器证书,则此字段会包含 CA 文件的路径。
  • Master_SSL_CA_Path:

    • 指定用于验证主服务器证书的证书颁发机构(CA)路径的路径。如果 SSL 启用,并且需要验证主服务器证书,则此字段会包含 CA 路径的路径。
  • Master_SSL_Cert:

    • 指定从服务器的 SSL 证书文件的路径。如果 SSL 启用,并且从服务器需要提供证书以进行身份验证,则此字段包含证书文件的路径。
  • Master_SSL_Cipher:

    • 指定在 SSL 通信中使用的密码套件。如果 SSL 启用,则此字段包含用于加密通信的密码套件的详细信息。
  • Master_SSL_Key:

    • 指定从服务器的 SSL 私钥文件的路径。如果 SSL 启用,并且从服务器需要提供私钥以进行身份验证,则此字段包含私钥文件的路径。

这些字段涉及到 MySQL 主从复制中使用 SSL 加密进行安全通信的设置。如果需要使用 SSL 进行主从复制,必须在主从服务器上配置相应的 SSL 证书和密钥,并确保双方配置一致。

主从延迟

Seconds_Behind_Master

clock_of_slave - last_timestamp_executed_by_SQL_thread - clock_diff_with_master
参考我的博客 【MySQL源码】Seconds_Behind_Master是如何计算的-CSDN博客

复制信息存储

Master_Info_File

在从库上存储主库连接信息的文件或表 ,如设置为存储在mysql.slave_master_info表中时,查询该表

【MySQL命令】show slave status\G 超详细全面解释,MySQL,mysql,数据库

延迟从库

SQL_Delay

延迟从库 ,从库延迟主库多少秒

SQL_Remaining_Delay

   当Slave_SQL_Running_State为 时 Waiting until MASTER_DELAY seconds after master executed event,该字段包含剩余延迟秒数。其他时候,该字段为 NULL

GTID

Retrieved_Gtid_Set

从库已经接收到的GTID的集合(I/O线程),如果GTID模式没有开启则为空。这个值是现在存在或者已经存在在relay log中的GTID集合

Executed_Gtid_Set

已经被写进binlog的GTID的集合(SQL线程),这个值和 系统参数 gtid_executed 相同。也和在该实例上执行 show master status 中的Executed_Gtid_Set 值相同 

复制重写

Replicate_Rewrite_DB

用于指定需要在主从复制过程中进行数据库名重写的规则

Replicate_Rewrite_DBSHOW SLAVE STATUS 输出中关于主从复制设置的一个字段,用于指定主从复制中需要重写的数据库名。

这个功能主要用于在主从复制环境中更改数据库名的映射关系,从而实现不同的数据库结构。例如,如果在主服务器上有一个数据库名为 source_db,但在从服务器上想要将其重写为 destination_db,就可以使用 Replicate_Rewrite_DB 来实现这样的映射。

示例:

Replicate_Rewrite_DB = source_db -> destination_db

这表示将主服务器上的 source_db 重写为从服务器上的 destination_db

需要注意的是,使用 Replicate_Rewrite_DB 需要谨慎,确保映射关系是正确的,以免导致数据不一致。在配置时,建议详细测试并了解规则的影响。

参考 

https://dev.mysql.com/doc/refman/5.7/en/show-slave-status.html

https://dev.mysql.com/doc/refman/5.7/en/replica-io-thread-states.html文章来源地址https://www.toymoban.com/news/detail-757837.html

到了这里,关于【MySQL命令】show slave status\G 超详细全面解释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华为动态NAT配置【命令详细,代码解释】

    配置接口IP地址 int g0/0/0 ip add 192.168.0.254 24 int g/0/0/1 ip add 100.100.12.1 24 配置动态地址池 nat address-group 1 100.100.12.100 100.100.12.110 命令解释:创建编号为1的动态nat地址池,从100.100.12.100到100.100.12.110。 配置ACL匹配 acl 2000 rule 5 permit source 192.168.0.0 0.0.0.255 命令解释: ACL是一个匹配工具

    2023年04月08日
    浏览(36)
  • 【Flink】FlinkRuntimeException: Cannot read the binlog filename and position via ‘SHOW MASTER STATUS‘

    错误明细: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation 访问被拒绝;此操作需要(至少一个)SUPER、REPLICATION CLIENT权限 权限不够呗: 查看官网文档: https://ververica.github.io/flink-cdc-connectors/master/content/about.html 创建 MySQL 用户: 向用户授予所

    2024年02月02日
    浏览(43)
  • Docker中文件拷贝命令的详细解释与真实案例

    简介: Docker是一种流行的容器化平台,它提供了一种轻量级、可移植的解决方案,用于在不同的环境中部署和运行应用程序。在Docker中,文件拷贝是一个常见的操作,它允许将文件从主机系统复制到容器中,或者从容器中复制到主机系统中。本文将详细解释Docker中文件拷贝相

    2024年02月08日
    浏览(38)
  • 深入理解Dockerfile:构建镜像的详细解释与常用命令

      目录 1.Dockerfile 简介 2.Dockerfile 指令解析 2.1 FROM 2.2 RUN 2.3 COPY 2.4 ADD 2.5 CMD 2.6 ENTRYPOINT 2.7 ENV 2.8 ARG 2.9 EXPOSE 2.10 WORKDIR 2.11 VOLUME 2.12 USER 3.构建 Docker 镜像的常用命令 3.1 docker build 3.2 docker tag 3.3 docker push 3.4 docker pull 3.5 docker run 3.6 实例:构建自定义镜像  步骤 1:创建一个名为 D

    2024年02月12日
    浏览(36)
  • 配置Pytorch(深度学习)环境极其详细教程,解释按钮和命令

     打开  依次点击下面这个  开始创建 下面几个选项分别是 已经安装的 没有安装的 可以更新的 已经删除的 所有的  然后去pycharm里选到把这些新创建的环境下的python.exe这个解释器添加进去,就成功让程序在这个环境里运行了  先点圆圈里的内容,然后那两个随便点一个 点

    2024年02月08日
    浏览(44)
  • Linux最狠命令sudo rm -rf /* 详细解释

    sudo rm -rf /*是使用管理员(root)权限删除电脑中的一切东西(包括可移动设备中的文件) 接下来,我们把这条命令拆分开解释一下 sudo是使用管理员(root)权限执行命令,在命令前加sudo会要求输入root密码,由于Linux的用户权限管理,sudo在很多命令中都有用到。 rm在linux中是

    2024年02月06日
    浏览(58)
  • 爆肝万字带你超级详细全面了解Linux命令大全

    👑 作 者 主 页 :👉CSDN丨博客园 🏆 学 习 交 流 :👉在下周周ovoの社区 对这篇万字博客目录总结如下: 关机命令、重启命令,创建用户、删除用户、修改密码、切换用户、切换到超级用户、禁用/解锁用户账户、修改信息、组管理、列出用户、修改用户属性、用户权限管理

    2024年02月09日
    浏览(41)
  • Zookeeper篇——深入认识和学习Zookeeper节点-Znode,涵盖概念以及详细操作节点命令,保姆级教程,超详细、超全面!!!

    Zookeeper是一个分布式的协调服务,它通过维护一个分层的数据结构来存储和管理数据。这个数据结构被称为znode节点。每个znode节点在Zookeeper的命名空间中都有一个唯一的路径,类似于文件系统中的路径。 Zookeeper中的znode节点有以下几种类型: 永久节点(Persistent znode):永久

    2024年02月03日
    浏览(52)
  • 在Ubuntu中,超详细解释`ifconfig` 和 `ip a` 命令输出信息含义(用于显示和配置网络接口)

    运行前确保安装: 以这个为例,讲一下: 它输出的内容如下: 接口名称 : ens33 ,这是网络接口的名称。 ​ ( lo ,这是本地环回接口的名称。) flags 标志 : UP, BROADCAST, RUNNING, MULTICAST ,这些是标志位,指示网络接口的状态。 UP 表示接口已启用, BROADCAST 表示接口支持广播

    2024年02月09日
    浏览(53)
  • mysql 主从同步排查和处理 Slave_IO、Slave_SQL

    目录 查看主从是否同步 详解Slave_IO、Slave_SQL  判断主从完全同步 各个 Log_File 和 Log_Pos的关系 修复命令 Slave_IO_Running、Slave_SQL_Running,这两个值是Yes表示正常,No是异常 使用竖排显示: Slave_IO 线程负责把 主库 的bin日志( Master_Log )内容,抄写到 从库 的中继日志上( Relay_Log )。

    2024年02月15日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包