ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

MySQL官网驱动下载与配置全指南:JDBC和ODBC从安装到排错

MySQL官网驱动下载与配置全指南:JDBC和ODBC从安装到排错

做数据库开发这几年,我见过太多同事在“下载MySQL驱动”这个第一步上浪费大量时间。明明是个再基础不过的操作,结果要么是下载到来路不明的第三方jar包导致项目埋雷,要么是ODBC驱动版本不对,连接时直接报错让人一头雾水。

这篇文章我就把MySQL官网驱动下载这件事彻底讲透,覆盖两大类驱动:Java开发最常用的JDBC jar包驱动,以及Windows平台下Access、Excel、C++等程序连接MySQL必备的ODBC驱动。从官网入口到下载选择,从环境配置到连接验证,再到常见报错排查,全部按实操顺序走一遍。

适合谁看

  • 刚接触JDBC、第一次配置MySQL驱动的Java初学者
  • 在Windows环境下需要让Excel、Access、Navicat等工具通过ODBC连接MySQL的办公人员
  • 接手老项目,需要快速确认驱动版本和配置方式的后端开发
  • 被“Public Key Retrieval is not allowed”“Unable to load authentication plugin”这类报错折磨过的人

能解决什么问题

  • 搞清楚MySQL官网到底怎么找到驱动下载页,避免在改版后的官网上迷路
  • 搞明白mysql-connector-java、mysql-connector-j、MySQL Connector/ODBC这么多名字分别是什么
  • 学会正确把jar包配置到IntelliJ IDEA、Eclipse或Maven项目中
  • 掌握ODBC驱动在Windows下的安装、配置和测试全流程

注意,下文的所有操作都基于MySQL官方数据库产品本身展开,不涉及任何第三方非官方驱动。官方驱动虽然有时候版本命名让人迷惑,但稳定性、兼容性、安全性都是最稳妥的。

1. 准备工作:分清两种驱动的适用场景

很多新手第一次看MySQL驱动下载页面时是懵的,页面上一堆Connector选项,不知道该点哪个。其实本质上,MySQL官方驱动就两大类,按使用场景区分非常清晰。

1.1 JDBC jar包驱动是什么

JDBC驱动是Java应用连接MySQL的标准接口。Java程序不直接和MySQL服务器通信,而是通过JDBC API调用驱动,由驱动翻译成MySQL能理解的网络协议,完成数据交互。

日常说的“mysql驱动jar包”,在MySQL官网现在的名称是MySQL Connector/J。这个JDBC驱动有两种存在形式:

  • 纯Java实现:也就是一个jar包,跨平台,Windows、Linux、macOS都能用,内部把MySQL的网络协议用Java代码实现了
  • JDBC驱动类型:MySQL Connector/J属于Type 4驱动,纯Java、直接基于网络协议连数据库,不需要本地库文件

实际开发中最常见的使用方式有三种:一是手动下载jar包导入IDE;二是通过Maven在pom.xml里声明依赖自动拉取;三是打胖包时把驱动打进去。

1.2 ODBC驱动是什么

ODBC(Open Database Connectivity,开放数据库互连)是微软主导的数据库访问标准接口。它的角色和JDBC类似,只不过JDBC是Java世界的接口规范,ODBC是Windows生态里的通用接口规范。

MySQL官网提供的ODBC驱动叫MySQL Connector/ODBC。安装之后,Windows系统里会多出一个“MySQL ODBC Driver”数据源,Excel、Access、C++程序、Python(通过pyodbc)、Navicat等工具都可以通过这个数据源访问MySQL数据库。

典型使用场景:

  • 公司财务用Excel定期从MySQL数据库拉取数据做报表
  • Access程序需要把数据同步到MySQL
  • 用Qt、C++开发的Windows桌面应用需要直连MySQL
  • Python脚本用pyodbc避免装一堆数据库依赖
  • Power BI、Tableau等BI工具连接MySQL

1.3 两个驱动能否互换使用

