MySQL查看主从复制信息详解

36 篇文章 0 订阅

SHOW {REPLICA | SLAVE} STATUS [FOR CHANNEL channel]

该语句提供复制线程的关键参数的状态信息。从 MySQL 8.0.22 开始,请使用 SHOW REPLICA STATUS 代替 SHOW SLAVE STATUS,后者在那个版本已被弃用。在 MySQL 8.0.22 之前的版本中,使用 SHOW SLAVE STATUS。此语句要求具有 REPLICATION CLIENT 权限(或弃用的 SUPER 权限)。

SHOW REPLICA STATUS 是非阻塞的。并行运行时,与 STOP REPLICA 同时运行,SHOW REPLICA STATUS 在不等待 STOP REPLICA 完成关闭复制 SQL(应用)线程或复制 I/O(接收)线程(或两者)的情况下返回。这允许在监控和其他应用程序中使用,在这些应用中,从 SHOW REPLICA STATUS 获得即时响应比确保返回的是最新数据更重要。在 MySQL 8.0.22 版本,SLAVE 关键词已被 REPLICA 替换。

如果使用 mysql 客户端发出此语句,可以使用 \G 语句终止符而不是分号来获得更易读的垂直布局:

mysql> SHOW REPLICA STATUS\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 127.0.0.1
                  Source_User: root
                  Source_Port: 13000
                Connect_Retry: 1
              Source_Log_File: master-bin.000001
          Read_Source_Log_Pos: 927
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 1145
        Relay_Source_Log_File: master-bin.000001
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 927
              Relay_Log_Space: 1355
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 1
                  Source_UUID: 73f86016-978b-11ee-ade5-8d2a2a562feb
             Source_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Source_Retry_Count: 10
                  Source_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Source_SSL_Crl:
           Source_SSL_Crlpath:
           Retrieved_Gtid_Set: 73f86016-978b-11ee-ade5-8d2a2a562feb:1-3
            Executed_Gtid_Set: 73f86016-978b-11ee-ade5-8d2a2a562feb:1-3
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
           Source_TLS_Version:
       Source_public_key_path:
        Get_Source_public_key: 0
            Network_Namespace:

从 MySQL 8.0.27 开始,可以在 CHANGE REPLICATION SOURCE TO 语句上设置 GTID_ONLY 选项,以停止复制通道在复制元数据存储库中持久化文件名和文件位置。通过这种设置,源二进制日志文件和中继日志文件的文件位置在内存中跟踪。SHOW REPLICA STATUS 语句仍在常规使用中显示文件位置。然而,由于文件位置不在连接元数据存储库和应用程序元数据存储库中定期更新,除了在少数情况下,如果服务器重新启动,文件位置可能会过期。

对于服务器启动后具有 GTID_ONLY 设置的复制通道,源二进制日志文件的读取和应用文件位置(Read_Source_Log_Pos 和 Exec_Source_Log_Pos)被设置为零,文件名(Source_Log_File 和 Relay_Source_Log_File)被设置为 INVALID。中继日志文件名(Relay_Log_File)根据 relay_log_recovery 设置设定,要么是在服务器启动时创建的新文件,要么是存在的第一个中继日志文件。文件位置(Relay_Log_Pos)设置为位置 4,并使用 GTID 自动跳过跳过文件中已经应用的任何事务。

当接收线程接触源并获得有效位置信息时,读取位置(Read_Source_Log_Pos)和文件名(Source_Log_File)用正确的数据更新并变得有效。当应用程序线程从源应用交易或跳过已执行的交易时,执行位置(Exec_Source_Log_Pos)和文件名(Relay_Source_Log_File)用正确的数据更新并变得有效。在那时,中继日志文件位置(Relay_Log_Pos)也得到更新。

以下列表描述了 SHOW REPLICA STATUS 返回的字段。

- Replica_IO_State
  - 复制 I/O(接收)线程的 SHOW PROCESSLIST 输出的 State 字段的副本。这告诉你线程正在做什么:尝试连接到源、等待来自源的事件、重新连接到源等等。
- Source_Host
  - 连接到的主库的主机。
- Source_User
  - 用于连接到源的帐户的用户名。
- Source_Port
  - 用于连接到源的端口。
- Connect_Retry
  - 连接重试之间的秒数(默认60)。这可以使用 CHANGE REPLICATION SOURCE TO 语句(从 MySQL 8.0.23 开始)或 CHANGE MASTER TO 语句(在 MySQL 8.0.23 之前)进行设置。
- Source_Log_File
  - I/O(接收)线程当前正在读取的源二进制日志文件的名称。对于服务器启动后具有 GTID_ONLY 设置的复制通道,此设置为 INVALID。当副本联系源时,它将得到更新。
