前几天一位朋友让我远程帮忙在他的Windows机器上装MySQL 9.0,他以为这是个简单活儿,结果我们两个人折腾了快两个小时——安装向导能正常跑,但配置阶段总是报错退出。最后发现问题基本都出在环境清理和版本理解上,跟安装包本身关系不大。
MySQL 9.0是2024年7月发布的Innovation版本,官方跳过9.0之前的几个小版本直接升到了大版本号。很多人第一反应是“大版本更新了,是不是安装方式也改了”,实际用下来,如果你只是想在Windows上装一个单机实例做开发测试,9.0的安装流程和8.0其实没有本质差异。但有几个细节,比如默认认证插件的变化、安装程序对依赖环境的检测方式、旧版本客户端工具的兼容性,确实和以前不一样。这篇文章就把我这次安装的全过程、每一步的选择逻辑、以及踩过的几个坑都整理出来,给准备在Windows上装MySQL 9.0的朋友一份可以直接照着走的参考。
1. 先搞清版本路线:9.0到底能不能直接用
1.1 Innovation版本和LTS版本意味着什么
MySQL从8.0之后调整了发布策略。你登录官网下载页面时会看到两个系列:一个是LTS(Long Term Support)版本,目前对应的是8.4;另一条就是Innovation版本,也就是9.0、9.1、9.2这一串。LTS版本维护周期长、主打稳定,适合生产环境;Innovation版本大约每几个月发一个新版本,优先把新功能铺到社区,但维护期短,下一个Innovation出来之后就进入维护末期了。
这意味着如果你要在Windows上装MySQL 9.0,首先要明白它不是奔着“长期稳定”去的。单机开发、学习、测试新技术,用9.0没有任何问题。生产库、线上业务,建议老老实实留在8.4或继续用8.0。很多人看到9.0就觉得“最新版肯定最好”,这种想法在数据库这类基础软件上是有风险的——我自己就见过有人把生产环境的MySQL从8.0直接升到9.0,最后因为配置项不兼容临时回滚的情况。
1.2 和8.0/8.4相比,9.0动了哪些底层东西
9.0在Windows上的安装过程和8.0几乎一样,安装向导、服务注册、数据目录结构都没变。真正变化的是数据库内核层面的一些默认行为和删除项:
- mysql_native_password认证插件被移除。8.0时代还是默认插件,8.4里开始标记弃用,9.0直接删掉。这意味着老版本客户端如果只认native_password,连上来会直接报认证插件加载失败。
- 一些长期废弃的配置项和命令被清理,比如旧的redo log相关参数、部分旧版兼容SQL模式选项。
- 默认字符集和排序规则延续了8.0后期的策略,依然是utf8mb4和utf8mb4_0900_ai_ci。
这些变化对纯安装使用没有直接影响,但对“装完之后的连接环境”影响很大。很多人在Windows上装完MySQL,习惯用老版本的Navicat或者旧版JDBC驱动去连,9.0的环境下就容易踩认证方式不对的坑,我在后面单独展开讲。
1.3 适合在Windows上安装9.0的人群
如果你现在就准备在Windows机器上安装9.0,我建议你对照一下自己的场景:
- 纯学习、验证新语法、测试新特性:可以直接上9.0。
- 做项目开发环境,且项目生产环境还是8.0:建议装8.4或8.0,避免本地和线上行为差异。
- 需要连接老客户端的遗留工具链:先用8.4,等工具链升级完再考虑9.0。
我当时帮朋友装的场景是“新电脑上跑一些实验性数据脚本”,所以直接选了9.0,安装本身很顺利,后续的所有麻烦都来自环境里已有的一些服务和管理习惯。
2. 下载和安装前的三道准备检查
2.1 官方网站下载:安装包到底选哪个
MySQL的Windows安装包放在Oracle官网的MySQL Community Downloads页面,路径是:MySQL Community Server下载区。进去之后选择Microsoft Windows平台,能看到两类包:
- MySQL Installer(MSI):图形化向导安装,推荐给大多数Windows用户。
- ZIP Archive:解压即用,适合做免安装绿色版或者批量部署脚本。
同一页面还会让你选“Download Latest”还是“Download Archives”。如果你要装9.0,就直接下最新版页面里带9.0字样的MSI安装包就好。注意一个细节:Installer也分大小,有个几百KB的web installer,运行时会联网下载组件;还有个完整版离线包(通常一两百MB),遇到网络比较差的机器,我建议直接下离线包。我之前在网速不稳定的场景装过一次web installer,下载组件失败了好几次,最后还是专门拉了离线包才装完。
2.2 ZIP压缩包和MSI安装程序的取舍
MSI安装程序会替你处理初始化配置、Windows服务注册、环境变量设置,适合不想跟命令行折腾的人。ZIP包更适合“我明确知道自己要什么”的场景。
如果你选ZIP包,安装过程全手写,大概是这样:
1. 下载zip包,解压到 D:\mysql-9.0 2. 在解压目录下手动创建 my.ini 或直接复制一份默认配置 3. 以管理员身份打开CMD,进入 bin 目录 4. 执行 mysqld --initialize-insecure 5. 执行 mysqld --install MySQL9 6. 执行 net start MySQL9这个过程并不复杂,但对新手来说,任何一个步骤错了排查起来都比MSI版本更花时间。我自己的倾向是:开发机、服务器,用MSI;临时环境最多用ZIP。后面具体展开的安装流程,也是基于MSI方式来讲。
2.3 前置环境检查清单
MSI安装本质上会触发一系列Windows操作,包括安装Visual C++运行库、创建Windows服务、写数据目录。所以安装前先检查这几项,能帮你省掉后面大量排错时间:
- 是否已安装Visual C++ Redistributable(2015-2022 x64)。MySQL Installer一般会自动检测并安装,但如果你系统环境比较精简,可能安装程序启动阶段就卡住。
- 3306端口有没有被占用。Windows上很常见的是装了旧版MySQL、MariaDB,或者某些软件自带了一个MySQL实例。安装前用
netstat -ano | findstr :3306看一眼最直接。 - 是否有残留的MySQL数据目录。默认路径是
C:\ProgramData\MySQL,如果你之前装过MySQL但没卸载干净,新实例初始化时可能碰到权限或文件冲突。 - 当前Windows账号是否有管理员权限。没有管理员权限的话,服务注册这一步必挂。
- 关闭杀毒软件对系统目录的实时监控。Windows Defender或第三方卫士软件有时候会锁住数据文件写入,导致安装过程诡异失败。
这些检查看起来都是老生常谈,但我那次帮朋友排查到最后,发现他机器上就是残留了一个旧MySQL的数据目录没清理,导致9.0的安装程序在配置阶段反复回滚。环境问题永远比安装包本身更值得先排查。
3. 安装向导全流程:每个选项都讲透
3.1 安装类型选择的真实差异
双击MSI后,MySQL Installer会要求你选择安装类型。常见选项有:
- Developer Default:开发机推荐,会装MySQL Server、Workbench、Shell、Router、Visual Studio插件、ODBC驱动等一堆组件。
- Server only:只装服务端。
- Custom:手动勾选组件。
- Full:把家族套件全装上。
如果你只是要一个数据库服务,选Server only就够了。选Developer Default会多装很多用不到的东西,比如MySQL Router、VS Code插件、Python连接器、文档等,这些组件之间还有依赖关系,装完占用磁盘空间不小,升级也麻烦。我平时自己的机器选Custom,只勾选MySQL Server和MySQL Workbench(或者干脆不勾Workbench),保持环境干净。
这个页面还有一个容易忽略的点:底部会提示“Check Requirements”,也就是检查当前系统缺少的运行依赖。如果这里报出“缺失需要安装的软件包”,先在这里解决。常见的是缺Visual C++运行库,Installer会列出来,点击旁边的Execute直接补装即可。
3.2 实例配置与端口占用检查
组件安装完之后,向导进入“Configuration”阶段。MySQL Server配置页面会让你选配置类型:
- Development Machine:按开发机资源预估内存占用。
- Server Machine:给常驻运行的服务预留更多资源。
- Dedicated Machine:都是MySQL,资源给到最大。
这个选项影响的是InnoDB缓冲池等默认参数大小。所以选“Development Machine”就行,别管字面意思。除非这台机器就是专门跑MySQL给几十个人用的,才需要选后面两个。
接下来是Connectivity部分,默认勾选TCP/IP,端口默认3306,并启用X Protocol端口33060。这里你需要检查一下3306端口是否可用。可以直接展开“Advanced Configuration”查看具体监听配置。如果你机器上本来就跑着别的MySQL实例,建议在这台机器上换个端口,比如3307,免得之后起服务的时候端口冲突。
这一步的细节决定成败。我见过太多人在这一步直接下一步,结果安装完后服务起不来,再回头查才知道是端口被占了。
3.3 认证方式与root密码策略取舍
接下来是Authentication Method的选择。9.0安装向导上会显示两个选项:
- Use Strong Password Encryption(推荐,使用caching_sha2_password)
- Use Legacy Authentication(使用mysql_native_password)
重点来了:虽然安装向导在9.0里还保留着Legacy选项,但实际版本里mysql_native_password插件已经被移除。如果你选了Legacy Authentication,配置阶段很可能直接失败,或者连上服务后无法完成认证。所以在9.0环境下,老老实实选Strong Password Encryption,然后用支持caching_sha2_password的客户端连库。
root密码的设置页有几个管理习惯可以参考:开发环境可以设置纯数字或简单密码,但生产环境必须强密码。安装向导还提供一个“Create Root User Account”和一个“Add User”的功能,后者可以顺便建一个普通账号。建议在这里把普通账号先建好,之后不要全用root去连库。
3.4 Windows服务安装细节
然后是Windows Service配置页,向导会问你:
- 是否把MySQL配置为Windows服务
- 服务名称,默认是MySQL90
- 是否随系统启动自动启动
- 是否以标准系统账户或自定义账户运行
这里我的建议是保持“Start the MySQL Server automatically”打勾,因为一个数据库中途中途关掉太折腾了。服务名保持默认即可,如果你机器上已经存在MySQL服务,建议改成MySQL90,避免重名冲突。
配置完成之后,安装向导会执行“Apply Configuration”,这一步包括初始化数据目录、写入配置文件my.ini、创建服务、启动服务。这一步如果长时间卡住或报错,通常不是安装包问题,而是之前我提到的环境残留或权限问题。后面专门讲排错链路。
4. 装完之后的验证与环境优化
4.1 命令行连一把数据库
安装向导提示配置成功并启动服务后,别急着开始用,先在命令行验证一遍:
打开新的CMD,执行:
mysql -u root -p输入刚才设置的root密码,能进入mysql>提示符就说明服务正常。
再执行一条:
SELECT VERSION();如果返回9.0.x,说明连上和版本都对。这时候再顺手看一下:
SHOW DATABASES;默认应该能看到information_schema、mysql、performance_schema、sys四个库。如果出现这四张系统库,说明实例初始化完毕。
这个验证过程看起来简单,但它能帮你确定问题到底出在服务端还是客户端。很多人安装完直接打开GUI工具,连接失败就以为是安装没成功,其实服务端早就起来了,只是客户端工具和9.0的认证方式不兼容。
4.2 my.ini配置调整与生效
MySQL在Windows上的核心配置文件是C:\ProgramData\MySQL\MySQL Server 9.0\my.ini。安装向导生成的这个文件一般够用,但开发过程中很多人会需要调整字符集、时区、日志等。
我经常给新机器加的一段配置是这样的:
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci default-time-zone='+08:00' sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION max_connections=200改完my.ini之后必须重启服务才能生效:
net stop MySQL90 net start MySQL90或者到服务管理器里点击重启。
这里有个值得注意的地方:C:\ProgramData\MySQL下的my.ini不一定是你唯一需要关注的配置。如果你之前在安装目录C:\Program Files\MySQL\MySQL Server 9.0\里也放过my.ini,两处配置容易互相掩盖,排查的时候先确认服务使用的是哪个文件。命令行下执行:
mysqld --verbose --help可以看当前实例实际读取的defaults-file路径。
4.3 常用管理操作速查
装完之后日常最常用到的操作,我列一份简表:
| 操作 | 命令或路径 |
|---|---|
| 启动服务 | net start MySQL90 |
| 停止服务 | net stop MySQL90 |
| 重启服务 | net stop MySQL90 && net start MySQL90 |
| 查看服务状态 | sc query MySQL90 |
| 登录数据库 | mysql -u root -p |
| 查看端口监听 | netstat -ano | findstr :3306 |
| 服务管理器 | 运行services.msc |
| 配置文件 | C:\ProgramData\MySQL\MySQL Server 9.0\my.ini |
另外,Windows上MySQL Shell(如果安装了)也是一个挺好用的工具,可以用传统的SQL模式,也可以用API方式操作,对测试9.0新特性比较方便。
5. 安装失败排查链路:从现象到根因
5.1 安装程序启动即崩溃的常见原因
现象是双击MSI之后,安装程序闪一下就没反应,或者跳出“应用程序无法正常启动”的报错。
第一嫌疑是缺Visual C++运行库。MySQL Installer本体依赖VC++的dll,系统如果缺少2015-2022版本的运行库,程序根本起不来。排查方式很简单:到“控制面板-程序和功能”里看有没有 “Microsoft Visual C++ 2015-2022 Redistributable (x64)”。没有就直接去微软官网下载最新的x64版本装上。
第二嫌疑是临时解压目录权限问题。MSI安装时会解压到%TEMP%目录,如果系统临时目录被安全软件锁死,或者当前账号没写权限,也会表现成启动即失败。解决方法是退出安全软件、以管理员身份重新运行。
还有一种情况是Windows日志里能查到错误,但界面上没有明确信息。这时候用Event Viewer(事件查看器)看Windows Logs下的Application日志,找红色错误项,往往能直接定位到是缺哪个模块。
5.2 配置阶段卡死的排查思路
安装向导走到“Applying Configuration”时卡住、报错、回滚,这是我遇到的最常见的失败场景。它发生在向导要把MySQL服务启动起来的那一刻,所以根源基本在三处:
第一,数据目录初始化失败。9.0初始化数据目录时会在C:\ProgramData\MySQL\MySQL Server 9.0\Data下写入系统表数据。如果该目录已存在旧文件、或权限不够、或被杀毒软件锁住,初始化就会失败。处理办法是备份旧数据后整个删除该目录,让向导重新初始化。
第二,3306端口被占用。安装向导启动服务时会尝试绑定3306,如果端口被别的进程占用,服务直接起不来。这时候执行:
netstat -ano | findstr :3306看返回的PID是什么进程,去任务管理器对应确认。占用端口的是旧版MySQL或者MariaDB,要么把旧服务停掉并改端口,要么先把旧实例卸载干净。
第三,Windows服务注册失败。如果之前卸载过MySQL但服务没有删除干净,再注册同名服务可能报“服务已存在”。用下面命令查看:
sc query MySQL90如果发现服务存在但状态不正常,可以把它删除后重来:
sc delete MySQL90这时代理再执行一次配置步骤,通常能过。
5.3 连接失败:认证插件和客户端兼容性
安装成功后连不上数据库,报错多为“Authentication plugin 'caching_sha2_password' cannot be loaded”或者“Unable to load authentication plugin”。
这说明你用的客户端太老。MySQL 9.0默认认证插件是caching_sha2_password,而老版本工具(比如很老版本的Navicat、某些旧版JDBC驱动)不认识这个插件。以前8.0时代还能把默认认证方式改回mysql_native_password,但9.0已经把这个插件删了,所以这条路是走不通的。正确做法是升级客户端:
- Navicat:升级到16以上版本(我实测Navicat 17连9.0没问题)。
- JDBC驱动:至少升级到8.0.x的较新版本。
- 其他GUI工具:优先选择持续更新、支持最新认证方式的工具。
如果你确实需要兼容一个老到不能再老的客户端,唯一无解的方案就是不要用9.0,退回8.4。这也是升级前要评估客户端工具链的原因。
5.4 彻底卸载重来的完整流程
如果安装过程已经坏到无法挽回,或者你决定卸载重装,别在“控制面板-卸载程序”里点一下就完事。MySQL的残留物才是下次安装失败的元凶。我自己的标准卸载流程是这样的:
- 以管理员身份打开CMD,停止服务:
net stop MySQL90 - 删除服务:
sc delete MySQL90 - 打开控制面板,卸载“MySQL Server 9.0”和“MySQL Installer”
- 删除安装目录
C:\Program Files\MySQL - 删除数据目录
C:\ProgramData\MySQL - 删除临时目录里的MySQL相关文件夹(
%TEMP%下搜索mysql前缀的文件) - 清理注册表。运行
regedit,删除HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB(如果存在) - 重启电脑,再重新安装
这套流程看起来多,但每一步都有必要。数据目录残留会导致新实例初始化垃圾数据,注册表残留会导致Installer误判已安装版本,服务残留会导致端口冲突。很多“装一次失败一次”的诡异情况,就是因为卸载不彻底。
6. 后续使用中的几个细节建议
6.1 客户端工具的选择与避坑
Windows上连MySQL的图形工具很多,除了官方Workbench,我日常最常用的是Navicat和JetBrains的DataGrip。Navicat 17对MySQL 9.0支持得很好,连接时认证方式选默认的caching_sha2_password就能通。DataGrip只要版本新,内置驱动可以自主替换,相对省心。
有一点要提醒:下载这类工具体量大的软件,尽量去官网。有些第三方下载站打包了旧版本,旧版本连9.0大概率会碰到认证问题,到时候问题绕一大圈还不知道出在哪。
6.2 开发环境的安全习惯
即便只是一台Windows开发机,装了MySQL之后也别完全不设防。安装时里的root密码不要用的过于简单。如果数据库监听需要暴露到局域网,建议单独建一个只开放必要权限的账号,给一个独立密码,root账号只允许本机登录。
还有个习惯是定期备份。开发环境的数据虽然不重要,但有时候重建环境很浪费时间。可以用mysqldump定期导出:
mysqldump -u root -p --all-databases > backup_20250101.sqlWindows计划任务里还能配一个定时任务自动跑备份,成本极低。
6.3 版本升级提醒
MySQL 9.0作为Innovation版本,生命周期不会太长。官方后续会继续推出9.1、9.2等版本。如果你的学习或开发节奏不紧,建议安装完成后每隔几个月关注一下官方发布的更新,及时跟进最新的小版本。
但注意,升级不等于简单覆盖安装。跨小版本升级之前,先备份数据,再停掉服务,然后下载新版MSI执行升级。升级过程中Installer会自己检测数据目录格式并做迁移。如果是从8.4跨到9.x,升级路径会更讲究一些,建议提前看官方文档的升级说明,而不是直接装新版覆盖。
我自己在Windows上的使用习惯是:生产相关的项目继续用8.4,个人实验和学习环境用9.0,两边不互相污染,也不需要频繁切换配置。MySQL 9.0在Windows上已经足够稳定,只要环境检查到位,安装过程其实比很多人想象的简单,关键是在动手之前就想清楚自己的需求。希望这篇东西能让你在一台新Windows机器上顺利把MySQL 9.0跑起来,少走几趟弯路。