Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

723
Views
Google App Scripts no realizará una conexión Jdbc a MySQL en un servidor remoto

Soy nuevo en el uso de Google Scripts y estoy tratando de hacer una conexión a una base de datos MySQL (5.5.65-MariaDB) que está alojada en un servidor externo (que no es de Google) que ejecuta CentOS Linux 7.7.1908 Core.

Estoy siguiendo la guía aquí: https://developers.google.com/apps-script/guides/jdbc#other_databases

En mi script he usado la siguiente función:

 // export_sheet_data.gs function writeOneRecord() { var conn = Jdbc.getConnection('jdbc:mysql://HOST_NAME.com:3306/DB_NAME', 'DB_USER', 'DB_PASSWORD'); var stmt = conn.prepareStatement('INSERT INTO entries ' + '(guestName, content) values (?, ?)'); stmt.setString('andy', 'First Guest'); stmt.execute(); }

Obviamente, HOST_NAME , DB_NAME , DB_USER y DB_PASSWORD son cadenas (ingresadas literalmente, no variables) que corresponden a los valores apropiados: nombre de host de mi servidor externo, nombre de la base de datos, nombre de usuario de la base de datos y contraseña de la base de datos.

Cuando ejecuto esto en la consola de Scripts (Ejecutar> Ejecutar función> writeOneRecord() ) dice

Ejecutando la función writeOneRecord()

durante aproximadamente 10 segundos.

Luego falla con

Excepción: no se pudo establecer una conexión con la base de datos. Compruebe la cadena de conexión, el nombre de usuario y la contraseña.

Si hago clic en "Detalles", realmente no explica esto. Dice

Excepción: no se pudo establecer una conexión con la base de datos. Compruebe la cadena de conexión, el nombre de usuario y la contraseña. (línea 54, archivo "export_sheet_data")

He hecho lo siguiente:

  • Agregué las direcciones IP en la página web vinculada al firewall de mis servidores. Recargó el firewall para asegurarse de que está usando esta configuración.
  • Comprobé que la base de datos, DB_NAME , existe en mi servidor.
  • Comprobé que el nombre de host, HOST_NAME coincide con mi servidor. También lo probé con la dirección IP externa .
  • MySQL comprobado está usando el puerto 3306
  • Comprobado que el nombre de usuario/contraseña ( DB_USER y DB_PASSWORD ) son correctos.

No aparece nada en mi registro de firewall en el servidor al que me estoy conectando sobre esto.

Verifiqué que estoy usando Jdbc.getConnection correctamente.

¿De qué otra manera puedo depurar esto? No parece haber nada en la consola de Google Scripts que pueda ayudar.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

¿Está utilizando VPS Linux?

He tenido el mismo problema y no pude solucionarlo. Parece ser un error de la implementación de GAS JDBC con una combinación de controladores de red personalizados utilizados dentro de VPS y/o una implementación específica de MYSQL.

Para algunas combinaciones de Linux/Mysql pude conectarme a Linux Mysql, para algunas no.

El error en mi caso fue "Obtuve un error al leer el paquete de comunicación" (registros de mysql), muy difícil de rastrear el error de mysql.

Si revisa los registros de mysql en su servidor y ese es este error, creo que lo mejor que puede hacer es seguir la versión simplificada de los consejos de @TheAddonDepot: escriba un pequeño código de nodejs para ejecutar sql por usted e instálelo como servicio de Linux (escuche http en puerto personalizado )- hay muchos ejemplos para eso. Sería más fácil dedicar varias horas a esto, porque no creo que este problema se resuelva en un futuro cercano.

No lo he probado, pero algo como esto debería encajar en tu caso.

 var http = require('http'); var url = require('url'); var mysql = require('mysql'); var con = mysql.createConnection({ host: "localhost", user: "yourusername", password: "yourpassword", database: "mydb" }); con.connect(function(err) { if (err) throw err; console.log("Connected to mysql!"); }); http.createServer(function (req, res) { var q = url.parse(req.url, true).query; var result; let stmt = `INSERT INTO entries (guestName, content) values (?, ?)`; let values = [q.guestName, q.content]; console.log('Request', q); // execute the insert statment connection.query(stmt, values, (err, results, fields) => { if (err) { res.writeHead(400, {'Content-Type': 'application/json'}); console.error(err.message); result = {error:err}; } else { res.writeHead(200, {'Content-Type': 'application/json'}); console.log('Insert Id:' + results.insertId); result = {success:true, id:results.insertId}; } }); res.end(JSON.stringify(result)); }).listen(7733);

y llámalo desde GAS como

 UrlFetchApp.fetch('http://your-server-ip:7733/?guestName=' + encodeURIComponent(guestName) + '&content=' + encodeURIComponent(content));

Alternativamente, puede intentar cambiar la versión de Linux/Mysql pero es más complicado, y no estoy seguro de que la combinación de cambios funcione exactamente porque en mi caso el error fue en Debian 18.04

over 4 years ago · Santiago Trujillo Report

0

Tuve algunas dificultades para acceder a las bases de datos MySql en los sitios web y encontré que este enfoque funciona para mí.

 var address=getDBData('address');//I keep the actuall data in a spreadsheet var user=getDBData('user'); var userPwd=getDBData('pass'); var db=getDBData('db'); var dbUrl='jdbc:mysql://' + address + '/' + db; s+='<table>'; s+='<tr><th>Database Name: ' + db + '</th></tr>'; s+='<tr><th>' + qry + '</th></tr></table>'; try { var conn=Jdbc.getConnection(dbUrl, user, userPwd); }

La dirección que parece funcionar a menudo es la dirección IP de la cuenta de alojamiento.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!