是否可以從任何系統數據庫表中獲取複製狀態。 使用我可以識別複製是否啓動或關閉。使用選擇查詢的mysql複製狀態
我需要知道系統表中的SLAVE_IO_RUNNING和SLAVE_SQL_RUNNING = YES?
瑪納斯
是否可以從任何系統數據庫表中獲取複製狀態。 使用我可以識別複製是否啓動或關閉。使用選擇查詢的mysql複製狀態
我需要知道系統表中的SLAVE_IO_RUNNING和SLAVE_SQL_RUNNING = YES?
瑪納斯
AFAIK,沒有選擇(像INFORMATION_SCHEMA)
檢查從複製狀態
show slave status;
參考 - http://dev.mysql.com/doc/refman/5.0/en/show-slave-status.html
它的基本語句是SHOW從屬狀態,你必須在每個從屬設備上執行。 參見:http://dev.mysql.com/doc/refman/5.1/en/replication-administration-status.html
在主,你可以檢查使用SHOW PROCESSLIST檢查正在運行的進程列表連接站的狀態。 對於以--report-host選項啓動且連接到主站的從站,主站上的SHOW SLAVE HOSTS語句顯示有關從站的基本信息。
我在information_schema數據庫中找到了解決方案。請檢查information_schema數據庫中的表GLOBAL_STATUS。如果它是「ON」,您將看到變量「SLAVE_RUNNING」,這意味着複製工作正常。如果它是「OFF」,那麼複製失敗是由於任何原因,你需要檢查爲什麼? :-)
瑪納斯
在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文檔中找到它。
這聽起來像你試圖以自動化的方式監視線程狀態。由於我沒有表,我打算用shell腳本和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來處理表演命令輸出併發送郵件以防在處理的任何字段中發生錯誤。在這種情況下,這些字段是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根--password = 「PWD」 -Bse 「顯示從屬狀態\ G」 | grep Last_error | awk -F:'{print $ 2}'
if [$ Slave_SQL_Running =='No'] || [$ Slave_IO_Running =='否'];
then
echo「Last Error:」$ Last_error | mail -s「slavedb上的複製錯誤!!!」 [email protected]
網絡
退出0
請描述您的解決方案 –
根據要求,請參閱上面 – ninjabber
感謝分享此。改進建議:只取得一次狀態,然後在本地執行。 此外,我建議使用「grep -i」作爲不區分大小寫的grep。在運行mysql 5.6「Last_Error」的服務器上有大寫字母E. –
這是我基於瑪納斯頂級答案使用的語句。
SELECT variable_value
FROM information_schema.global_status
WHERE variable_name='SLAVE_RUNNING';
您可以執行'SHOW SLAVE STATUS;查詢每臺從服務器並獲取結果。您也可以編寫一個腳本來定期執行查詢。
否則像我一樣,您可以使用像Monyog這樣的工具,它們的顧問將監控複製服務器並在設定的時間間隔內提供結果。它還有一個複製頁面,該頁面爲複製設置中的服務器提供更多信息,並在從站未運行時提供警報功能。
如上圖所示,有一個選擇。 –