繁体   English   中英

无法通过Apps脚本(JDBC)连接到本地MySQL服务器

[英]Can not connect to local MySQL server thru Apps Script (JDBC)

请参阅下面的编辑,我将离开原始问题以帮助其他人。

我试图通过Apps脚本和JDBC连接到本地MySQL服务器,但我不断收到两个错误之一。 这段代码:

function connectTest() {
  var conn = Jdbc.getConnection("jdbc:mysql://localhost", "root", "xxx");
}

给出了Failed to establish a database connection. Check connection string, username and password.的错误Failed to establish a database connection. Check connection string, username and password. Failed to establish a database connection. Check connection string, username and password.

这段代码:

function connectTest() {
  var conn = Jdbc.getConnection("jdbc:mysql://localhost:3306", "xxx", "pass");
}

给出了Invalid argument: url的错误Invalid argument: url

我已经尝试了几十种组合,无法让它发挥作用。 从Apps Scripts登录的尝试没有显示在MySQL的访问日志中(即如果我尝试使用错误信息在本地登录,我看到[Note] Access denied for user 'host'@'localhost' (using password: YES) 。我已授予root相应的访问权限:

mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for root@%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

我是否必须做其他事情才能将本地数据库暴露给互联网/ Google Apps脚本?

编辑:

我现在能够从MySQL日志中获取访问被拒绝的注释(例如, Access denied for user 'root'@'12.123.12.123' (using password: YES) ),但应用仍然无法连接。 我尝试使用我的公共IP添加bind-address ,但MySQL无法启动,我得到( [ERROR] Can't start server: Bind on TCP/IP port: Can't assign requested address

function connectTest() {
  var conn = Jdbc.getConnection("jdbc:mysql://12.123.12.123:3306", "root", "xxx");
}

EDIT2:我更改了bind-address = 0.0.0.0,这确实允许我在DB日志中被拒绝访问错误,但仍然没有运气连接。 我已经成功连接到互联网上的其他开放MySQL数据库(例如ensembldb.ensembl.org:3306),但我仍然无法连接到我的本地数据库。

终于明白了,这是我如何让它工作:

  1. 编辑my.cnf(这个文件可以位于几个不同的地方,甚至可能不存在,我把我的/usr/local/etc/

     [mysqld] bind-address=0.0.0.0 skip-host-cache skip-name-resolve 
  2. 打开端口3306到互联网(对于Xfinity,这意味着转到http://10.0.0.1/ >点击左侧的“高级”>“端口转发”>“添加设备”在底部,找到运行的设备MySQL和点击添加) 开放的港口

  3. 在MySQL和FLUSH PRIVILEGES;授予适当的权限FLUSH PRIVILEGES; 您可以使用GRANT ALL PRIVILEGES ON *.* TO <USER>@'%' IDENTIFIED BY '<PASSWORD>' ,但允许任何IP,下面的Python脚本将授予Google IP。 您应该根据Google的JDBC文档查看此IP列表。

     from sqlalchemy import create_engine, MetaData conString = 'mysql+pymysql://<USER>:<PASSWORD>@localhost:3306/<DB>' mysql = create_engine(conString) ips = ['64.18.0.0 - 64.18.15.255', '64.233.160.0 - 64.233.191.255', '66.102.0.0 - 66.102.15.255', '66.249.80.0 - 66.249.95.255', '72.14.192.0 - 72.14.255.255', '74.125.0.0 - 74.125.255.255', '173.194.0.0 - 173.194.255.255', '207.126.144.0 - 207.126.159.255', '209.85.128.0 - 209.85.255.255', '216.239.32.0 - 216.239.63.255'] for ip in ips: ip2 = ip.replace(' - ', '/') try: sql = "CREATE USER '<USER>'@'" + ip2 + "' identified by '<PASSWORD>';" mysql.execute(sql) except: print ip2 sql = "GRANT ALL PRIVILEGES ON <DB>.* TO '<USER>'@'" + ip2 + "';" mysql.execute(sql) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM