如何通过Unix Socket使用Java连接本地MariaDB数据库
Java通过Unix Socket连接MySQL实现方案
前提说明
Unix Socket是同一主机内进程间的通信方式,仅适用于Java程序直接运行在学校数据库所在的私有服务器上的场景,如果你是在个人电脑上运行Java程序,无法使用该方式,需继续使用常规TCP/IP方式连接。
前置准备
- 确认学校服务器上MySQL的Unix Socket文件路径,默认路径为
/var/run/mysqld/mysqld.sock,可登录服务器后执行mysqladmin variables | grep socket查询实际路径 - 确认使用的数据库账号已开启
localhost登录权限 - 确认运行Java程序的操作系统用户具备Socket文件的读取权限
实现步骤
1. 导入MySQL驱动依赖
使用官方MySQL Connector/J即可,5.1.38及以上版本均原生支持Unix Socket连接,Maven依赖配置如下:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 若服务器为MySQL 5.7版本,可替换为5.1.49版本 --> </dependency>
2. 编写连接代码
JDBC连接URL需指定socketPath参数,示例代码如下:
import java.sql.Connection; import java.sql.DriverManager; public class DbConnectTest { public static void main(String[] args) { // 替换为实际参数 String databaseName = "你的数据库名称"; String socketPath = "/var/run/mysqld/mysqld.sock"; String username = "你的数据库账号"; String password = "你的数据库密码"; String jdbcUrl = String.format("jdbc:mysql:///%s?socketPath=%s", databaseName, socketPath); try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { System.out.println("数据库连接成功"); // 此处编写业务逻辑 } catch (Exception e) { e.printStackTrace(); } } }
常见问题排查
- 报“权限不足”错误:检查运行Java程序的用户是否有Socket文件的访问权限,可通过
sudo chmod 777 /var/run/mysqld/mysqld.sock临时开放权限测试 - 报“用户拒绝访问”错误:执行SQL
GRANT ALL PRIVILEGES ON 数据库名.* TO '账号'@'localhost'; FLUSH PRIVILEGES;给账号开放对应权限 - 连接超时:检查Socket路径配置是否正确,驱动版本是否和服务器MySQL版本匹配
内容的提问来源于stack exchange,提问作者plamen
相关产品推荐
相关产品推荐