不能。JDBC驱动是给JVM用的,ODBC驱动是给ODBC接口用的。Java程序想通过ODBC驱动连接MySQL,需要额外装一个JDBC-ODBC桥接器,而且这个桥接器在新版JDK里早就被移除了。所以不要想着“只装一个就行”,先判断你的程序运行环境:

  • 程序是Java系(Java、Kotlin、Scala、Groovy),用JDBC jar包
  • 程序是Windows系(Excel、Access、C++、C#、Python的pyodbc),用ODBC驱动

明确了这一点,下面下载就不会再点错。

2. 官网下载渠道与入口定位

MySQL官网这几年改版了好几次,驱动下载页的位置其实一直有迹可循。关键是要记住一个总入口:MySQL Connectors产品页。

2.1 MySQL官网总入口说明

打开MySQL官方网站,不要进“Downloads”就去找驱动,那里是全产品矩阵,容易眼花。正确路径是:

  1. 进入官网首页(mysql.com)
  2. 顶部导航找到Downloads下拉菜单
  3. 菜单里找到MySQL Community (GPL) Downloads,这是社区版免费下载入口
  4. 页面往下翻,找到Connectors分类
  5. 列表里有Connector/J(JDBC驱动)和Connector/ODBC(ODBC驱动)

这个入口对应的是社区版GPL协议授权,平时开发和商用场景基本都够用。官方订阅的商业版驱动也在同一套页面体系下,一般不需要特别处理。

2.2 下载页版本列表的阅读方法

进入具体驱动下载页后,你会看到一个带版本号的表格,比如Connector/J 8.0.x或9.x列表。表格每一行是一个小版本,列里有:

  • 版本号:如8.0.33、8.0.36,越新修复的bug越多
  • 发布日期:确认是否为最近维护的版本
  • 平台:比如“Platform Independent”(平台无关,纯jar)
  • 下载格式:ZIP压缩包或tar.gz压缩包

这里有个行业通用惯例:优先选择最新的稳定版。别因为“旧版本大家用得多”就选旧版——MySQL服务器版本在升级,旧驱动可能不支持新的认证插件或加密协议。

2.3 到底下载哪个压缩包格式

Connector/J提供的下载包格式有zip和tar.gz两种:

  • zip:Windows上直接解压即可,图形界面友好
  • tar.gz:Linux/macOS上使用更方便

不管哪种,解压后里面都有mysql-connector-j-x.x.x.jar这个核心文件。如果你在Windows上下载了tar.gz格式也能解压出来,只是Windows自带解压工具对tar.gz支持不太好,建议先用zip格式。

还有一点现在很多人容易忽略:新版驱动包不仅包含主jar包,还有依赖包。解压后你会看到目录结构。别只把主jar拷走,依赖关系也要一并处理,后面第3节我会详细讲。

2.4 文件名命名规律与版本号解读

以mysql-connector-j-8.0.36为例,文件名里的数字规律:

  • 8:主版本号,对应MySQL服务器大版本(8.x系列)
  • 0:功能版本号,MySQL 8.0
  • 36:维护版本号,修复了前面版本的问题
  • 大量老项目还在用5.1.x,对应MySQL 5.x和MariaDB 10.x时代

判断版本匹配的原则:

  • MySQL服务器是5.6-5.7版本,用Connector/J 5.1.x系列最稳
  • MySQL服务器是8.0+,用Connector/J 8.0.x系列
  • 高版本驱动连接低版本服务器,一般情况向下兼容,但可能出现新协议不支持旧端的情况
  • 低版本驱动连接高版本服务器,容易出现认证插件错误

另外一个细节,5.1.x驱动的jar文件名是mysql-connector-java-5.1.49.jar,8.0.30以后的驱动文件名变成了mysql-connector-j-8.x.x.jar,去掉了“ava”后缀。这个变化很多人没注意,导致在Maven中央仓库写依赖时用错artifact id,我已经见过好几例了。

3. JDBC jar包驱动的安装与配置详解

拿到jar包不是结束,配置到项目里才是关键。这一节按三种使用场景逐一走一遍。

3.1 手动导入IntelliJ IDEA项目

IDEA是目前Java开发的主力IDE,手动导入驱动jar包的步骤:

  1. 把解压出来的mysql-connector-j-x.x.x.jar文件复制到一个你项目内的lib目录(没有就新建),或者存到一个统一的本地仓库目录
  2. 打开IDEA,右键项目根目录或lib目录下的jar文件
  3. 选择Add as Library选项
  4. 弹出对话框里选择模块(Module),确认后IDEA会在项目结构里注册这个依赖
  5. 检查是否生效:File -> Project Structure -> Libraries,能看到刚才导入的jar

这里有个关键坑:如果你只把jar文件扔进项目目录,而不执行Add as Library,IDEA不会自动识别。代码里写import java.sql.*照样不报错,但运行时会报ClassNotFoundException。

3.2 Eclipse环境下的导入方式

Eclipse用户两个路径:

  • 简单方式:把jar文件拖到项目根目录,右键jar文件 -> Build Path -> Add to Build Path
  • 规范方式:项目右键 -> Properties -> Java Build Path -> Libraries选项卡 -> Add External JARs,选中本地的jar位置

注意Eclipse的动态Web项目(WAR打包)有个额外步骤:要把jar放到WEB-INF/lib目录下,构建路径才能正确打进去。实际部署到Tomcat后ClassNotFound,十有八九是这一步漏了。

3.3 Maven项目依赖配置详解

用Maven管理依赖的话,不需要手动下载jar,在pom.xml里加依赖声明即可。但这里就必须注意第2节那个命名变化:

  • 8.0.30之前的版本,artifactId是mysql-connector-java
  • 8.0.31及以后的版本,artifactId变成了mysql-connector-j

实际pom.xml示例(8.0.36版):

<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.36</version> </dependency>

老版本项目继续用mysql-connector-java声明也没问题,Maven会自动从中央仓库拉取。

另外,Maven仓库拉下来以后实际还是jar包,如果你需要在离线环境部署,可以用mvn dependency:copy-dependencies命令把依赖导出到临时目录,再拷贝到目标机器。

3.4 验证JDBC连接是否成功

无论哪种配置方式,最终都要用一段代码验证连接。测试用最小示例:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class MysqlJdbcTest { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8"; String user = "root"; String password = "你的密码"; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 1"); if (rs.next()) { System.out.println("MySQL连接成功,返回结果: " + rs.getInt(1)); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } }

