gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:45:35 24 4
gpt4 key购买 nike

请查看下面的修改,我将保留原始问题以帮助其他人。

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

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

给出错误无法建立数据库连接。检查连接字符串、用户名和密码。

这段代码:

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

给出无效参数:url的错误。

我已经尝试了数十种组合,但无法正常工作。从 Apps 脚本登录的尝试不会显示在 MySQL 的访问日志中(即,如果我尝试使用错误的信息在本地登录,我会看到 [Note] Access denied for user 'host'@'localhost' (使用密码: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)),但是应用程序仍然无法连接。我尝试将 bind-address 添加到我的公共(public) IP,但 MySQL 无法启动,我得到 ([ERROR] 无法启动服务器:在 TCP/IP 端口上绑定(bind):无法分配请求的地址)

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

EDIT2:我更改了 bind-address=0.0.0.0,这确实允许我在数据库日志中遇到拒绝访问错误,但仍然无法连接。我已经成功连接到互联网上其他开放的 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 的设备然后点击添加) open port

  3. 在 MySQL 和 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)

关于mysql - 无法通过 Apps 脚本 (JDBC) 连接到本地 MySQL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43965348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com