2009-10-15 24 views
5

Me gustaría tener acceso al campo Seconds_Behind_Master, (como lo devuelve SHOW SLAVE STATUS) desde dentro de un procedimiento almacenado.Cómo acceder a Seconds_Behind_Master desde SQL

No puedo entender cómo obtener su valor dentro de una variable. Ninguno de la sintaxis SET/SELECT habitual parece funcionar.

¿Hay alguna manera de hacerlo?

Respuesta

2

Solo para el registro: ha resultado posible abrir un cursor para las instrucciones SHOW. Esto permite analizar la salida y trabajar con ella dentro de un procedimiento almacenado.

+0

Azerole, ¿tiene código de muestra por casualidad? Parece que no puedo hacer que funcione. – Artem

+0

Sí, pero solo es 5.0. En 5.1 hay un error no arreglado en mysql que impide abrir cursores en SHOW. – azerole

+0

@azerole ¿Podría publicar la función, aunque esté limitada a 5.0? –

2

De lo que veo en los documentos recientes y MySQL Bug#37187 no parece haber otra manera que SHOW SLAVE STATUS para obtener esta información.

+0

El problema es que SHOW SLAVE STATUS se puede utilizar desde el exterior (por ejemplo, desde un script de Perl), pero ¿cómo puedo analizarlo desde un procedimiento almacenado? – azerole

0

PHP puede agarrar todos los campos de la show slave status en un mapa hash, así:

$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"]; 
} 

que imprime 0 segundos, porque todo está al día:

>0 

He intentado durante una hora para crear un procedimiento almacenado para hacer esto. Te recomiendo que no pierdas tu tiempo.

Cuestiones relacionadas