Google Apps脚本JDBC连接问题

时间:2011-04-04 09:25:18

标签: jdbc google-apps-script

我在google apps脚本中使用jdbc连接器连接到任何mysql数据库时遇到问题,我正在使用教程代码:

var conn = Jdbc.getConnection("jdbc:mysql://host(or ip):3306/database", "username", "password");

但是在每种情况下(我在4个不同的主机名上测试了4个不同的数据库)我得到了同样的错误:

  

无法建立数据库连接。检查连接字符串,用户名和密码。 (第2行)

我正在寻求帮助,我不知道可能是什么问题; - (

PS。用户名/密码没问题。 PPS。在每个数据库中,远程访问都在工作(我已经使用telnet进行了测试)。

1 个答案:

答案 0 :(得分:1)

由于你的问题是对MySQL数据库的远程访问,我将发布一些相关的文档,以便像TonyMiao这样的未来观众将有一个解决自己相关问题的途径。

步骤1:使用SSH登录(如果服务器在数据中心之外)

首先,通过ssh登录到远程MySQL数据库服务器。您可能需要以root用户身份登录MySQL服务器:

ssh user@server1.cyberciti.biz

使用su或sudo

以root身份登录
su

或使用sudo

sudo -i

如果允许,则以root用户身份直接登录:

ssh root@server1.cyberciti.biz

步骤2:编辑my.cnf文件

连接后,您需要使用文本编辑器编辑MySQL服务器配置文件my.cnf,例如vi:

如果您使用的是Debian / Ubuntu,则Linux文件位于/etc/mysql/my.cnf位置。

如果您使用的是Red Hat Linux / Fedora / Centos Linux文件位于/etc/my.cnf位置。

如果您使用的是FreeBSD,则需要创建一个文件/var/db/mysql/my.cnf位置。

修改/etc/my.cnf,运行:

# vi /etc/my.cnf

步骤3:打开文件后,找到如下所示的行

[mysqld] 
Make sure line skip-networking is commented (or remove line) and add following line

bind-address=YOUR-SERVER-IP
For example, if your MySQL server IP is 65.55.55.2 then entire block should be look like as follows:

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
language        = /usr/share/mysql/English
bind-address    = 65.55.55.2

# skip-networking
....
..
....

其中,

  • bind-address:要绑定的IP地址。
  • 跳过网络:根本不听TCP / IP连接。所有 必须通过Unix套接字与mysqld进行交互。这个选项是 强烈建议仅允许本地请求的系统。 由于您需要允许远程连接,因此应删除此行 来自my.cnf或将其置于评论状态。

步骤#4保存并关闭文件

如果您使用的是Debian / Ubuntu Linux,请键入以下命令以重新启动mysql服务器:

# /etc/init.d/mysql restart

OR

# systemctl restart mysql

如果您使用的是RHEL / CentOS / Fedora / Scientific Linux,请键入以下命令以重新启动mysql服务器:

# /etc/init.d/mysqld restart

OR

# systemctl restart mysqld

如果您使用的是FreeBSD,请输入以下命令重新启动mysql服务器:

# /usr/local/etc/rc.d/mysql-server restart

OR

# service mysql-server restart

步骤#5授予对远程IP地址的访问权限

连接到mysql服务器:

$ mysql -u root -p mysql

授予新数据库访问权限

如果要为用户栏和远程IP 202.54.10.20添加名为foo的新数据库,则需要在mysql>处键入以下命令:提示:

mysql> CREATE DATABASE foo;
mysql> GRANT ALL ON foo.* TO bar@'202.54.10.20' IDENTIFIED BY 'PASSWORD';

我如何获得现有数据库的访问权?

让我们假设您始终从名为202.54.10.20的远程IP连接到用户webadmin的名为webdb的数据库,要授予对此IP地址的访问权限,请键入以下命令:mysql>提示现有数据库,输入:

mysql> update db set Host='202.54.10.20' where Db='webdb';
mysql> update user set Host='202.54.10.20' where user='webadmin';

步骤#6:退出MySQL

键入exit命令以注销mysql:

mysql> exit

步骤#7:打开端口3306

您需要使用iptables或BSD pf防火墙打开TCP端口3306。

打开LINUX IPTABLES防火墙的示例IPTABLES规则

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

OR仅允许从位于10.5.1.3的Web服务器进行远程连接:

/sbin/iptables -A INPUT -i eth0 -s 10.5.1.3 -p tcp --destination-port 3306 -j ACCEPT

OR仅允许从lan子网192.168.1.0/24进行远程连接:

/sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --destination-port 3306 -j ACCEPT

最后保存所有规则(RHEL / CentOS特定命令):

# service iptables save

一个样本FREEBSD / OPENBSD / NETBSD PF防火墙规则(/ETC/PF.CONF)

使用以下命令在基于BSD的系统上打开端口#3306:

pass in on $ext_if proto tcp from any to any port 3306

或仅允许从位于10.5.1.3的Web服务器访问:

pass in on $ext_if proto tcp from 10.5.1.3 to any port 3306  flags S/SA synproxy state

步骤#8:测试

在远程系统或桌面上键入以下命令:

$ mysql -u webadmin -h 65.55.55.2 -p

其中,

-u webadmin:webadmin是MySQL用户名 -h IP或主机名:65.55.55.2是MySQL服务器IP地址或主机名(FQDN) -p:提示输入密码 您还可以使用telnet或nc命令连接到端口3306以进行测试:

$ echo X | telnet -e X 65.55.55.2 3306

OR

$ nc -z -w1 65.55.55.2 3306

示例输出:

Connection to 65.55.55.2 3306 port [tcp/mysql] succeeded!

资源信息:Click Here!