这段代码里的URL参数是实际项目中一定会遇到的重点。逐个解释:

  • useSSL=false:本地开发环境建议关闭SSL加密,避免证书校验报错
  • serverTimezone=Asia/Shanghai:MySQL服务器时区和JVM时区不一致时,这个参数能避免驱动报错
  • characterEncoding=utf8:强制使用UTF-8编码,防止中文乱码
  • Class.forName("com.mysql.cj.jdbc.Driver"):8.x驱动类名,和5.x的com.mysql.jdbc.Driver不同

如果是5.1.x驱动,驱动类名改成com.mysql.jdbc.Driver,URL里一般不需要serverTimezone参数。

4. MySQL Connector/ODBC驱动的下载与Windows安装

ODBC驱动的安装比jar包稍微复杂,因为涉及Windows系统层面的注册和数据源配置。下面按步骤拆解。

4.1 下载哪个安装包和版本

进入MySQL Connector/ODBC下载页,会看到很长的平台列表。这时要注意:

  • Windows系统,选Windows (x86, 64-bit), MSI Installer或 ZIP Archive
  • 老系统是32位,选 x86 版本
  • MSI是安装向导,双击下一步即可
  • ZIP是免安装绿色版,解压后要用命令行注册

版本选择同样遵循“API编译版本匹配原则”:

  • 本机Office/Access是32位,就必须装32位的ODBC驱动
  • 本机Office/Access是64位,就装64位的
  • 64位系统可以同时存在32位和64位两套ODBC驱动,但程序默认只认对应位数的那套

4.2 MSI安装过程中的关键选项

双击MSI安装包后,一路Next接近尾声时会看到“Configuration”步骤,包括端口号、用户名、密码配置。

