あまりお勧めできませんが、
私はそれがパフォーマンス、速度などの問題であることを知っていますが、それは統合のためのものであり、彼らはmysqlを介してのみ更新を行っています彼らは何も変更したくないので、大量の販売を行います)。
URLに投稿するだけです( http://www.google.com?id=skuid と同じくらい簡単です)
私はこのブログとスタックを読んでいますが、2歳以上なので、udfを使用する代替手段があるかどうか知りたいです:
http://open-bi.blogspot.pe/2012/11/call-restful-web-services-from-mysql.html
http://www.mooreds.com/wordpress/archives/1497
すべてに感謝します!!
外部アクションをトリガーするには、UDFを使用する必要があります。これはmysql
が「外の世界」に何かを伝える唯一の方法です。 唯一の選択肢 は、DBを継続的にポーリングする外部エージェントです-これは劣ったソリューションです。
UDFの選択に関しては、
curl
を生成するだけの価値があります。思い浮かぶ方法:
touch
エージェントが監視するファイル。既存の _sys_exec
_ があり、system()
を使用します(すべての考慮事項があります)。_sys_exec
_のソース が示すように、UDFを書くことはそれほど難しくないので、すでに利用可能なものに本当に制限されていません(これは_lib_mysqludf_sys
_が制限されている理由を説明するかもしれません:より良いものが必要な場合は、タスク固有の関数を書くのは簡単です。現在のドキュメントは 26.4.2新しいユーザー定義関数の追加-MySQL 5.7リファレンスマニュアル にあります。
トリガーから「sys_exec」コマンドを使用して外部スクリプトを実行できます。秘trickは、そのスクリプトを非ブロック方式で記述することです。これにより、非同期で作業を行うバックグラウンドプロセスが生成され、メインプロセスがすぐに終了します。
たとえば、次のようなものです:
#!/bin/sh
Nohup curl(or wget) http://www.example.com ...other_post_parameters... &
ただし、同時に多くのプロセスを作成しないように注意する必要があります。これは、トリガー(たとえば、最後の実行時間を何らかのテーブルに書き込んでから、ある程度の時間が経過したかどうかを確認する)、またはシェルスクリプト(実行中のプロセスを示すフラグファイルを作成/削除できます)で実行できます)。
これは、Windowsプラットフォーム上のMySQLサーバー5.6 64ビット(!)のソリューションです。 Win10 64ビットでテストしました。シェルでコマンドを実行するための機能を提供する64ビットの.dllバージョンのプラグインが必要でした。この機能はここで見つけました: http://winadmin.blogspot.nl/2011/06/mysql-sysexec -udf-for-64-bit-windows.html
Windowsで自分でコンパイルすることもできます: http://rpbouman.blogspot.nl/2007/09/creating-mysql-udfs-with-Microsoft.html
MySQL 5.1+の場合、プラグイン/ dllをMySQLインストールルートのサブディレクトリに配置する必要があります。たとえば、C:\wamp\bin\mysql\mysql5.6.17\lib\plugin
または、エラーが発生します。
共有ライブラリdllを開けません–エラーコード193
curl.exe
によって呼び出されるsys_eval
も必要です。ここで正しいものをダウンロードする必要があります(両方の(!)ファイル.exeと.crtをPATH環境変数から到達可能なパスにコピーしてください)、私はc:\windows\system32
を使用しました: https:/ /winampplugins.co.uk/curl/
必要なコードは次のとおりです。
--one time setup. run inside your database
CREATE FUNCTION sys_eval RETURNS STRING SONAME ‘lib_mysqludf_sys.dll’;
--example call to an URL
select CONVERT(sys_eval(CONCAT(‘curl https://randomuser.me/api?results=1‘)) USING UTF8MB4);