开发者社区> 问答> 正文

MySQL 启用命名管道 (Named Pipes)

MySQL 默认是不启用命名管道连接方式,启用方法:
[mysqld]
enable-named-pipe
socket=MySQL
其中 socket 参数是可选的,如果没指定的话默认的是 /tmp/mysql.sock
使用命名管道方式连接 MySQL 只适合在 Windows 系统下用来连接本机的 MySQL ,性能可比一般的TCP/IP方式提升30%~50%。
接下来可以使用 Navicat Lite 这个 MySQL 客户端工具来验证命名管道的连接(如下图所示):
7
但问题出在使用 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 的,来支支招吧。

展开
收起
落地花开啦 2016-02-14 11:57:50 8773 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    发现删除连接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();
        }
    }
    2019-07-17 18:42:32
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像