web-dev-qa-db-fra.com

Appeler une URL depuis un trigger dans mysql

Je sais que c'est hautement non recommandé,

Je sais que c'est un problème de performances, de vitesse, etc., mais c'est une intégration, et ils ne font leurs mises à jour que via mysql (je sais que c'est dingue de le faire aussi mais je ne peux pas changer ce qu'ils font, et ils font une tonne de ventes alors ils ne veulent rien changer).

Je n'ai besoin que de poster sur une URL (cela peut être aussi simple que http://www.google.com?id=skuid )

J'ai lu ces blogs et piles, mais ils ont plus de 2 ans, aimerais savoir s'il existe des alternatives à l'utilisation d'un fichier udf:

http://open-bi.blogspot.pe/2012/11/call-restful-web-services-from-mysql.html

http://www.mooreds.com/wordpress/archives/1497

Appeler un fichier php en utilisant mysql trigger

Merci beaucoup pour tout!!

13
Saikios

Vous pouvez exécuter un script externe via la commande "sys_exec" à partir de votre déclencheur. L'astuce consiste à écrire ce script de manière non bloquante afin qu'il génère un processus d'arrière-plan qui effectue le travail de manière asynchrone et que le processus principal se termine immédiatement.

Par exemple, quelque chose comme ceci:

#!/bin/sh
Nohup curl(or wget) http://www.example.com ...other_post_parameters... &

Vous devez cependant vous assurer que vous ne créez pas trop de processus simultanés. Cela peut être fait dans le déclencheur (par exemple, il peut écrire la dernière heure d’exécution dans une table, puis vérifier si un certain laps de temps s’est écoulé), ou dans un script Shell (il peut créer/supprimer un fichier indicateur qui indiquerait l’exécution ).

1
amaksr

Voici une solution pour un serveur MySQL 5.6 64bit (!) Sur la plate-forme Windows. Je l’ai testé sous Win10 64bit . Il me fallait une version 64 bits .dll d’un plug-in qui vous donne les fonctionnalités nécessaires pour exécuter une commande dans un shell, fonction que j’ai trouvée ici: http: // winadmin. blogspot.nl/2011/06/mysql-sysexec-udf-for-64-bit-windows.html

Vous pouvez également le compiler vous-même sous Windows à l'adresse suivante: http://rpbouman.blogspot.nl/2007/09/creating-mysql-udfs-with-Microsoft.html

Pour MySQL 5.1+, vous devez placer le plugin/dll dans un sous-répertoire de la racine de votre installation MySQL, par exemple C:\wamp\bin\mysql\mysql5.6.17\lib\plugin Sinon, vous obtenez une erreur: 

Impossible d'ouvrir les dll de bibliothèques partagées - errorcode 193

Vous avez également besoin de curl.exe qui est appelé par sys_eval. Vous devez télécharger le fichier correct ici (assurez-vous de copier les deux fichiers (!) .Exe et .crt dans un chemin accessible depuis votre variable PATH, j'ai utilisé c:\windows\system32: https: // winampplugins. co.uk/curl/

Alors, seul le code dont vous avez besoin est:

--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);
1
Jan