我在google apps脚本中使用jdbc连接器连接到任何mysql数据库时遇到问题,我正在使用教程代码:
var conn = Jdbc.getConnection("jdbc:mysql://host(or ip):3306/database", "username", "password");
但是在每种情况下(我在4个不同的主机名上测试了4个不同的数据库)我得到了同样的错误:
无法建立数据库连接。检查连接字符串,用户名和密码。 (第2行)
我正在寻求帮助,我不知道可能是什么问题; - (
PS。用户名/密码没问题。 PPS。在每个数据库中,远程访问都在工作(我已经使用telnet进行了测试)。
答案 0 :(得分:1)
由于你的问题是对MySQL数据库的远程访问,我将发布一些相关的文档,以便像TonyMiao这样的未来观众将有一个解决自己相关问题的途径。
首先,通过ssh登录到远程MySQL数据库服务器。您可能需要以root用户身份登录MySQL服务器:
ssh user@server1.cyberciti.biz
su
sudo -i
如果允许,则以root用户身份直接登录:
ssh root@server1.cyberciti.biz
连接后,您需要使用文本编辑器编辑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
[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
....
..
....
其中,
如果您使用的是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
连接到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';
键入exit命令以注销mysql:
mysql> exit
您需要使用iptables或BSD pf防火墙打开TCP端口3306。
/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
使用以下命令在基于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
在远程系统或桌面上键入以下命令:
$ 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!