为什么MySQL连接字符串在bash中工作而不是javascript?

时间:2016-08-22 20:42:33

标签: javascript mysql sql database connection-string

我已将物理mac计算机设置为MySQL服务器。如果我通过终端访问它,我可以很好地在互联网上访问它。 编辑:我现在意识到这只是在本地网络上。所以我现在正在设置一个静态IP,如果我遇到问题就必须发布另一个问题

但我很乐意解决为什么如果我使用javascript连接某人不起作用,例如GoogleSpreadsheets或GoogleSpreadsheets中的任何相关附加组件(我认为这也是用Javascript写的)。

我可以使用任何这些javascript方法连接到我可以访问的其他数据库,但我想知道为什么我无法连接到我的特别是如果有什么我可以换?感谢。

我在计算机A(Mac OS X Yosemite)上设置了MySQL服务器。如果我在计算机B(Mac OS El Capitan)上使用bash执行以下操作,然后从MySQL获得我需要的任何输出,我就可以正常连接。

$ # in bash, change path to ensure SQL runs 
$ export PATH=$PATH:/usr/local/mysql/bin/ 
$ # start sql and run a query
$ mysql -u test -pXXXXX -h 192.168.XXX.XX sakila # replace X's with real credentials, where -p is for the password and -h is for the IP address.
$ mysql> SHOW TABLES; 
$ mysql> #... output is good
$ mysql> exit;
$

如果我在Google Spreadsheets脚本编辑器中运行相同的凭据,我在最后一行收到错误,指出我的连接字符串,用户或密码不正确。见下面的脚本。

// attempt to access SQL data using javascript on https://script.google.com

function Drive() {
var ServerIP = '192.168.XXX.XX'; // IP address of the server. replace with real IP
var SQL_Port = '3306'; // port number
var SQL_Usr = 'test'; // name of user
var SQL_Pwd = 'xxxxx'; // password of user. replace with real password
var SQL_DB = 'sakila'; // name of sample database downloaded from MySQL Workbench documentation.

var connectorInstance = 'jdbc:mysql://' + ServerIP  +':' + SQL_Port;
var ConnectString = connectorInstance + '/' + SQL_DB;

var conn = Jdbc.getConnection(ConnectString, SQL_Usr, SQL_Pwd); // error on this line
}

我的javascript,我的语法肯定是正确的,因为如果我在另一个在线数据库的凭据中,则错误消失。同样,我尝试了4种不同的Google Spreadsheets插件,当您搜索" SQL"在附加商店;那些与我试过但不是我自己的数据库一起工作。

我自己的服务器凭据和授权应该正常工作,因为我可以使用bash连接,如上图所示。

是否在服务器或其互联网连接中的其他数据库上设置了一些安全选项,这意味着javascript将连接到他们的而不是我的?我错过了什么吗?

我的替代方案是只使用bash访问服务器(当我构建基于电子表格的前端时不好),或者在线托管服务器,这将涉及一些成本。

SSH连接是否有帮助?我以前还没用过。任何帮助将不胜感激。

我尝试过的步骤

  • 我开始使用配置文件设置MySQL Workbench为 - " etc / my.cnf"

  • 我设置"跳过网络"关闭。

  • 我确定" bind_address"因为" 0.0.0.0"," *"和"%"。

  • 我接受了关于为Google脚本设置javascript代码的课程,并在位置上授予了足够的用户帐户详细信息"%" (是的,我知道这不是安全的,但这是一个小测试数据库)。

  • 我已经尝试过使用网络或其他部分下的其他选项文件首选项,但它们要么没有效果,要么服务器无法成功重新启动应用程序。

  • 在测试我的数据库连接之前,我确保重新启动SQL服务器以确保应用选项和用户更改。

  • 我已经检查过StackOverflow,看看还有谁在询问远程数据库,javascript或连接字符串。没有人似乎有我的确切问题。

  • 我尝试过使用主机的名称" Servers-Macbook-Air.local"代替IP,再次在bash中工作但不在Javascript中。此外,如果我使用IP或主机名作为另一个数据库,那就可以了。

2 个答案:

答案 0 :(得分:0)

在哈代的评论之后我做了一些研究 - 我认为私人知识产权限制了我。我只试过Wifi系列的两款笔记本电脑。

http://www.gohacking.com/private-and-public-ip-addresses/

  

比如说,如果网络X由10台计算机组成,则每台计算机都可以获得一个从192.168.1.1到192.168.1.10的IP。与公共IP不同,专用网络的管理员可以自由分配他自己选择的IP地址(前提是IP号码属于上述私有IP地址范围)。

     

具有专用IP地址的设备无法直接连接到Internet。同样,本地网络外部的计算机无法直接连接到具有专用IP的设备。

答案 1 :(得分:0)

您的问题是您正在尝试使用本地IP地址192.168.xxx.xxx

你不能从互联网上做到这一点。事实上,该IP地址仅存在于您的网络中。你和我都可以拥有192.168.1.10的IP。大多数现成的路由器都会创建以192.168.1.1开头的网络(这可能是您可以访问防火墙的地方)。

唯一可行的方法是,如果您使用了公共IP地址,并且您正在寻找配置为指向您的计算机的端口。这通常需要一些端口转发或防火墙配置。

您可以使用http://www.ipchicken.com

等网站检查您的公共IP