[ACDU翻译] MySQL 17.1.7.1 检查复制状态

17.1.7.1 检查复制状态

管理复制过程时最常见的任务是确保复制正在发生并且副本和源之间没有错误。

您必须在每个副本上执行的SHOW REPLICA STATUS语句提供有关副本服务器和源服务器之间连接的配置和状态的信息。从 MySQL 8.0.22 开始,SHOW SLAVE STATUS已弃用, SHOW REPLICA STATUS可以改为使用。性能模式具有复制表,以更易于访问的形式提供此信息。请参阅 第 27.12.11 节,“性能模式复制表”

Performance Schema 复制表中显示的复制心跳信息使您可以检查复制连接是否处于活动状态,即使源最近没有向副本发送事件也是如此。如果二进制日志在比心跳间隔更长的时间内没有更新,也没有未发送的事件,则源向副本发送心跳信号。源上的 MASTER_HEARTBEAT_PERIOD设置(由CHANGE MASTER TO 语句设置)指定心跳的频率,默认为副本连接超时间隔的一半(由系统变量 replica_net_timeout或 指定slave_net_timeout)。这 replication_connection_status Performance Schema 表显示副本何时接收到最新的心跳信号,以及它已接收到多少心跳信号。

如果您使用该 SHOW REPLICA STATUS语句检查单个副本的状态,该语句将提供以下信息:

mysql> SHOW REPLICA STATUS\G *************************** 1. row *************************** Replica_IO_State: Waiting for source to send event Source_Host: source1 Source_User: root Source_Port: 3306 Connect_Retry: 60 Source_Log_File: mysql-bin.000004 Read_Source_Log_Pos: 931 Relay_Log_File: replica1-relay-bin.000056 Relay_Log_Pos: 950 Relay_Source_Log_File: mysql-bin.000004 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: 931 Relay_Log_Space: 1365 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: 0

状态报告中要检查的关键字段是:

  • Replica_IO_State:副本的当前状态。有关详细信息,请参阅第 8.14.5 节,“复制 I/O(接收器)线程状态”第 8.14.6 节,“复制 SQL 线程状态”

  • Replica_IO_Running: 用于读取源二进制日志的 I/O(接收者)线程是否正在运行。通常, Yes除非您尚未开始复制或已明确停止复制,否则 您希望这样做STOP REPLICA

  • Replica_SQL_Running:用于执行中继日志中事件的SQL线程是否正在运行。与 I/O 线程一样,这通常应该是 Yes.

  • Last_IO_Error, Last_SQL_Error: 处理中继日志时由 I/O(接收方)和 SQL(应用程序)线程注册的最后一个错误。理想情况下,这些应该是空白的,表示没有错误。

  • Seconds_Behind_Source:复制 SQL(应用程序)线程在处理源二进制日志之后的秒数。较大的数字(或增加的数字)可能表明副本无法及时处理来自源的事件。

    值 0Seconds_Behind_Source 通常可以解释为表示副本已经赶上了源,但在某些情况下,这并不完全正确。例如,如果源和副本之间的网络连接断开但复制 I/O(接收器)线程尚未注意到这一点,则可能会发生这种情况;即设定的时间段 replica_net_timeoutslave_net_timeout尚未过去的时间段。

    的瞬态值 Seconds_Behind_Source也可能无法准确反映情况。当复制 SQL(应用程序)线程赶上 I/O 时, Seconds_Behind_Source显示 0;但是当复制 I/O(接收者)线程仍在排队新事件时,Seconds_Behind_Source可能会显示一个较大的值,直到复制应用程序线程完成执行新事件。当事件具有旧的时间戳时,这种情况尤其可能发生;在这种情况下,如果您 SHOW REPLICA STATUS在相对较短的时间内执行多次,您可能会看到该值在 0 和一个较大的值之间反复来回变化。

有几对字段提供有关副本从源二进制日志读取事件并在中继日志中处理它们的进度信息:

  • ( Master_Log_file, Read_Master_Log_Pos):源二进制日志中的坐标,指示复制 I/O(接收器)线程从该日志读取事件的距离。
  • ( Relay_Master_Log_File, Exec_Master_Log_Pos):源二进制日志中的坐标,指示复制 SQL(应用程序)线程执行从该日志接收到的事件的距离。
  • ( Relay_Log_File, Relay_Log_Pos):副本中继日志中的坐标,指示复制 SQL(应用程序)线程执行中继日志的程度。这些对应于前面的坐标,但以副本中继日志坐标而不是源二进制日志坐标表示。

在源上,您可以检查已连接副本的状态,SHOW PROCESSLIST用于检查正在运行的进程列表。副本连接 Binlog Dump在该Command 领域有:

mysql> SHOW PROCESSLIST \G; *************************** 4. row *************************** Id: 10 User: root Host: replica1:58371 db: NULL Command: Binlog Dump Time: 777 State: Has sent all binlog to slave; waiting for binlog to be updated Info: NULL

因为它是驱动复制过程的副本,所以此报告中提供的信息很少。

对于使用该 --report-host选项启动并连接到源的副本,源上的 SHOW REPLICAS(或 MySQL 8.0.22 之前的 SHOW SLAVE HOSTS)语句显示有关副本的基本信息。输出包括副本服务器的 ID、 --report-host选项的值、连接端口和源 ID:

mysql> SHOW REPLICAS; +-----------+----------+------+-------------------+-----------+ | Server_id | Host | Port | Rpl_recovery_rank | Source_id | +-----------+----------+------+-------------------+-----------+ | 10 | replica1 | 3306 | 0 | 1 | +-----------+----------+------+-------------------+-----------+ 1 row in set (0.00 sec)

免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论