使用select查询的mysql复制状态

MyS*_*DBA 14 mysql replication status

是否可以从任何系统数据库表中获取复制状态.使用它我可以识别复制是上升还是下降.

我需要知道系统表中的SLAVE_IO_RUNNING和SLAVE_SQL_RUNNING = YES是否?

玛纳斯

小智 12

这是我根据Manasi的最佳答案使用的陈述.

SELECT variable_value 
FROM information_schema.global_status 
WHERE variable_name='SLAVE_RUNNING';
Run Code Online (Sandbox Code Playgroud)


Pau*_*ias 7

hslakhan的回答工程对MySQL 5.6,但MySQL的5.7从属状态变量已从移动information_schemaperformance_schema

Slave_IO_Running 对应于:

SELECT SERVICE_STATE FROM performance_schema.replication_connection_status;
Run Code Online (Sandbox Code Playgroud)

Slave_SQL_Running 对应于:

SELECT SERVICE_STATE FROM performance_schema.replication_applier_status;
Run Code Online (Sandbox Code Playgroud)

SHOW SLAVE STATUS输出中还有其他一些变量,其余部分请参见https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_show_compatibility_56_slave_status


小智 6

基于这个问题,我写了一个查询来回答你。请维护版权:-)

SELECT 
    channel_name AS Channel_Name,
    smi.host AS Master_Host,
    smi.user_name AS Master_User,
    smi.port AS Master_Port,
    smi.master_log_name AS Master_Log_File,
    smi.master_log_pos AS Read_Master_Log_Pos,
    ssi.master_log_pos AS Exec_Master_Log_Pos,
    rcs.service_state AS Slave_IO_Running,
    rss.service_state AS Slave_SQL_Running,
    t.processlist_time AS Seconds_Behind_Master,
    rcs.last_error_number AS Last_IO_Errno,
    rcs.last_error_message AS Last_IO_Error,
    rss.last_error_number AS Last_SQL_Errno,
    rss.last_error_message AS Last_SQL_Error,
    tc.processlist_state AS  Slave_IO_State,
    t.processlist_state AS  Slave_SQL_Running_State

FROM
    mysql.slave_master_info smi 
        JOIN
    mysql.slave_relay_log_info ssi USING (channel_name)   
        JOIN 
    performance_schema.replication_connection_status rcs USING (channel_name)
        LEFT JOIN
    performance_schema.replication_applier_status_by_worker rss USING (channel_name)
        LEFT JOIN
    performance_schema.threads t ON (rss.thread_id = t.thread_id)
        LEFT JOIN
    performance_schema.threads tc ON (rcs.thread_id = tc.thread_id)
\G
Run Code Online (Sandbox Code Playgroud)

最好的问候, Renan Benedicto Pereira(BR MySQL DBA)

注意:除非启用master_info_repository = TABLE和否则这不会起作用relay_log_info_repository=TABLE,FILE 选项是默认值,不会起作用


nin*_*ber 5

该解决方案使用awk处理 show 命令输出,并在处理的任何字段出现错误时发送邮件。在本例中,字段为Slave_IO_RunningSlave_SQL_Running。填充 free 以添加“show Slave status”输出中的其他字段 -例如Last_Error/Seconds_Behind_Master或awk其他 show 命令的输出。

#!/bin/bash  
# get some slave stats  
Slave_IO_Running=`mysql -u root --password="pwd" -Bse "show slave status\G" | grep Slave_IO_Running | awk '{ print $2 }'`  
Slave_SQL_Running=`mysql -u root --password="pwd" -Bse "show slave status\G" | grep Slave_SQL_Running | awk '{ print $2 }'`  
Last_error=`mysql -u root --password="pwd" -Bse "show slave status\G" | grep Last_error | awk -F : '{ print $2 }'`  

if [ $Slave_SQL_Running == 'No' ] || [ $Slave_IO_Running == 'No' ];  
then  
    echo "Last Error:" $Last_error | mail -s "Replication error on slavedb!!!" devops@company.com  
fi  

exit 0  
Run Code Online (Sandbox Code Playgroud)


ajr*_*eal -3

afaik,没有选择(如 information_schema)

检查从属复制状态

show slave status;
Run Code Online (Sandbox Code Playgroud)

参考--http ://dev.mysql.com/doc/refman/5.0/en/show-slave-status.html