调试mysql远程访问之心得

今日配置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';
这样,你就可以了用说的那个登陆了!



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.

这是新的问题

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值