Bienvenidos sean a este post, hoy hablaremos sobre las funciones que permiten ejecutar instrucciones en servidores remotos mediante SPIDER.
Para poder ejecutar instrucciones SQL arbitrarias en los servidores remotos se puede utilizar a las UDF (Funciones Definidas por el Usuario por sus siglas en ingles), algunas de las cuales son instaladas por el motor, y a diferencia de las tablas CONNECT la opcion SRCDEF si puede devolver un conjunto de resultados, pasemos a ver una de estas.
La funcion spider_direct_sql() nos permite ejecutar instrucciones SQL en servidores remotos tanto de mariadb como de mysql, los resultados del query son almacenados en una tabla temporal que necesita ser creada explicitamente antes de ejecutar la funcion, comencemos con el siguiente ejemplo:
MariaDB [test]> CREATE TEMPORARY TABLE output (
-> v VARCHAR(255)
-> ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.21 sec)
MariaDB [test]>
Como dijimos antes de ejecutar la funcion debemos crear una tabla temporal para almacenar el resultado devuelto por la ejecucion de la funcion, ahora vamos a utilizar a la funcion:
MariaDB [test]> SELECT spider_direct_sql(
-> 'SELECT VERSION() AS v',
-> 'output',
-> 'user "user1", password "pwd", host "remote_server", port "3306"'
-> ) AS v;
+---+
| v |
+---+
| 1 |
+---+
1 row in set (0.06 sec)
MariaDB [test]>
En este caso usamos SELECT para llamar a la funcion en si y luego pasaremos tres parametros para esta:
- El primer parametro es la instruccion SQL que vamos a ejecutar
- El segundo va a ser la tabla temporal que creamos en primer lugar
- El tercero es para pasar los datos de conexion al servidor remoto
Como pueden ver nos devolvio una tabla con un valor para indicar que se agrego a la tabla un valor, ahora vamos a verificar que valor se almaceno en la tabla temporal:
MariaDB [test]> SELECT * FROM output;
+---------------------+
| v |
+---------------------+
| 10.0.11-MariaDB-log |
+---------------------+
1 row in set (0.01 sec)
MariaDB [test]>
Con esto pudimos obtener un resultado desde un servidor remoto sin necesidad de tener que conectarnos al mismo, pasemos a ver otra funcion muy similar a esta, lo malo de esta funcion cuando es llamada retiene la conexion actual hasta que se completa la ejecucion del query remoto y su resultado es almacenado en la tabla temporal, sin embargo bajo algunas circunstancias debemos ejecutar un query que llevara mucho tiempo y no podemos esperar hasta que se termine el mismo, para estos casos tenemos la funcion spider_bg_direct_sql() que nos permite ejecutar el query pero de fondo sin retener la conexion, su forma de trabajo es similar a la funcion spider_direct_sql().
En resumen, hoy hemos visto como ejecutar instrucciones en servidores remotos, por medio de la funcion spider_direct_sql(), un ejemplo para verlo en accion y la funcion spider_bg_direct_sql() que nos ayudara para evitar bloquear la conexion actual, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
