mysql inicia solicitudes de obtención y publicación a través de udf

mysql inicia una solicitud HTTP

He estado estudiando los datos de los productos de la empresa recientemente y es inevitable escribir declaraciones SQL. También encontré algunos problemas en el proceso. Sin una comprensión integral de mysql , siempre pienso que necesito escribir un programa para obtener algunos datos deseados. .

Por ejemplo: nuestros datos deben devolverse a través de URL y almacenarse en una tabla específica de la base de datos mysql . La primera reacción es escribir un programa para lograrlo, pero luego descubrimos que el tiempo de desarrollo es largo y la eficiencia del procesamiento también es lento y será difícil obtener más datos en el futuro. Es posible que los requisitos no sean completamente universales. Después de buscar información cuidadosamente, encontré udf y mysql_udf_http.

El lenguaje de desarrollo más básico para UDF es C/C++, que es mi antigua profesión. Durante el proceso de resolución del problema, descubrí que para aquellos que son nuevos en UDF y no han aprendido C/C++, el costo es demasiado alto. , el ciclo de desarrollo era largo y varias configuraciones del entorno eran engorrosas, por lo que finalmente se eligió el lenguaje Go para lograr el propósito.

El código utilizado en este artículo proviene de : github (como dice el refrán, no olvides al excavador de pozos cuando tengas problemas).
Descargue el código modificado : mysql_udf_http

Entorno de uso : Docker oficial (mysql8.0.17)

  • Configurar el entorno de marcha

    Definitivamente no hay un entorno golang en Docker , por lo que primero debemos configurar el entorno golang. En realidad, es muy simple. Los pasos se publican directamente a continuación.

	1、下载golang官方包
		wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
		
	2、解压缩
		tar -C /usr/local -zxvf go1.10.3.linux-amd64.tar.gz
		
	3、配置环境变量 **vim /etc/profile** //在末尾增加以下配置(注意路径为golang安装路径)
		export GOROOT=/usr/local/go     
		export PATH=$PATH:$GOROOT/bin
		
	4、使用以下命令来保存配置
		source /etc/profile
		
	5、验证(出现正确版本则证明安装成功)
		go version
  • Descargar código fuente

    git clone https://github.com/RebirthLee/mysql_udf_http_golang.git udf
    
  • Pasos para el uso

    • Nota : El autor del artículo original proporciona un script de shell para generar UDF con un solo clic. Si está interesado, puede consultar el enlace que aparece arriba, pero siempre siento que los métodos convenientes están escritos para otros. No funciona para mí de todos modos, así que encontré un método simple y lo compartiré con ustedes aquí.

    • 1. Introducción del archivo
      No hay mucho que explicar. Si la instalación con un solo clic mediante un script de shell no es adecuada, de hecho, solo necesita comprender el archivo http.go.

    • 2. Cosas que necesitan atención y modificación.
      Puede usar el editor vim para modificar http.go
      (1) Agregue las siguientes dos líneas de código al encabezado. La primera línea es el directorio de inclusión después de la instalación de MySQL , que debe reemplazarse. con el tuyo propio ; la segunda línea My_bool porque ni el lenguaje C ni el propio lenguaje Go tienen el tipo my_bool. Si no está definido, se informará un error. Código:
      Insertar descripción de la imagen aquí

      // #cgo CFLAGS: -I/usr/include/mysql -DMYSQL_DYNAMIC_PLUGIN
      // typedef char my_bool;
      

    (2) Originalmente pensé que la función compilada de esta manera estaría bien, pero no esperaba que a los datos obtenidos usando get siempre les faltaran algunos bytes al final . Después de investigar un poco, descubrí que la longitud de los datos cuando El retorno es realmente pequeño, unos pocos bytes, así que modifique el código de la siguiente manera ( nota : todos los cálculos de len deben modificarse ).
    Antes de la modificación: Después de la modificación
    uint64(utf8.RuneCountInString(ret))
    Insertar descripción de la imagen aquí
    :
    uint64(len(ret))
    Insertar descripción de la imagen aquí
    (3) Después de la modificación, debido a que no hay lugar para usar el paquete " unicode/utf8 ", simplemente elimínelo en la importación delante del código ; de lo contrario, se informará un error de compilación.
    (4) Compile y coloque el archivo .so generado en la carpeta de complementos del directorio de instalación de mysql para que mysql pueda encontrar con éxito el archivo correspondiente al crear udf . El código es el siguiente, donde /usr/lib/mysql es la instalación de mysql El directorio debe modificarse de acuerdo con las condiciones reales.
    go build -buildmode=c-shared -o /usr/lib/mysql/plugin/http.so http.go

Generar y usar udf

  • Crear FDU

    Http Help
    	CREATE FUNCTION http_help RETURNS STRING SONAME 'http.so';
    Http Get Method
    	CREATE FUNCTION http_get RETURNS STRING SONAME 'http.so';
    Http Post Method
    	CREATE FUNCTION http_post RETURNS STRING SONAME 'http.so';
    
  • Usar UDF

    SELECT http_get('http://example.com');
    

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_33191599/article/details/100107149
Recomendado
Clasificación