我一般在这里直接选择跳过(Skip),因为ODBC驱动本质是“接口”,具体连哪个库、用什么账号,应在创建数据源时单独配置。安装时如果填了配置,反而会在系统里预留一个初始数据源,影响后续手动配置。

安装完成之后,关键验证方式:按 Win+R 输入 odbcad32.exe,打开“ODBC数据源管理器”。32位系统直接打开即可;64位系统需要区分一个细节:

  • 64位程序用 odbcad32.exe 看到的驱动列表
  • 32位程序需要在 C:\Windows\SysWOW64\odbcad32.exe 里查看

注意:在64位系统上,打开的ODBC管理器默认是64位。如果Excel是32位的,你在这里配置的数据源,Excel根本识别不到。多少人栽在这里,配置了半天,Excel里找不到自己创建的DSN,心态直接炸裂。诀窍就是先看你的调用程序是32位还是64位,然后打开对应位数的ODBC管理器。

4.3 ZIP绿色版的配置方法

ZIP压缩包适合那种“不想装MSI”或公司电脑没管理员权限的场景。解压后目录结构里会有:

  • lib目录:包含libmysql.dll、myodbc8w.dll等动态库
  • bin目录:包含mysql_odbc_install.exe等工具

注册驱动的原理是把DLL信息写入Windows注册表。具体操作:

# 在解压目录bin下,打开终端执行 mysql_odbc_install.exe -a

-a参数表示注册到系统数据源,卸载用 -r。执行完再打开ODBC数据源管理器,如果驱动列表里出现“MySQL ODBC Driver 8.0”,说明注册成功。

需要注意,ZIP版本里的DLL有32位和64位之分(x86目录 vs x64目录),别注册混了。

4.4 创建ODBC数据源并测试连接

驱动装好后,还要建立一个数据源(DSN),供程序引用。步骤:

  1. 打开对应位数的ODBC数据源管理器
  2. 选择“系统DSN”或“用户DSN”选项卡,这里选系统DSN,因为所有用户都能用
  3. 点“添加”,选择“MySQL ODBC Driver 8.0”
  4. 填写配置:
  • Data Source Name:自定义一个英文名,比如mysql_test
  • Description:可选备注
  • TCP/IP Server:数据库服务器地址,本机填127.0.0.1或localhost
  • Port:默认3306
  • User:数据库用户名
  • Password:密码
  • Database:默认连接的库名,可留空
  1. 点“Test”按钮,看到“Connection successful”就说明配置成功

这里有个细节我每次都要提醒:测试成功了,不代表程序一定能连上。ODBC连接测试走的是系统数据源,如果程序跑在服务账户下,还要确认服务账户对这些注册表键有读取权限。Windows服务下连不上、手动测试却成功的怪问题,基本都出在这。

5. 常见连接报错与解决方法

这一节整理了实战中最常见的报错和排查思路。每一条都是我或身边同事真正踩过坑的。

5.1 JDBC连接报错排查表

报错信息原因解决方案
ClassNotFoundException: com.mysql.cj.jdbc.Driverjar没导入或类名写错检查IDE Libraries配置;8.x用com.mysql.cj.jdbc.Driver,5.x用com.mysql.jdbc.Driver
Public Key Retrieval is not allowed用户使用caching_sha2_password认证插件,且未启用公钥获取URL参数加allowPublicKeyRetrieval=true
Access denied for user账号无权限或密码错误核对用户、密码、授权;确认主机限制如localhost
Communications link failure连不上MySQL服务检查服务是否启动;端口是否正确;防火墙是否拦截3306
Unknown databaseURL里的库名不存在先在MySQL里创建对应库
Connection refused目标端口未监听用telnet测试端口连通性
Server returns invalid timezone时区配置异常在MySQL执行 SET GLOBAL time_zone = '+8:00'

这里面的Public Key Retrieval是最新的高频坑。MySQL 8.0默认认证插件是caching_sha2_password,JDBC客户端第一次连接时需要从服务端获取公钥做密码加密,默认不允许获取就会抛这个错。用Navicat没问题,但自己的Java程序跑不起来,八成是这个问题。

