3

32 ビットの Microsoft Windows XP (Professional Version 2002 Service Pack 3) で動作する MySQL 5.6.11 を使用しています。MySQL sys_execUDF をインストールしました。私は 32 ビット Windows で実行しているので、このlib_mysqludf_sys.dllC:\Program Files\MySQL\MySQL Server 5.6\lib\plugin\を使用しました (デフォルトのインストールであるため、以下に配置されています)。

その後、次のコマンドを実行しました(作成済みのデータベースにログインした後)。

mysql> CREATE FUNCTION sys_exec RETURNS INT SONAME 'lib_mysqludf_sys.dll';
Query OK, 0 rows affected (0.02 sec)

次のように、すでに PL/SQL ストアド プロシージャを作成していました。

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `country_push`()
BEGIN 
    SET @result=sys_exec('curl http://localhost:8080/ContextPath/push-update-country'); 
END

このプロシージャは、データベース トリガーによって呼び出されることが想定されており (これは適切に行われています)、したがって、このストアド プロシージャがトリガーによって実行された場合、前述の URL で HTTP GET 要求を発生させる必要がありますが、URL で HTTP GET 要求は発生しません。とあるイベントで。


コマンド ラインで手順を手動で実行しても、次のように成功します。

mysql> CALL country_push();
Query OK, 0 rows affected (0.08 sec)

sys_exec()関数は1次のように成功フラグを返します。

mysql> SELECT sys_exec('curl http://localhost:8080/ContextPath/push-update-country')
AS result;
+--------+
| result |
+--------+
|      1 |
+--------+
1 row in set (0.06 sec)

GlassFish (4.1) アプリケーション サーバー上で実行されている Java サーブレットが既に存在し、次のようにこの HTTP GET 要求をリッスンすることになっています。

@WebServlet(name = "PushCountry", urlPatterns = {"/push-update-country"})
public class PushCountry extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("PushCountry called.");
    }
}

System.out.println("PushCountry called.");メソッド内の行はdoGet()、上記の MySQL が実行されると、サーバー端末で何も生成されません (実行/呼び出しされないため)。

MySQL を使用してこれを行うのは現実的ではありませんか、他に不足している可能性があるものはありますか、それとも古い EOL ダイナソー : Windows XP ですか?


私が使用している共有ダイナミック リンク ライブラリは適切でない可能性があります。これが私を超えている場合は、明確にしてください。


編集:

入るときは、

mysql> SELECT sys_eval('id');

MySQL は、のエラー レポートで終了またはクラッシュします。

ここに画像の説明を入力

このダイアログを閉じると、MySQL は次のエラー メッセージを残します。

エラー 2013 (HY000): クエリ中に MySQL サーバーへの接続が失われました

システム自体が再起動されるまで、または再起動されない限り、再接続に失敗します。

おそらく、後でオペレーティング システム自体を再インストールすることを考えるでしょう。

4

1 に答える 1

0

「id」はWindowsには存在しないLinuxコマンドのようです...とにかく、数字を返すがプロセスが起動されないWindowsでsys_exec()で問題が発生します。情報については、Linuxでうまく機能します。

于 2015-03-30T10:18:26.417 に答える