Можно ли получить статус репликации из любой таблицы системных баз данных. с помощью которого я могу определить, вверх или вниз репликация.
Мне нужно знать, являются ли SLAVE_IO_RUNNING и SLAVE_SQL_RUNNING = YES из системной таблицы?
Манаси
Можно ли получить статус репликации из любой таблицы системных баз данных. с помощью которого я могу определить, вверх или вниз репликация.
Мне нужно знать, являются ли SLAVE_IO_RUNNING и SLAVE_SQL_RUNNING = YES из системной таблицы?
Манаси
Это утверждение, которое я использовал на основе ответа Манаси.
SELECT variable_value
FROM information_schema.global_status
WHERE variable_name='SLAVE_RUNNING';
hslakhan answer работает для 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.
Я получил решение в базе данных information_schema. Пожалуйста, проверьте таблицу GLOBAL_STATUS в базе данных information_schema. Вы увидите переменную "SLAVE_RUNNING", если она "ON", что означает, что репликация работает нормально. Если это "ВЫКЛ", репликация не удалась по какой-либо причине, и вам нужно проверить, почему?: -)
Манаси
Основной оператор для этого - SHOW SLAVE STATUS, который вы должны выполнить на каждом подчиненном устройстве. См. http://dev.mysql.com/doc/refman/5.1/en/replication-administration-status.html
На главном устройстве вы можете проверить состояние подключенных подчиненных устройств, используя SHOW PROCESSLIST, чтобы просмотреть список запущенных процессов. Для ведомых устройств, которые были запущены с опцией --report-host и подключены к ведущему, инструкция SHOW SLAVE HOSTS на главном экране показывает основную информацию о ведомых устройствах.
Начиная с MySQL 5.6, вы можете сохранить статус ведомого в таблицах, а не файлы, запустив сервер с помощью --master-info-repository=TABLE
и --relay-log-info-repository=TABLE
.
Ссылка: http://dev.mysql.com/doc/refman/5.6/en/slave-logs.html
Даже при этом я не уверен, будут ли таблицы содержать конкретные значения, которые вы ищете (SLAVE_IO_RUNNING
и SLAVE_SQL_RUNNING
). Я не мог попробовать это, потому что я запускаю mysql 5.1; Я просто искал и нашел его в документации 5.6.
Похоже, вы пытаетесь контролировать состояние потока автоматическим способом. Поскольку у меня нет таблиц, я планирую сделать это с помощью оболочки script и задания 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/
Это решение использует awk для обработки выходных данных команды show и отправляет почту в случае ошибок в любом из обработанных полей. В этом случае поля являются Slave_IO_Running и Slave_SQL_Running. Заполните бесплатно добавить другие поля из "шоу рабского состояния" выход - LAST_ERROR/Seconds_Behind_Master, например, или AWK вывод других шоу команд.
#!/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!!!" [email protected]
fi
exit 0
На основании этого вопроса я написал запрос, чтобы ответить вам. Пожалуйста, сохраняйте авторские права :-)
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)
Вы можете выполнить 'SHOW SLAVE STATUS; запрос на каждом подчиненном сервере и выборку результата. Вы также можете написать script, который будет выполнять запрос через регулярные промежутки времени.
Иначе вы можете использовать такие инструменты, как Monyog, как я, у которых есть советники, которые будут контролировать серверы репликации и предоставлять результаты в пределах установленных интервалов времени. Он также имеет страницу репликации, которая дает больше информации для серверов в настройке репликации и предоставляет функцию оповещения, если ведомое устройство не работает.
Я не совсем уверен, что это за суета. "Показать статус ведомого" - это запрос. Вы можете выполнить этот запрос на любом современном языке программирования, а затем просто выбрать имена столбцов, которые хотите использовать, верно?
В PHP, например, я использую:
$row = $stmt->fetch();
print "Slave_IO_Running: " . $row['Slave_IO_Running'] . "\n";
После получения результатов от 'show slave status' в строке $.
Вы также можете запустить это в мастер.
SELECT * FROM information_schema.PROCESSLIST AS p WHERE p.COMMAND = 'Binlog Dump';
afaik, нет выбора (например, information_schema)
чтобы проверить статус ведомой репликации
show slave status;
ссылка - http://dev.mysql.com/doc/refman/5.0/en/show-slave-status.html