2

私はmysqlストアドプロシージャにかなり慣れていないので、プロシージャ内からSHOWSLAVESTATUSの結果にアクセスできる必要があります。ウェブを検索しましたが、見つからないようです。これは私が試しているようなものです:

    CREATE PROCEDURE test()
BEGIN
 DECLARE a VARCHAR(1000);
 DECLARE cur1 CURSOR FOR SHOW SLAVE STATUS;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

 OPEN cur1;

 read_loop: LOOP
  FETCH cur1 INTO a;
  IF done THEN
   LEAVE read_loop;
  END IF;
 END LOOP;

 SELECT a;

 CLOSE cur1;
END;

これは次の場合に失敗します。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SHOW SLAVE STATUS;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

これを行う別の方法がある場合(返される行が1つしかないため、カーソルを使用しない場合もあります)、それはすばらしいことです。

4

1 に答える 1

2

他の誰かがこの問題を抱えている場合に備えて。

私はそれを回避する汚い方法を見つけました。必要な情報がすべて得られたわけではありませんが、それは始まりです。

information_schema.processlist(またはSHOW PROCESSLIST) には、ストアド プロシージャで使用できるスレーブ プロセスがあります。

+-----+-------------+---------------------+---------+---------+-------+-----------------------------------------------------------------------+------------------+
| Id  | User        | Host                | db      | Command | Time  | State                                                                 | Info             |
+-----+-------------+---------------------+---------+---------+-------+-----------------------------------------------------------------------+------------------+
|   1 | system user |                     | NULL    | Connect | 75212 | Waiting for master to send event                                      | NULL             |
|   2 | system user |                     | NULL    | Connect |  2158 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
+-----+-------------+---------------------+---------+---------+-------+-----------------------------------------------------------------------+------------------+
于 2012-06-14T11:37:29.290 に答える