- Read_Source_Log_Pos
  - I/O(接收)线程读取的当前源二进制日志文件中的位置。对于服务器启动后具有 GTID_ONLY 设置的复制通道,此设置为零。当副本联系源时,它将得到更新。
- Relay_Log_File
  - SQL(应用)线程当前正在读取和执行的中继日志文件的名称。
- Relay_Log_Pos
  - SQL(应用)线程已经读取和执行的当前中继日志文件中的位置。
- Relay_Source_Log_File
  - SQL(应用)线程执行的最新事件所在的源二进制日志文件的名称。对于服务器启动后具有 GTID_ONLY 设置的复制通道,此设置为 INVALID。当执行事务或跳过事务时,它将得到更新。
- Replica_IO_Running
  - 复制 I/O(接收)线程是否已启动并已成功连接到源。在内部,此线程的状态由以下三个值之一表示:
    - MYSQL_REPLICA_NOT_RUN。复制 I/O(接收)线程未运行。对于此状态,Replica_IO_Running 是 No。
    - MYSQL_REPLICA_RUN_NOT_CONNECT。复制 I/O(接收)线程正在运行,但未连接到复制源。对于此状态,Replica_IO_Running 是 Connecting。
    - MYSQL_REPLICA_RUN_CONNECT。复制 I/O(接收)线程正在运行,并已连接到复制源。对于此状态,Replica_IO_Running 是 Yes。
- Replica_SQL_Running
  - 复制 SQL(应用程序)线程是否已启动。
- Replicate_Do_DB, Replicate_Ignore_DB
  - 用 --replicate-do-db 和 --replicate-ignore-db 选项或 CHANGE REPLICATION FILTER 语句指定的任何数据库的名称。如果使用了 FOR CHANNEL 子句,则显示特定于通道的复制过滤器。否则,显示每个复制通道的复制过滤器。
- Replicate_Do_Table, Replicate_Ignore_Table, Replicate_Wild_Do_Table, Replicate_Wild_Ignore_Table
  - 使用 --replicate-do-table、--replicate-ignore-table、 --replicate-wild-do-table 和 --replicate-wild-ignore-table 选项或 CHANGE REPLICATION FILTER 语句指定的任何表的名称。如果使用了 FOR CHANNEL 子句,则显示特定于通道的复制过滤器。否则,显示每个复制通道的复制过滤器。
- Last_Errno, Last_Error
  - 这些列是 Last_SQL_Errno 和 Last_SQL_Error 的别名。
  - 发出 RESET MASTER 或 RESET REPLICA 将重置这些列中显示的值。
  - 注意:当复制 SQL 线程遇到错误时,它首先报告错误,然后停止 SQL 线程。这意味着,在 SHOW REPLICA STATUS 显示非零值为 Last_SQL_Errno 的小窗口期内,即使 Replica_SQL_Running 仍显示 Yes。
- Skip_Counter
  - sql_slave_skip_counter 系统变量的当前值。可以通过 SET GLOBAL sql_slave_skip_counter 语句设置。
- Exec_Source_Log_Pos
  - 从机上 SQL 线程已经执行的来源服务器(源服务器)二进制日志的位置。换句话说,它表示从二进制日志中读取并且实际在从服务器上执行的最后一个事件记录的结束位置。
  - 可以在启动新副本时将此值与 CHANGE REPLICATION SOURCE TO 语句的 SOURCE_LOG_POS 选项(从MySQL 8.0.23 开始)或 CHANGE MASTER TO 语句的 MASTER_LOG_POS 选项(在MySQL 8.0.23 之前)一起使用,以便新副本从此位置开始读取。源的二进制日志中由(Relay_Source_Log_File, Exec_Source_Log_Pos)给出的坐标对应于中继日志中的(Relay_Log_File, Relay_Log_Pos)给出的坐标。
  - 从中继日志中已执行的事务序列的不一致性可能导致此值为“低水位”。换句话说,在位置之前出现的事务保证已提交,但在位置之后的事务可能已提交或未提交。如果需要纠正这些差距,请使用 START REPLICA UNTIL SQL_AFTER_MTS_GAPS。
- Relay_Log_Space
  - 所有现有中继日志文件的总合并大小。
