2011-08-10 42 views
10

是否可以從任何系統數據庫表中獲取複製狀態。 使用我可以識別複製是否啓動或關閉。使用選擇查詢的mysql複製狀態

我需要知道系統表中的SLAVE_IO_RUNNING和SLAVE_SQL_RUNNING = YES?

瑪納斯

回答

1

它的基本語句是SHOW從屬狀態,你必須在每個從屬設備上執行。 參見:http://dev.mysql.com/doc/refman/5.1/en/replication-administration-status.html

在主,你可以檢查使用SHOW PROCESSLIST檢查正在運行的進程列表連接站的狀態。 對於以--report-host選項啓動且連接到主站的從站,主站上的SHOW SLAVE HOSTS語句顯示有關從站的基本信息。

3

我在information_schema數據庫中找到了解決方案。請檢查information_schema數據庫中的表GLOBAL_STATUS。如果它是「ON」,您將看到變量「SLAVE_RUNNING」,這意味着複製工作正常。如果它是「OFF」,那麼複製失敗是由於任何原因,你需要檢查爲什麼? :-)

瑪納斯

1

在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_RUNNINGSLAVE_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/

1

該解決方案使用AWK來處理表演命令輸出併發送郵件以防在處理的任何字段中發生錯誤。在這種情況下,這些字段是Slave_IO_RunningSlave_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

+0

請描述您的解決方案 –

+0

根據要求,請參閱上面 – ninjabber

+0

感謝分享此。改進建議:只取得一次狀態,然後在本地執行。 此外,我建議使用「grep -i」作爲不區分大小寫的grep。在運行mysql 5.6「Last_Error」的服務器上有大寫字母E. –

10

這是我基於瑪納斯頂級答案使用的語句。

SELECT variable_value 
FROM information_schema.global_status 
WHERE variable_name='SLAVE_RUNNING'; 
0

您可以執行'SHOW SLAVE STATUS;查詢每臺從服務器並獲取結果。您也可以編寫一個腳本來定期執行查詢。

否則像我一樣,您可以使用像Monyog這樣的工具,它們的顧問將監控複製服務器並在設定的時間間隔內提供結果。它還有一個複製頁面,該頁面爲複製設置中的服務器提供更多信息,並在從站未運行時提供警報功能。