2009-10-15 25 views
5

Chciałbym mieć dostęp do pola Seconds_Behind_Master (zwracanego przez SHOW SLAVE STATUS) z wewnątrz procedury przechowywanej.Jak uzyskać dostęp do Seconds_Behind_Master z SQL

Nie mogę dowiedzieć się, jak uzyskać jego wartość wewnątrz zmiennej. Żadna ze zwykłych składni SET/SELECT nie działa.

Czy jest jakiś sposób na zrobienie tego?

Odpowiedz

2

Dla przypomnienia: okazało się, że można otworzyć kursor dla instrukcji POKAŻ. Pozwala to na analizowanie danych wyjściowych i pracę z nimi w ramach procedury przechowywanej.

+0

Azerole, czy masz przykładowy kod przez przypadek? Nie mogę tego zmusić do działania. – Artem

+0

Tak, ale tylko 5.0. W wersji 5.1 w mysql występuje nieusunięty błąd, który uniemożliwia otwarcie kursorów w SHOW. – azerole

+0

@azerole Czy mógłbyś opublikować funkcję, nawet jeśli jest ograniczona do 5.0? –

2

Z tego, co widzę w ostatnich dokumentach i MySQL Bug#37187, wynika, że ​​nie ma innego sposobu niż uzyskanie dostępu do tych informacji.

+0

Problem polega na tym, że STATUS POKAŻ SLAVE może być używany z zewnątrz (np. Ze skryptu perla), ale jak mogę go sparsować z procedury przechowywanej? – azerole

0

PHP może pobrać wszystkie pola w show slave status do HashMap, tak:

$db = new pdo(
    "mysql:host=your_database_hostname;dbname=your_database_name", 
    'your_username', 'your_password'); 

$sql = 'show slave status'; 

$query = $db->query($sql); 
$res = $query->fetchall(); 

foreach($res as $item){ 
    print ">" . $item["Seconds_Behind_Master"]; 
} 

która drukuje 0 sekund, bo wszystko jest aktualne:

>0 

Próbowałem na godzinę utworzyć procedurę składowaną, aby to zrobić. Polecam, żebyś nie tracił czasu.

Powiązane problemy