今天在虚拟机Ubuntu上折腾了一晚上mysql,然后试着用java连接,搞了很久都没成功,但是同学配好的Debian上却连接成功了,也就是说我的配置有问题。

折腾了很久,最后还是通过理解异常信息来大致猜测。

远程连接是输入mysql所在主机的IP和端口来确定主机的逻辑地址,再通过用户和密码来确定登录哪个用户。比如

String url = "jdbc:mysql://192.168.183.134:3306/mysql";

就是先在网络层连上IP为192.168.183.134的主机,再去连接这台主机的具体端口3306(传输层),然后传输层达成连接后,在应用层用账号密码登陆,访问mysql数据库

Connection conn = DriverManager.getConnection(url, user, password);

一开始我怀疑是否端口设置问题,然后在/etc/mysql/my.cnf上加上了port=3306,结果还是连不上,显示端口拒绝访问。

然后用命令$netstat -apn 找到端口3306的一条信息

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

仔细一看,这里提供的IP是127.0.0.1,结合socket编程的经验,一般要接收任意主机发送的消息时,IP会设置为0.0.0.0,而127.0.0.1(回送地址)是否意味着只能本地访问?然后打开同学的Debian查看他的mysql占用端口时,果然如我所想

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

经过一番搜索后,得出结论是mysql默认只提供给本地访问,而要开启远程访问功能需要额外设置。从安全的角度看这也是合理的。

设置方法还是修改配置文件/etc/mysql/my.cnf

[client]
default
-character-set=utf8

[mysqld]
default
-storage-engine=INNODB
character
-set-server=utf8
collation
-server=utf8_general_ci
port
=3306
bind
-address=0.0.0.0

utf8相关的是之前本地录入汉字数据时发现插入失败,汉子和VARCHAR不兼容,在mysql模式下输入STATUS查看的状态时

Server characterset: latin1
Db characterset:latin1
Client characterset:utf8
Conn. characterset:utf8

经过这个修改后,前2个字符集就全变成了utf8,支持中文。其他的修改就如同我所说的,绑定IP为0.0.0.0,即接收任意地址的主机的连接,端口绑定3306。

但是依然不能访问,只不过错误信息发生了改变,这次很明确了,是显示用户没有连接权限,也就是说用户只能本地连接,依然搜索资料后得出解决方案如下

1. 新建用户远程连接mysql数据库
mysql> grant all on *.* to team@'%' identified by 'java123' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
2. 支持root用户允许远程连接mysql数据库
mysql> grant all on *.* to 'root'@'%' identified by 'cplusplus' with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

参考博客 http://www.cnblogs.com/linjiqin/p/5270938.html

其实该博客也解决了我之前的问题。

更多相关文章

  1. 解决Linux主机上的 远程MySQL客户端无法连接的问题
  2. PHPMyWind教程:如何把本地测试好的程序发布到虚拟主机
  3. 如何将window.location设置为特定路径(没有主机)?
  4. 如何访问远程节点。浏览器中的js应用程序,而不是本地主机
  5. Python学习之——Tcp/ip基础/IP地址/DNS/端口简介
  6. python打印系统所有tcp,udp监听端口及服务
  7. 使用Python编写简单的端口扫描器的实例分享【转】
  8. linux centos 宝塔主机控制面板安装和安全狗安装过程记录
  9. linux socket 程序被ctrl+c或者异常终止,再次起程序时提示该端口

随机推荐

  1. 如何让我的固定宽度移动网站始终显示“完
  2. HTML5用户身份认证源代码:注册、登录、会
  3. Eclipse中以html格式高亮显示velocity文
  4. ExtJS的使用方法汇总(4)——拖放以及弹出
  5. HTML5晃动DeviceMotionEvent事件
  6. CSS3列 - 添加第二个元素后的额外宽度
  7. html里的px是什么
  8. 在京东上6-24日购买6台笔记本7天无理由
  9. HTML语言基础之——掌握HTML的写法(2)
  10. html5 的 canvas 想写个小项目 画板