今天在虚拟机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=
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

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

远程连接Linux虚拟机上的mysql失败的解决方法的更多相关文章

  1. 如何在本地远程连接linux虚拟机上面的mysql

    基础环境: 在linux安装mysql 检查远程的虚拟机是否可以ping通过 查看虚拟机IP为192.168.38.128 cmd窗口ping 192.168.38.128,出现如下界面说明是可以的 ...

  2. 通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法

    在用本地的navicat连接服务器的mysql数据库时候出现下面的问题: 解决的方法: 解决方法: 1.改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhos ...

  3. 【转】通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法

    错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用 ...

  4. 通过Navicat for MySQL远程连接的时候报错mysql 1130 的解决方法

    用Navicat连接远程MYSQL,提示如下错误,我以为是自己的防火墙问题,但是关了,依然不行. ERROR 1130: Host '192.168.1.3' is not allowed to co ...

  5. 远程连接linux服务上的mysql

    如果有童鞋linux上还未安装mysql数据库可以参考我上一篇博客 (1)首先确保 linux服务上的 mysql 的3306端口是对外开放的 编辑 vi /etc/sysconfig/iptable ...

  6. 远程连接windows2003桌面无法使用剪切板的有效解决方法

    远程桌面控制服务器时,无法剪切.粘贴一些东西,上网搜了一下,原来是rdpclip.exe(remote desktop clipboard)不起作用了.此程序负责管理本地机与远程服务器之间共享剪切板, ...

  7. Windows 上连接本地 Linux虚拟机上的 mysql 数据库

    查看本机ip ifconfig  查看当前的 3306 端口状态 netstat -an|grep 3306 当前是外部无法连接状态 修改访问权限 默认的 mysql 是只能本机连接, 因此需要修改配 ...

  8. (转发)Navicat 远程连接 Linux服务器上的MySQL数据库

    授权法: 在安装mysql的机器上运行: 1.# ./bin/mysql -uroot -p //这样应该可以进入MySQL服务器 2.mysql> GRANT ALL PRIVILEGES O ...

  9. windows下如何正确使用Jconsole远程连接linux主机上的JVM

    https://www.aliyun.com/jiaocheng/589230.html

随机推荐

  1. LINQ 学习路程 -- 查询操作 GroupBy ToLookUp

    Grouping Operators Description GroupBy GroupBy操作返回根据一些键值进行分组,每组代表IGrouping<TKey,TElement>对象 To ...

  2. AIM Tech Round 5 (rated, Div. 1 + Div. 2)

    A. Find Square 找到对角线的两个点的坐标,这道题就迎刃而解了. inline void work(int n) { int m; cin >> m; memset(str, ...

  3. 51Nod 1070 Bash游戏 V4(斐波那契博弈)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1070 题意: 思路: 这个是斐波那契博弈,http://blog.csd ...

  4. 安全之路:Web渗透技术及实战案例解析(第2版)

    安全之路:Web渗透技术及实战案例解析(第2版)

  5. Java中的组合与聚合

    组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况 ...

  6. C++中的动态绑定

    C++中基类和派生类遵循类型兼容原则:即可用派生类的对象去初始化基类的对象,可用派生类的对象去初始化基类的引用,可用派生类对象的地址去初始化基类对象指针. C++中动态绑定条件发生需要满足2个条件: ...

  7. tenserflow models包的安装

    1.下载 models包 https://github.com/tensorflow/models 2.将models包拷贝到本机Python包的安装地址即可,本机Python包的安装地址的查看方式可 ...

  8. Linux命令详解-install

    install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户. 1.命令格式: (1)install [选项]... 来源 目的地 (2)install [选项]... 来源... 目录 ...

  9. [转]Linux下彻底卸载mysql详解

    http://www.jb51.net/article/97516.htm 一.使用以下命令查看当前安装mysql情况,查找以前是否装有mysql 1 rpm -qa|grep -i mysql 可以 ...

  10. Toncat-OpenSSL双向认证配置(iOS)

    OpenSSL生成证书 要生成证书的目录下建立几个文件和文件夹,有./demoCA/ ./demoCA/newcerts/ ./demoCA/private/ ./demoCA/index.txt ( ...