SHOW REPLICA | SLAVE STATUS 语句(2)● Until_Condition, Until_Log_File, Until_Log_PosSTART REPLICA | SLAVE 语句的 UNTIL 子句中指定的值。■ 如果没有指定 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 线程停止执行时的坐标位置。● 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 连接但副本服务器未启用 SSL 支持,则为 Ignored。其他 SSL 相关字段的值对应于 CHANGE REPLICATION SOURCE TO 语句(从 MySQL 8.0.23 开始)的 SOURCE_SSL_* 选项的值,或 CHANGE MASTER TO 语句(在 MySQL 8.0.23 之前)的 MASTER_SSL_* 选项的值。■ 当副本正在主动处理更新时,此字段显示复制副本上的当前时间戳与源上记录的副本上当前正在处理的事件的原始时间戳之间的差异。本质上,此字段度量复制 SQL 线程和复制 I/O 线程之间的时间差(以秒为单位)。如果源和副本之间的网络连接很快,则复制 I/O 线程与源非常接近,因此此字段很好地近似于复制 SQL 线程与源的比较时间。如果网络速度很慢,这不是一个很好的近似值;复制 SQL 线程可能经常被读得很慢的复制 I/O 线程所赶上,因此,即使复制 I/O 线程比源线程晚,Seconds_Behind_Source 仍通常显示为 0。换句话说,此列只对快速网络有用。即使源和副本没有相同的时钟时间,只要在副本 I/O 线程启动时计算的时间差从那时起保持不变,这种时间差计算也可以工作。任何更改,包括 NTP 更新,都可能导致时钟偏移,从而使计算 Seconds_Behind_Source 的可靠性降低。在 MySQL 8.0 中,如果复制 SQL 线程没有运行,或者 SQL 线程已经处理了所有的中继日志并且复制 I/O 线程没有运行,那么这个字段是 NULL(未定义或未知)。(在较旧版本的 MySQL 中,如果复制 SQL 线程或复制 I/O 线程未运行或未连接到源,则此字段为 NULL。)如果复制 I/O 线程正在运行,但中继日志已处理完,则 Seconds_Behind_Source 设置为 0。Seconds_Behind_Source 的值基于事件中存储的时间戳,这些时间戳复制时会保留。这意味着,如果源 M1 本身是 M0 的副本,则源自 M0 的二进制日志的 M1 的二进制日志的任何事件,都具有该事件的 M0 时间戳。这使得 MySQL 能够成功地复制 TIMESTAMP。但是,Seconds_Behind_Source 的问题是,如果 M1 也从客户端接收到直接更新,Seconds_Behind_Source 值会随机波动,因为有时 M1 的最新事件源自 M0,有时是 M1 上直接更新的结果。在使用多线程副本时,应记住此值基于 Exec_Source_Log_Pos,因此可能不会反映最近提交的事务的位置。● Last_IO_Errno, Last_IO_Error导致复制I/O线程停止的最新错误的错误号和错误消息。错误号为0且消息为空字符串表示没有错误。如果 Last_IO_Error 值不为空,则错误值也会出现在副本的错误日志中。I/O 错误信息包括显示最近 I/O 线程错误发生时间的时间戳。此时间戳使用 YYMMDD hh:mm:ss 格式,并显示在 Last_IO_Error_Timestamp 列中。执行 RESET MASTER 或 RESET REPLICA | SLAVE 将重置这些列中显示的值。● Last_SQL_Errno, Last_SQL_Error导致复制SQL线程停止的最新错误的错误号和错误消息。错误号为0且消息为空字符串表示无错误。如果 Last_SQL_Error 值不为空,则错误值也会出现在副本的错误日志中。如果复制副本是多线程的,则复制SQL线程是工作线程的协调者。在这种情况下,Last_SQL_Error 字段显示的内容与 Performance Schema replication_applier_status_by_coordinator 表中 Last_Error_Message 列所显示的内容一样。字段值被修改以表明其他工作线程中可能存在更多故障,这可以在 replication_applier_status_by_worker 表中看到,它显示每个工作线程的状态。如果该表不可用,则可以使用副本错误日志。还可以用日志或 replication_applier_status_by_worker 表来了解有关 SHOW REPLICA | SLAVE STATUS 或 replication_applier_status_by_coordinator 表显示的故障的更多信息。SQL 错误信息包括显示最近的SQL线程错误发生时间的时间戳。此时间戳使用 YYMMDD hh:mm:ss 格式,并显示在 Last_SQL_Error_Timestamp 列中。执行 RESET MASTER 或 RESET REPLICA | SLAVE 将重置这些列中显示的值。在 MySQL 8.0 中,在 Last_SQL_Errno 和 Last_SQL_Error 列中显示的所有错误代码和消息都对应于服务器错误消息参考中列出的错误值(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html)。以前的版本中并不总都是这样的。● Replicate_Ignore_Server_Ids使用 CHANGE REPLICATION SOURCE TO | CHANGE MASTER TO 语句的 IGNORE_SERVER_IDS 选项指定的服务器 ID,副本会忽略来自这些服务器的事件。循环或其他多源复制设置中删除其中一个服务器时,适合使用此选项。如果以这种方式设置了服务器 ID,则会显示逗号分隔的一个或多个数字的列表。如果未设置服务器ID,则该字段为空。slave_master_info 表中的 Ignored_server_ids 值也显示了要忽略的服务器 ID,但是是以空格分隔的列表形式,前面是要忽略的服务器 ID 总数。例如,如果执行的 CHANGE REPLICATION SOURCE TO | CHANGE MASTER TO 语句包含 IGNORE_SERVER_IDS = (2,6,9) 选项,就表明告诉副本忽略服务器 ID 为 2, 6 和 9 的源,该信息如下所示:Replicate_Ignore_Server_Ids: 2, 6, 9
复制
Ignored_server_ids: 3, 2, 6, 9
复制
Replicate_Ignore_Server_Ids 筛选由 I/O 线程执行,而不是由 SQL 线程执行,这意味着筛选出的事件不会写入中继日志。这与服务器选项所采取的过滤操作不同(如 --replicate-do-table,应用于SQL线程)。从 MySQL 8.0 开始,如果任何通道存在 IGNORE_SERVER_IDS 设置的服务器 ID,则执行 SET GTID_MODE=ON 时,会发出一个弃用警告。在启动基于 GTID 的复制之前,请使用 SHOW REPLICA | SLAVE STATUS 检查并清除相关服务器上所有被忽略的服务器ID列表。可以通过执行 CHANGE REPLICATION SOURCE TO | CHANGE MASTER TO 语句来清除列表,该语句包含一个带有空列表的 IGNORE_SERVER_IDS 选项。master.info 文件的位置,现在不推荐使用它。在 MySQL 8.0 中,默认情况下,使用一个表用于副本的连接元数据存储。当 Replica_SQL_Running_State 在源执行事件后等待 MASTER_DELAY 秒时,此字段包含剩余的延迟秒数。其他时候,此字段为 NULL。● Replica_SQL_Running_StateSQL 线程的状态(类似于 Replica_IO_State)。该值与 SHOW PROCESSLIST 显示的SQL线程的 State 值相同。在连接丢失的情况下,副本可以尝试重新连接到源的次数。这个值可以使用 CHANGE REPLICATION SOURCE TO 语句(从 MySQL 8.0.23 开始)或 CHANGE MASTER TO 语句(MySQL 8.0.23 之前)的 SOURCE_RETRY_COUNT | MASTER_RETRY_COUNT 选项设置,也可以使用更老的 --master-retry-count 服务器选项设置(仍然支持向后兼容)。副本绑定到的网络接口(如果有)。这是使用 CHANGE REPLICATION SOURCE TO 语句(从 MySQL 8.0.23 开始)或 CHANGE MASTER TO 语句(MySQL 8.0.23 之前)的 SOURCE_BIND | MASTER_BIND 选项设置。● Last_IO_Error_TimestampYYMMDD hh:mm:ss 格式的时间戳,显示最近的I/O错误发生的时间。● Last_SQL_Error_TimestampYYMMDD hh:mm:ss 格式的时间戳,显示最近的SQL错误发生的时间。与此副本接收的所有事务相对应的全局事务ID集合。如果没有使用 GTID,则为空。这是中继日志中存在或曾经存在过的所有 GTID 的集合。一旦收到 Gtid_log_event,就会添加 GTID。这会导致部分传输的事务将其 GTID 包含在集合中。当由于执行 RESET REPLICA | SLAVE 或 CHANGE REPLICATION SOURCE TO | CHANGE MASTER TO 或由于 --relay-log-recovery 选项的影响而丢失所有中继日志时,将清除该集合。当 relay_log_purge = 1 时,始终保留最新的中继日志,并且不清除集合。写入二进制日志的全局事务ID集。这与此服务器上的全局系统变量 gtid_executed 的值相同,也与此服务器上 SHOW MASTER STATUS 的输出中的 Executed_Gtid_Set 值相同。如果没有使用 GTID,则为空。如果通道使用 GTID 自动定位,则为 1,否则为 0。Replicate_Rewrite_DB 值显示指定的所有复制筛选规则。例如,如果设置了以下复制筛选规则:CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((db1,db2), (db3,db4));
复制
Replicate_Rewrite_DB 值的显示:Replicate_Rewrite_DB: (db1,db2),(db3,db4)
复制
正在显示的复制通道。总是有一个默认的复制通道,可以添加更多的复制通道。文件的路径名,该文件包含副本端的公钥副本,源需此公钥用于基于 RSA 密钥对的密码交换。文件必须为 PEM 格式。此列适用于使用 sha256_password 或 caching_sha2_password 身份验证插件进行身份验证的副本。如果给定了 Source_public_key_path 并指定了有效的公钥文件,则它优先于 Get_source_public_key。是否从源请求基于 RSA 密钥对的密码交换所需的公钥。此列适用于使用 caching_sha2_password 身份验证插件进行身份验证的副本。对于该插件,除非主动请求,否则源不会发送公钥。如果给定了 Source_public_key_path 并指定了有效的公钥文件,则它优先于 Get_source_public_key。网络命名空间名称;如果连接使用默认(全局)命名空间,则为空。此列是在 MySQL 8.0.22 中添加的。https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html