关于连接 VirtualBox NAT 下的 MySQL 服务
2012-07-01 10:21
344 查看
这两天尝试外部连接 VirtualBox 中 CentOS 的 MySQL 服务器,可谓历尽一番辛苦。
最开始用的是 Java 的 mysql 驱动连接,无奈连接不上。然后下载 SQLyog 的 Community 版进行连接,依然难以通过。
于是开始此次的辛苦旅程。
1 首先想到的 MySQL 服务本身设置的问题。
问题何在呢,端口 or IP?检查尝试设置之后,无论是port forwarding 还是 bind-address,问题依旧。
之后尝试修改MySQL的用户访问控制。
继续测试:
2 防火墙
先检查 Host 上的防火墙,关闭之后测试结果:问题依旧。
检查 CentOS 的 iptables 设置。
测试一下:
历尽艰辛,终于见到曙光了。
进一步修改下 MySQL 的用户访问控制,仅允许 guest 所在的 IP地址段访问。因为 IP Forwarding 的设置,已经可以通过外部地址访问 VirtualBox 中的 MySQL 服务了。
GRANT ALL ON *.* TO root@'10.0.2.%' IDENTIFIED BY 'root';
最开始用的是 Java 的 mysql 驱动连接,无奈连接不上。然后下载 SQLyog 的 Community 版进行连接,依然难以通过。
于是开始此次的辛苦旅程。
1 首先想到的 MySQL 服务本身设置的问题。
问题何在呢,端口 or IP?检查尝试设置之后,无论是port forwarding 还是 bind-address,问题依旧。
之后尝试修改MySQL的用户访问控制。
GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'root';
继续测试:
mysql: [echo] running [java] ...... [java] Error [java] com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: [java] [java] ** BEGIN NESTED EXCEPTION ** [java] [java] com.mysql.jdbc.CommunicationsException [java] MESSAGE: Communications link failure due to underlying exception: [java] [java] ** BEGIN NESTED EXCEPTION ** [java] [java] java.io.EOFException [java] [java] STACKTRACE: [java] [java] java.io.EOFException [java] at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963) [java] at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:557) [java] at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1027) [java] at com.mysql.jdbc.Connection.createNewIO(Connection.java:2743) [java] at com.mysql.jdbc.Connection.<init>(Connection.java:1553) [java] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) [java] at java.sql.DriverManager.getConnection(DriverManager.java:620) [java] at java.sql.DriverManager.getConnection(DriverManager.java:200) [java] at org.huys.db.MySQLConnect.main(Unknown Source) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:616) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:764) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:218) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:132) [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:105) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:616) [java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) [java] at org.apache.tools.ant.Task.perform(Task.java:348) [java] at org.apache.tools.ant.Target.execute(Target.java:357) [java] at org.apache.tools.ant.Target.performTasks(Target.java:385) [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337) [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1306) [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1189) [java] at org.apache.tools.ant.Main.runBuild(Main.java:758) [java] at org.apache.tools.ant.Main.startAnt(Main.java:217) [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257) [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104) [java] [java] [java] ** END NESTED EXCEPTION ** [java] [java] [java] [java] Last packet sent to the server was 33 ms ago. [java] [java] STACKTRACE: [java] [java] com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: [java] [java] ** BEGIN NESTED EXCEPTION ** [java] [java] java.io.EOFException [java] [java] STACKTRACE: [java] [java] java.io.EOFException [java] at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963) [java] at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:557) [java] at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1027) [java] at com.mysql.jdbc.Connection.createNewIO(Connection.java:2743) [java] at com.mysql.jdbc.Connection.<init>(Connection.java:1553) [java] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) [java] at java.sql.DriverManager.getConnection(DriverManager.java:620) [java] at java.sql.DriverManager.getConnection(DriverManager.java:200) [java] at org.huys.db.MySQLConnect.main(Unknown Source) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:616) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:764) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:218) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:132) [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:105) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:616) [java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) [java] at org.apache.tools.ant.Task.perform(Task.java:348) [java] at org.apache.tools.ant.Target.execute(Target.java:357) [java] at org.apache.tools.ant.Target.performTasks(Target.java:385) [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337) [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1306) [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1189) [java] at org.apache.tools.ant.Main.runBuild(Main.java:758) [java] at org.apache.tools.ant.Main.startAnt(Main.java:217) [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257) [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104) [java] [java] [java] ** END NESTED EXCEPTION ** [java] [java] [java] [java] Last packet sent to the server was 33 ms ago. [java] at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:625) [java] at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1027) [java] at com.mysql.jdbc.Connection.createNewIO(Connection.java:2743) [java] at com.mysql.jdbc.Connection.<init>(Connection.java:1553) [java] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) [java] at java.sql.DriverManager.getConnection(DriverManager.java:620) [java] at java.sql.DriverManager.getConnection(DriverManager.java:200) [java] at org.huys.db.MySQLConnect.main(Unknown Source) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:616) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:764) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:218) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:132) [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:105) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:616) [java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) [java] at org.apache.tools.ant.Task.perform(Task.java:348) [java] at org.apache.tools.ant.Target.execute(Target.java:357) [java] at org.apache.tools.ant.Target.performTasks(Target.java:385) [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337) [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1306) [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1189) [java] at org.apache.tools.ant.Main.runBuild(Main.java:758) [java] at org.apache.tools.ant.Main.startAnt(Main.java:217) [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257) [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104) [java] [java] [java] ** END NESTED EXCEPTION ** [java] [java] [java] [java] Last packet sent to the server was 1 ms ago. [java] at com.mysql.jdbc.Connection.createNewIO(Connection.java:2814) [java] at com.mysql.jdbc.Connection.<init>(Connection.java:1553) [java] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) [java] at java.sql.DriverManager.getConnection(DriverManager.java:620) [java] at java.sql.DriverManager.getConnection(DriverManager.java:200) [java] at org.huys.db.MySQLConnect.main(Unknown Source) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:616) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:764) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:218) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:132) [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:105) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:616) [java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) [java] at org.apache.tools.ant.Task.perform(Task.java:348) [java] at org.apache.tools.ant.Target.execute(Target.java:357) [java] at org.apache.tools.ant.Target.performTasks(Target.java:385) [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337) [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1306) [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1189) [java] at org.apache.tools.ant.Main.runBuild(Main.java:758) [java] at org.apache.tools.ant.Main.startAnt(Main.java:217) [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257) [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
2 防火墙
先检查 Host 上的防火墙,关闭之后测试结果:问题依旧。
检查 CentOS 的 iptables 设置。
iptables -I RH-Firewall-1-INPUT 11 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
测试一下:
mysql: [echo] running [java] ...... [java] Connection Successful!
历尽艰辛,终于见到曙光了。
进一步修改下 MySQL 的用户访问控制,仅允许 guest 所在的 IP地址段访问。因为 IP Forwarding 的设置,已经可以通过外部地址访问 VirtualBox 中的 MySQL 服务了。
GRANT ALL ON *.* TO root@'10.0.2.%' IDENTIFIED BY 'root';
相关文章推荐
- 关于mysql不能成功建立连接10038错误与没有mysql服务
- 关于阿里云esc云服务快速配置到mysql的连接
- mysql 关于 系统服务 和 连接出错:1067
- 关于Virtualbox网络设置了解NAT模式后无法SSH连接的问题
- 在Tomcat下无法清除MySQL连接线程导致服务挂掉的解决办法
- 关于mysql-5.7.13-winx64服务无法启动的解决方法
- 关于django中mysql连接的几个问题
- 关于MySQL修改成utf8mb4编码后启动服务报错1067的解决方法
- 关于MySQL的wait_timeout连接超时问题报错解决方案
- 【记】本地远程连接VM VirtualBox中虚拟机Centos6的数据库MySQL
- 关于MySQL的wait_timeout连接超时问题报错解决方案
- Mysql安装后连接失败和服务无法启动,首次进入密码的问题
- 关于使用wse3.0客户机程序在某些机器上连接服务端奇慢的问题
- 关于linux下的nginx、php、mysql的服务启动、停止、重启命令
- 关于用PHP连接Mysql后添加数据,中文变成问号的解决方案
- 关于MySQL的外部连接授权配置
- 关于jdbc连接mysql的问题bug
- 关于java连接mysql出现中文乱码的问题
- 计算机中有两个MySQL服务导致项目连接数据库报错
- 关于Eclispse连接Mysql的Jdbc