任意のシステムデータベーステーブルからレプリケーションステータスを取得することは可能ですか。これを使用して、レプリケーションがアップかダウンかを識別できます。
システムテーブルからSLAVE_IO_RUNNINGおよびSLAVE_SQL_RUNNING = YESかどうかを知る必要がありますか?
マナシ
これは、マナシのトップアンサーに基づいて私が使用したステートメントです。
SELECT variable_value
FROM information_schema.global_status
WHERE variable_name='SLAVE_RUNNING';
hslakhanの回答 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データベースで解決策を入手しました。 information_schemaデータベースのテーブルGLOBAL_STATUSを確認してください。変数「SLAVE_RUNNING」が「ON」の場合、レプリケーションが正常に機能していることを意味します。 「オフ」の場合、何らかの理由でレプリケーションが失敗しているため、理由を確認する必要がありますか? :-)
マナシ
このための主要なステートメントはSHOWSLAVE STATUSであり、これは各スレーブで実行する必要があります。参照: http://dev.mysql.com/doc/refman/5.1/en/replication-administration-status.html
マスターでは、SHOW PROCESSLISTを使用して接続されたスレーブのステータスを確認し、実行中のプロセスのリストを調べることができます。 --report-Hostオプションで開始され、マスターに接続されているスレーブの場合、マスターのSHOW SLAVE HOSTSステートメントは、スレーブに関する基本情報を示します。
このソリューションは、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!!!" [email protected]
fi
exit 0
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のドキュメントでそれを見つけました。
自動化された方法でスレッドのステータスを監視しようとしているようです。テーブルがないので、シェルスクリプトと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/
この質問に基づいて、私はあなたに答えるための質問を書きました。著作権を維持してください:-)
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
よろしくお願いいたします。RenanBenedictoPereira(BR MySQL DBA)
これをマスターで実行することもできます。
SELECT * FROM information_schema.PROCESSLIST AS p WHERE p.COMMAND = 'Binlog Dump';
私は大騒ぎがtbhについて何であるか本当にわかりません。 'show slave status' ISクエリ。最新のプログラミング言語からそのクエリを実行してから、使用する列名を選択するだけです。
PHPたとえば、私は次を使用します:
$row = $stmt->fetch();
print "Slave_IO_Running: " . $row['Slave_IO_Running'] . "\n";
$ rowの「showslavestatus」から結果を取得した後。