关于 MySQL 启用命名管道 (Named Pipes) 的问题

红薯 发布于 2011/03/03 10:51
阅读 6K+
收藏 8

MySQL 默认是不启用命名管道连接方式,启用方法:

[mysqld]
enable-named-pipe
socket=MySQL

其中 socket 参数是可选的,如果没指定的话默认的是 /tmp/mysql.sock

使用命名管道方式连接 MySQL 只适合在 Windows 系统下用来连接本机的 MySQL ,性能可比一般的TCP/IP方式提升30%~50%。

接下来可以使用 Navicat Lite 这个 MySQL 客户端工具来验证命名管道的连接(如下图所示):

但问题出在使用 JDBC 连接 MySQL 上。

根据官方文档说明,JDBC 使用如下 URL 来连接 MySQL

jdbc:mysql:///oschina?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory&namedPipePath=MySQL

其中 socketFactory 必须指定为 com.mysql.jdbc.NamedPipeSocketFactory,而 namedPipePath 则指定为 MySQL 配置里的 socket 的值。

出现的异常是:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

有没有人用 named pipes 连接过 mysql 的,来支支招吧。

加载中
0
红薯
红薯

发现删除连接URL中的 &namedPipePath=MySQL 就可以连接数据库,代码如下:

package net.oschina.tester;

import java.sql.*;

/**
 * 使用命名管道连接MySQL
 * @author Winter Lau
 * @date 2011-3-3 上午10:32:17
 */
public class MySQLNamedPipeTester {

	public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.jdbc.Driver").newInstance();
		Connection conn = DriverManager.getConnection(
				"jdbc:mysql:///oschina?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory",
				"root",
				"xxxx");
		PreparedStatement ps = conn.prepareStatement("SELECT COUNT(*) FROM osc_users");
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			System.out.println(rs.getInt(1));
		}
		//conn.close();
	}
}
0
szf
szf

8错,收了!

0
Mr.CT
Mr.CT

用命名管道,不需要连接池了吧!@红薯

红薯
红薯
我只敢在客户端里使用,应用里不敢
返回顶部
顶部