管理复制过程时最常见的任务是确保复制正在进行,并且副本和源之间没有错误。
您必须在每个副本上执行的 SHOW REPLICA STATUS
语句提供了有关副本服务器和源服务器之间连接的配置和状态的信息。MySQL 性能模式包含复制表,这些表以更易于访问的形式提供此信息。请参见 第 29.12.11 节,“性能模式复制表”。
性能模式复制表中显示的复制心跳信息使您可以检查复制连接是否处于活动状态,即使源最近没有向副本发送事件。如果源在二进制日志中没有更新,并且在二进制日志中没有未发送的事件,并且时间超过心跳间隔,则源会向副本发送心跳信号。源上的 SOURCE_HEARTBEAT_PERIOD
设置(由 CHANGE REPLICATION SOURCE TO
设置)指定心跳频率,默认情况下为副本连接超时间隔的一半(由系统变量 replica_net_timeout
指定)。replication_connection_status
性能模式表显示副本何时接收到最新的心跳信号,以及它收到了多少个心跳信号。
您可以使用 SHOW REPLICA STATUS
检查单个副本的状态;此语句提供了此处显示的信息
Press CTRL+C to copymysql> 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:
要检查的状态报告中的关键字段是
Replica_IO_State
: 副本的当前状态。请参见 第 10.14.5 节,“复制 I/O(接收器)线程状态” 和 第 10.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(应用器)线程处理源二进制日志的滞后时间(秒)。较大的数字(或不断增长的数字)可能表示副本无法及时处理来自源的事件。当
Seconds_Behind_Source
的值为 0 时,通常可以解释为副本已追赶上源服务器,但有些情况下并非严格如此。例如,如果源服务器和副本之间的网络连接断开,但复制 I/O(接收器)线程尚未注意到这一点,即由replica_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
检查已连接副本的状态,以查看正在运行的进程列表。副本连接在 Command
字段中包含 Binlog Dump
。
Press CTRL+C to copymysql> 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
语句显示有关副本的基本信息。输出包括副本服务器的 ID、--report-host
选项的值、连接端口和源服务器 ID。
Press CTRL+C to copymysql> SHOW REPLICAS; +-----------+----------+------+-------------------+-----------+ | Server_id | Host | Port | Rpl_recovery_rank | Source_id | +-----------+----------+------+-------------------+-----------+ | 10 | replica1 | 3306 | 0 | 1 | +-----------+----------+------+-------------------+-----------+ 1 row in set (0.00 sec)