5.2 ODBC连接报错排查表

报错信息原因解决方案
Data source name not found程序位数和DSN位数不匹配确认Excel/程序的位数,用对应位数的ODBC管理器创建DSN
Specified driver could not be loaded驱动DLL缺失或位数不匹配检查MSI或ZIP解压后的DLL是否在系统路径中
Data source name not found and no default driver specifiedDSN不存在或连接字符串写错核实连接字符串中的DSN名称
Encountered error 126 while loading DLL缺依赖DLL(通常是VC运行库)安装对应VC++ Redistributable
Access denied for user账号密码错误检查配置文件中的用户、密码

Encountered error 126 这个报错迷惑性很强,因为ODBC驱动本身可能没问题,是操作系统缺少某版本VC运行库。装完MySQL Connector/ODBC但Windows缺少Visual C++运行时的话,加载DLL就失败。安装驱动时如果提示缺依赖,先去装运行库。

5.3 32位与64位混乱的终极排查思路

“程序跑不起来”有时候驱动没一点问题,纯粹是位数没人注意。排查顺序建议:

  1. 确认调用程序的位数:Excel看文件->账户->关于;Python看python.exe的架构
  2. 确认ODBC管理器位数:任务管理器里看进程架构,或按路径判断
  3. 确认驱动注册版本:在对应位数的ODBC管理器里查看驱动列表
  4. 新建DSN后立刻测试,测试成功再回程序里重试

这个排查顺序能解决80%的ODBC连接诡异问题。剩下的可能出在网络配置或防火墙上了。

5.4 驱动版本过低引发的老症状

有些报错不体现在连接阶段,而是在运行期:

  • Query timeout异常:驱动对高版本MySQL优化不足
  • Unknown character set:旧驱动不认识字符集
  • 认不出8.0某些数据类型:比如8.0新增的降序索引、窗口函数支持,驱动版本不够就解析失败

这种问题直接把驱动升级到官方最新稳定版,基本能解决。

6. 实用经验补充:更省心的日常操作

文章已经到了收尾阶段,但还有几个日常会反复用到的经验技巧,一并补充。

6.1 没有另外的下载需求,就用Maven仓库直连

如果项目不是特殊的离线环境、公司内网私服,Java项目中用Maven/Gradle声明依赖比手动下载jar包更省心。版本更新时只需要改pom里的版本号,不用重新下载、重新导入。

Gradle示例:

implementation group: 'com.mysql', name: 'mysql-connector-j', version: '8.0.36'

6.2 备份驱动包的习惯

我自己的习惯是在一个公共目录维护驱动包的备份,比如D:\repo\mysql-jdbc,里面按版本号建子目录。这样换电脑或者临时起个测试项目,直接引用本地目录,不用每次跑官网。对于ODBC安装包,我也保留一份最近两个稳定版的MSI,万一新版本出问题可以回退。

6.3 从连接参数看驱动成熟度的经验

最后分享一个技巧:会看连接参数,就能判断一个人对MySQL驱动的理解度。看到有人写jdbc:mysql://localhost:3306/test这种方式,说明是老用法,容易在新环境遇到时区或SSL问题。规范的写法就是附带useSSL、serverTimezone(或新版推荐useUnicode=true&characterEncoding=utf8)这些参数。

驱动本身是官方的东西,参数配置却需要我们自己动手调。这也解释了为什么同样的jar包,有人一条命令就连接成功,有人反复报错。差别不在驱动,在配置。

如果你也是刚开始接触MySQL驱动,建议按照本文顺序操作一遍:确认场景、下载对应驱动、配置环境、跑测试连接。第一次跑通之后,后面的东西都是水到渠成的事。

最后再提一件事:有些项目里的驱动还是几年前的5.1.x,如果你的MySQL是8.0,建议找个业务低峰期升级到最新的8.x驱动。整个升级过程并不复杂,但如果遇到本文第5节的报错,至少知道去哪里查、怎么解决。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进