今日配置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.
这是新的问题