- Until_Condition, Until_Log_File, Until_Log_Pos
  - START REPLICA 语句中 UNTIL 子句中指定的值。
  - Until_Condition 有以下值:
    - 如果没有指定 UNTIL 子句,则为 None。
    - 如果副本正在读取源的二进制日志中的给定位置,则为 Source。
    - 如果副本正在读取其中继日志中的给定位置,则为 Relay。
    - 如果复制 SQL 线程正在处理事务,直到它达到 gtid_set 中列出的第一个事务的 GTID 为止,则为 SQL_BEFORE_GTIDS。
    - 如果复制线程正在处理所有事务,直到在 gtid_set 中列出的最后一个事务被两个线程处理为止,则为 SQL_AFTER_GTIDS。
    - 如果多线程副本的 SQL 线程正在运行,直到在中继日志中不再发现任何间隙为止,则为 SQL_AFTER_MTS_GAPS。
  - Until_Log_File 和 Until_Log_Pos 指示定义复制 SQL 线程停止执行的坐标的日志文件名称和位置。
  - 有关 UNTIL 子句的更多信息。
- Source_SSL_Allowed, Source_SSL_CA_File, Source_SSL_CA_Path, Source_SSL_Cert, Source_SSL_Cipher, Source_SSL_CRL_File, Source_SSL_CRL_Path, Source_SSL_Key, Source_SSL_Verify_Server_Cert
  - 这些字段显示副本连接到源时使用的 SSL 参数(如果有)。
  - Source_SSL_Allowed 有以下值:
    - 如果允许与源建立 SSL 连接,则为 Yes。
    - 如果不允许与源建立 SSL 连接,则为 No。
    - 如果允许建立 SSL 连接,但副本服务器没有启用 SSL 支持,则为 Ignored。
  - 其他 SSL 相关字段的值对应于 CHANGE REPLICATION SOURCE TO 语句的 SOURCE_SSL_* 选项的值(从 MySQL 8.0.23 开始),或 CHANGE MASTER TO 语句的 MASTER_SSL_* 选项的值(在 MySQL 8.0.23 之前)。
- Seconds_Behind_Source
  - 该字段指示副本“延迟”多少:
    - 当副本正在积极处理更新时,该字段显示副本上的当前时间戳与副本上正在处理的事件的源原始时间戳之间的差异。
    - 当副本当前没有正在处理的事件时,此值为 0。
  - 本质上,这个字段测量复制 SQL(应用程序)线程和复制 I/O(接收器)线程之间的时间差异,以秒为单位。如果源和副本之间的网络连接很快,复制接收器线程与源非常接近,因此该字段是衡量复制应用程序线程与源相比有多晚的良好近似值。如果网络慢,这不是一个好的近似值;复制应用程序线程很可能经常赶上慢读取的复制接收线程,所以 Seconds_Behind_Source 经常显示 0 的值,即使复制接收线程与源相比是晚的。换句话说,这一列只对快速网络有用。
  - 即使源和副本的时钟时间不完全相同,这种时间差异计算

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制MySQL数据库中非常重要的功能之一,它可以实现将一个MySQL服务器上的数据自动复制到其他MySQL服务器上,从而实现数据的备份、负载均衡、分布式数据处理等功能。下面是MySQL主从复制的原理详解: 1. 主从服务器的配置 MySQL主从服务器的配置分为两个步骤:一是在主服务器上开启二进制日志(Binary Log),二是在从服务器上设置从属关系(Slave)。 开启二进制日志的命令是: ``` mysql> SET GLOBAL binlog_format = 'ROW'; mysql> SET GLOBAL log_bin = 'mysql-bin'; ``` 设置从属关系的命令是: ``` mysql> CHANGE MASTER TO -> MASTER_HOST='master_host_name', -> MASTER_USER='replication_user_name', -> MASTER_PASSWORD='replication_password', -> MASTER_LOG_FILE='recorded_log_file_name', -> MASTER_LOG_POS=recorded_log_position; ``` 2. 主服务器的操作 在主服务器上,所有的写操作都会被写入到二进制日志中,这些日志文件会被保存在主服务器上。 3. 从服务器的操作 在从服务器上,首先要连接到主服务器上,获取二进制日志文件并进行解析,然后将解析后的内容应用到自己的数据库中。从服务器会定期地从主服务器上获取新的二进制日志文件,并更新自己的数据。 4. 数据同步的方式 MySQL主从复制有两种同步方式:基于语句的复制和基于行的复制。基于语句的复制是指从服务器将主服务器上执行的SQL语句复制到自己的数据库中,这种方式比较简单,但是有些复杂的SQL语句可能会导致从服务器上的数据不一致。基于行的复制是指从服务器将主服务器上每一行数据的变化复制到自己的数据库中,这种方式比较安全,但是需要更多的网络带宽和存储空间。 5. 数据库的故障处理 如果主服务器发生故障,从服务器可以自动切换到其他可用的主服务器上,尽量避免数据的丢失和服务的中断。 以上就是MySQL主从复制的原理详解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值