Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444038
  • 博文数量: 35
  • 博客积分: 747
  • 博客等级: 上士
  • 技术积分: 870
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-05 00:04
个人简介

执酒对饮桃花翩,醉踏歌剑挽流年。

文章分类

全部博文(35)

文章存档

2015年(1)

2014年(4)

2013年(2)

2012年(15)

2011年(13)

分类: Mysql/postgreSQL

2011-11-27 23:47:12

今天做数据库实验,使用 DBCP 数据库连接池连接 MySQL(Ver 14.14 Distrib 5.5.18)。测试代码很简单:


// ConnectingToMySQL.java

  1. import java.sql.*;
  2. import org.apache.commons.dbcp.BasicDataSource;

  3. public class ConnectingToMySQL {
  4.     public static void main(String[] args) {
  5.         BasicDataSource bds = new BasicDataSource();
  6.         bds.setDriverClassName("com.mysql.jdbc.Driver");
  7.         bds.setUrl("jdbc:mysql://localhost:3306/test");
  8.         bds.setUsername("root");
  9.         bds.setPassword("");
  10.         try {
  11.             System.out.println("Trying to connect!!");
  12.             Connection con = bds.getConnection();
  13.             System.out.println("Connected sucessfully !!");
  14.             con.close();
  15.         } catch (SQLException s) {
  16.             System.out.println("SQL code does not execute.");
  17.         }
  18.     }
  19. }

  1. commons-collections-3.2.1.jar,
  2. commons-dbcp-1.4.jar,
  3. commons-pool-1.5.6.jar,
  4. mysql-connector-java-5.1.18-bin.jar
几个文件复制到 /usr/lib/jvm/java-6-openjdk/jre/lib/ext/ 中。
编译代码:
  1. $ javac ConnectingToMySQL.java
运行程序:
  1. $ java ConnectingToMySQL
结果如下:

竟然是执行失败!
确认 mysql 服务已经运行,再查看端口,发现居然没有程序监听 3306 端口!
在 mysql 提示符下运行
  1. mysql> show variables like 'port';
结果却是 port 为 0!诡异!怎么回事?明明配置文件中设置监听端口为 3306 的。
于是开始了网上艰苦的搜寻,千山万水的跋涉之后,终于在


看到了一丝曙光,好象和什么 named_pipe 相关。
显然,这个对我来说,有点太深奥了,不懂。不过总算有了眉目,姑且一试。
查看 mysql 的配置文件 /etc/mysql/my.cnf,搜索 pipe 单词,终于发现了个中玄机:

  1. # Don't listen on a TCP/IP port at all. This can be a security enhancement,
  2. # if all processes that need to connect to mysqld run on the same host.
  3. # All interaction with mysqld must be made via Unix sockets or named pipes.
  4. # Note that using this option without enabling named pipes on Windows
  5. # (via the "enable-named-pipe" option) will render mysqld useless!
  6. #
  7. skip-networking
可见,为了安全,mysql 默认关闭了 TCP/IP 监听。
将 skip-networking 这一行注释掉,即打开 mysql 的端口监听,然后重启 mysql 服务。
此时使用 lsof 命令查看 3306 端口,可以看到 mysql 进程。
再运行测试程序:

成功!搞定!

后记:
我在网上搜索端口号这个问题时,看到有人说使用 mysql 的 root 用户时,不可以在外部连接数据库,于是我连忙新建了个用户。又说,mysql 的 root 用户密码不能为空,于是我又赶紧给设了个密码。可惜却都未能解决问题。
我很奇怪为什么其他人使用 DBCP 连接 mysql 时没有遇到这个问题呢,因为我搜索『mysql 端口号为 0』,返回的搜索结果很少。或许,他们的默认配置文件不同吧。
阅读(2769) | 评论(4) | 转发(4) |
给主人留下些什么吧!~~

我是一粒糖2011-12-15 23:11:24

silverzhaojr: 使用 lsof 命令,具体用法你可以参看这篇文章:
http://heikezhi.com/2011/06/19/swiss-army-knife-of-unix-debugging-lsof/.....
多谢!

我是一粒糖2011-12-02 00:23:51

搜索端口号用的什么软件呢?

小小小毛驴2011-11-30 23:38:54

好文章~