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)
hslakhan的回答工程对MySQL 5.6,但MySQL的5.7从属状态变量已从移动information_schema
到performance_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 选项是默认值,不会起作用
该解决方案使用awk处理 show 命令输出,并在处理的任何字段出现错误时发送邮件。在本例中,字段为Slave_IO_Running和Slave_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