调试mysql远程访问之心得

来源:互联网 发布:生存分析数据库 编辑:程序博客网 时间:2024/05/13 13:08

今日配置mysql远程访问遇到的一些问题

1、下午连接的时候,出现最坏情况应该是:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

这种情况表示:java程序根本就没有和服务器端的mysql连接上,连对方的服务器都进不了,更别谈访问mysql!

这种情况极有可能是因为你的服务器上3306端口没有打开

2、接着有可能出现这种情况

Host 'pc_wxl' is not allowed to connect to this MySql server

这个表示自己的电脑没有被允许连接上Mysql,虽然可能已经连接上了服务器,但是不允许访问mysql,这个时候就需要更改mysql的访问者权限

一、连接远程数据库:
1、显示密码
如:MySQL 连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456”

C:\>mysql -h 192.168.5.116 -P 3306 -u root -p123456
2、隐藏密码
如:MySQL 连接本地数据库,用户名为“root”,

C:\>mysql -h localhost -u root -p
Enter password:
二、配置mysql允许远程链接
  默认情况下,mysql帐号不允许从远程登陆,只能在localhost登录。本文提供了二种方法设置mysql可以通过远程主机进行连接。
一、改表法
  在localhost登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,将"localhost"改称"%"

例如:
  #mysql -u root -p
  Enter password:
  ……
  mysql>
  mysql>update user set host = '%' where user = 'root';

  mysql>select host, user from user;

二、授权法
  例如:你想myuser使用mypassword(密码)从任何主机连接到mysql服务器的话。

  mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

  如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码

  mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY

  'mypassword' WITH GRANT OPTION;

  mysql>FLUSH PRIVILEGES

  使修改生效,就可以了

  
 
常见问题:
1、在采用法二授权法之后,无法在本地登录mysql(如:#mysql -u root -p -h 192.168.5.116
Enter password:  
ERROR 1045 (28000): Access denied for user 'root'@'loadb116' (using password: YES)
上例中loadb116是主机名.
解决方法:
1、这时可以使用:mysql -u root -p 登录,进入到mysql后。
mysql> grant all privileges on *.* to 'root'@'loadb116'  
  identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
2、在本地使用ip地址登录
# mysql -u root -p -h 192.168.5.116
Enter password:  
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 60
Server version: 5.1.45 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


3、最后可能出现这种情况
Access denied for user 'test'@'localhost' (using password: YES)
这应该是你的用户名或者密码错误
如果是:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'today.dongjiu' doesn't exist
说明要查找的表不存在!


4、在本机上搭了apache服务器,
浏览器中用localhost和127.0.0.1可以访问该mysql服务器,但是用ip就是不能访问
原因:
默认的授权仅给了 userid@localhost,以ROOT进去然后授权给 userid@% 试试看。

@localhost是给本地服务器用的,MYSQL服务器的安装及其。
@%是给他人使用的,是指其他机器,比如客户机。
再MYSQL.USER这个表中存储着用户,你用user@192.168.1.1(假设192.168.1.1是你的服务器IP,也就是localhost),
再你想象的状态下,你感觉应该能登陆成功,
但是这是个假象,MYSQL是严格按照自己的规则来查找登陆的用户的,将请求登陆的用户和用户的地址,也就是你说的“localhost能连上,但是写我本地的ip就不行了”这个组合到USER表中去查找,不好意思,MYSQL没有找到,因为你的USER表里真的没有user@192.168.1.1这个用户的信息。但是有user@localhost这个。
所以你登陆不上。
如果一定要用user@192.168.1.1(假设192.168.1.1是你的服务器IP,也就是localhost)登陆的话,
请创建一个新用户----进入MYSQL这个数据库:use mysql;然后,创建用户:create user 'user_name'@'192.168.1.1'.
接着,给这个用户分配权限----grant all on *.* to 'user_name'@'192.168.1.1';
这样,你就可以了用说的那个登陆了!


http://dev.mysql.com/doc/refman/5.1/zh/index.html

5、在本机上的apache和mysql权限都设好了,而且也都能访问了,开始调试云主机上的相关配置。
发现配置和本机上的配置一样的,而且我还新建了一个用户test,专门用于外部主机的访问,但是万事俱备只欠东风,还是不行。
无奈之下,联系了盛大云的客服,得知,的确要打开3306的mysql远程访问接口,于是,在安全组中,自定义打开了Mysql3306,ok,差不多就可以了!

看来以后再服务器方面,当你觉得软件都配置的差不多了,但还是无法访问的话,不妨查看一下自己的服务器相应端口是否已经打开,因为买来的服务器默认都是关闭的,只要你用到哪一个,都需要去手动打开,就像上回一样,我的apache好了,但是80端口没开,害得我即是调防火墙又是调.conf文件的。


com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 117 milliseconds ago.  The last packet sent successfully to the server was 21 milliseconds ago.

这是新的问题

    

原创粉丝点击