MySQL репликации статуса с помощью запроса выбора - PullRequest
12 голосов
/ 10 августа 2011

Можно ли получить статус репликации из любой таблицы системной базы данных. используя который я могу определить, работает ли репликация или нет.

Мне нужно знать, являются ли SLAVE_IO_RUNNING и SLAVE_SQL_RUNNING = YES из системной таблицы?

Manasi

Ответы [ 9 ]

12 голосов
/ 27 июля 2016

Это утверждение, которое я использовал, основываясь на главном ответе Манаси.

SELECT variable_value 
FROM information_schema.global_status 
WHERE variable_name='SLAVE_RUNNING';
4 голосов
/ 20 июня 2018

ответ Хслахана работает для MySQL 5.6, но для MySQL 5.7 переменные состояния подчиненного устройства изменились с information_schema на performance_schema.

Slave_IO_Runningсоответствует:

SELECT SERVICE_STATE FROM performance_schema.replication_connection_status;

Slave_SQL_Running соответствует:

SELECT SERVICE_STATE FROM performance_schema.replication_applier_status;

Есть и другие переменные из вывода SHOW SLAVE STATUS, см. https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_show_compatibility_56_slave_status для остальных.

4 голосов
/ 10 августа 2011

Я получил решение в базе данных information_schema. Пожалуйста, проверьте таблицу GLOBAL_STATUS в базе данных information_schema. Вы увидите переменную «SLAVE_RUNNING», если она «ON», что означает, что репликация работает нормально. Если он выключен, то по какой-либо причине репликация не удалась, и вам нужно проверить, почему? : -)

Manasi

2 голосов
/ 30 июля 2014

Это решение использует awk для обработки выходных данных команды show и отправляет письмо в случае ошибок в любом из обработанных полей. В этом случае поля Slave_IO_Running и Slave_SQL_Running . Не стесняйтесь добавлять другие поля из вывода '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  
2 голосов
/ 06 сентября 2013

Начиная с MySQL 5.6, вы можете хранить статус ведомого в таблицах, а не в файлах, запустив сервер с --master-info-repository=TABLE и --relay-log-info-repository=TABLE.

Ссылка: http://dev.mysql.com/doc/refman/5.6/en/slave-logs.html

Evenпри этом я не уверен, будут ли таблицы содержать конкретные значения, которые вы ищете (SLAVE_IO_RUNNING и SLAVE_SQL_RUNNING).Я не мог попробовать это, потому что я бегу MySQL 5.1;Я просто искал и нашел это в документации 5.6.

Похоже, вы пытаетесь контролировать состояние потока в автоматическом режиме.Поскольку у меня нет таблиц, я планирую сделать это с помощью сценария оболочки и задания cron, примерно так:

$ mysql -u root -pXXXX -e "SHOW SLAVE STATUS\G" | grep Slave_IO_Running | awk '{ print $2 }'
$ mysql -u root -pXXXX -e "SHOW SLAVE STATUS\G" | grep Slave_SQL_Running | awk '{ print $2 }'

Ссылка: http://www.stardothosting.com/blog/2012/02/checking-and-repairing-mysql-replication-automatically/

2 голосов
/ 10 августа 2011

Основной оператор для этого - SHOW SLAVE STATUS, который вы должны выполнять на каждом подчиненном устройстве. См .: http://dev.mysql.com/doc/refman/5.1/en/replication-administration-status.html

На ведущем устройстве вы можете проверить состояние подключенных ведомых устройств, используя SHOW PROCESSLIST, чтобы просмотреть список запущенных процессов. Для подчиненных, которые были запущены с параметром --report-host и подключены к мастеру, оператор SHOW SLAVE HOSTS на мастере показывает основную информацию о подчиненных устройствах.

1 голос
/ 20 марта 2019

На основании этого вопроса я написал запрос, чтобы ответить вам. Пожалуйста, сохраняйте авторские права: -)

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

С уважением, Ренан Бенедикто Перейра (BR MySQL DBA)

0 голосов
/ 06 июня 2019

Я не совсем уверен, что это за шум.«Показать статус ведомого» - это запрос.Вы можете выполнить этот запрос на любом современном языке программирования, а затем просто выбрать имена столбцов, которые хотите использовать, верно?

Например, в PHP я использую:

    $row = $stmt->fetch();
    print "Slave_IO_Running: " . $row['Slave_IO_Running'] . "\n";

После получения результатов'показать статус ведомого' в строке $.

0 голосов
/ 10 августа 2011

afaik, нет выбора (например, information_schema)

для проверки статуса репликации ведомого

show slave status;

ссылка - http://dev.mysql.com/doc/refman/5.0/en/show-slave-status.html

...