1. 装之前先搞清楚三件事
MySQL 9.0这个版本其实挺有意思,2024年7月随9.x创新版序列一起发布的,自带了InnoDB的一些新优化,比如支持了新的向量索引(HeatWave相关)、改了部分系统表的逻辑,还顺手把一批老旧的认证插件给标记成了废弃。如果你在Windows上准备装它,大概率是图新鲜或者项目需要,但动手之前我建议先把三件事想明白,省得装了又卸、卸了又装,白白折腾一下午。
第一件事是版本线的问题。MySQL现在分两条线:一条是LTS长期支持版,对应8.0系列和8.4 LTS;另一条就是9.x这种Innovation创新版,半年一个小版本,9.0、9.1、9.2这样往下走。9.0的定位就是新特性尝鲜,官方并不会像8.0那样给你做很多年的持续修补。如果你是在公司服务器上部署核心业务,我劝你老实选8.4或者8.0;如果是自己学习、研究新功能、跑个人项目,那9.0完全没问题。我见过不少人拿9.0做生产环境,后面遇到小版本迭代被迫升级、驱动不兼容的情况,相当被动。我自己装9.0主要是为了测试新特性,同时对比它和8.0在Windows上的行为有没有变化。
第二件事是安装方式的选择。Windows上装MySQL无非两条路:一个是下载MSI安装包,有图形化向导、有服务注册、有桌面工具;另一个是下载ZIP压缩包,手动解压、手动初始化、手动注册Windows服务。我这次用的是ZIP方式,原因很简单:可控性强,所有配置都摆在明面上,出了问题能一层层扒开看。MSI方式虽然省事,但对于需要定制my.ini、批量部署、或者想彻底搞懂MySQL目录结构的人来说反而绕。而且MSI安装器偶尔会和系统已存在的老版本MySQL服务名冲突,处理起来更麻烦。ZIP方式只需要注意一点:解压路径不要带中文和空格,比如放C:\mysql-9.0.1-winx64这种,后面一堆坑都是路径问题引出来的。
第三件事是环境确认。Windows版本至少要Windows 10 1903以上,Windows Server 2016以上也OK,9.0对系统的要求比8.0略高,老掉牙的Windows 7就不太建议了。另外MySQL 9.0依赖Visual C++ Redistributable 2015-2022,别以为装数据库就不用装运行库,缺了它你很可能遇到“应用程序无法正常启动0xc000007b”或者服务启动直接报错。检测方法很简单,打开“设置-应用-已安装的应用”,搜“Visual C++”,有2015-2022 x64就行。没有的话去微软官网下载最新的x64版装一下,然后再继续。内存建议至少4GB,磁盘空间2GB以上,9.0装在SSD上体验会好很多,机械硬盘初始化InnoDB的时候那个等待时间能让你怀疑人生。
“装之前先搞清楚”这个阶段大概花不了10分钟,但它决定了后面你是一路顺风还是连环踩坑。接下来直接进入正题:怎么下载,怎么解压,怎么初始化,把每个环节的关键细节都给你过一遍。
2. 官方下载与安装包选择
2.1 认准官方渠道,别碰第三方搬运
搜“mysql下载官网”,国内很多站点会跳出来一堆看起来一模一样的下载页,但里面的安装包很可能被改过、捆绑过,或者干脆是老版本换了个壳。我不敢说所有第三方站点都有问题,但数据库这个分量级的软件,我用过一次非官方包之后再也不碰了。那次装完发现自带了一个奇怪的计划任务,好在发现的早,最后全盘查杀加大版本重装才消停。
官方下载地址是dev.mysql.com/downloads/mysql/,不需要登录也能下载Windows的ZIP包,但如果你选的是MSI或者其他平台,有时候会要求你登录Oracle账户,这也是很多人卡在下载环节觉得“官网不好用”的原因。ZIP归档包通常不需要登录,直接点Download就能跳回显下载链接。稍微提一下,MySQL官网的服务器在国外,国内下载经常是几KB/s慢慢爬,如果你网络条件不好,可以试试从国内镜像站拉,比如部分高校开源镜像站会有MySQL的镜像目录,但我个人建议还是尽量等官方直连,毕竟校验哈希这件事不是所有人都会做。
下载完成后先看一眼文件,ZIP包大概220-260MB,9.0.1的winx64包我记得好像是236MB左右。顺手算一下SHA256,PowerShell命令是:
Get-FileHash .\mysql-9.0.1-winx64.zip -Algorithm SHA256拿到结果再去官网页面核对一下对应版本号的哈希值,这步几十秒的事,却能从源头把“下载到被篡改安装包”这个风险降到最低。
2.2 MSI包和ZIP包的取舍
我前面说了这次走ZIP方案,但选型逻辑可以展开讲讲。MSI包的核心优势是自动化:它帮你创建Windows服务、帮你配置好基本参数、提供MySQL Installer这个工具管理后续组件更新。如果你是完全的新手,装数据库只为了连接Navicat跑个JavaWeb项目,那MSI显然是省心的路子。但MSI有它自己的脾气,最典型的就是它默认把数据目录放在C:\ProgramData\MySQL,同时注册的服务名可能是MySQL90,也可能是MYSQL90,全看安装时的选择。你后续改配置文件的时候还得去C:\ProgramData\MySQL\MySQL Server 9.0目录下找my.ini,路径又长又带空格,记事本打开改完保存,间距一没对齐就出岔子。
ZIP包就清爽多了。解压出来一个自包含的目录,bin、lib、share、include全都整整齐齐,手动初始化之后,所有东西都在你掌控范围内。特别是在写自动化部署脚本、或者需要把整个MySQL目录拷到另一台机器上用的时候,ZIP包几乎就是唯一选择。MSI装完的东西迁移起来非常麻烦——服务和注册表都绑死了路径,挪走之后各种报错。
所以我的个人观点是这样:Windows上自己电脑学习用、或者想体验最新版特性,直接ZIP;给公司服务器装、希望长期维护有人接手,或者你就想“下个下一步到底”那种省心,MSI也完全OK。本文后面所有步骤基于ZIP包方式,MSI方式的差异点我会在章节里顺带标注。
2.3 版本号怎么看,别下错了
下载页面会列出多个版本,比如9.0.1、8.4.3、8.0.40等。选择9.0.1(或者更新的9.1、9.2),注意Windows的选项是“Windows (x86, 64-bit), ZIP Archive”下载链接,旁边还有个“Windows (x86, 64-bit), ZIP Archive Debug Binaries”,那是调试符号包,编译跟踪用,一般不需要下载。如果页面默认推荐8.x,别慌,页面上方可以切换版本,或者直接看“Version”列选择9.0.1。另外看清楚是winx64,现在Windows基本是64位系统,装64位版不会有32位那种内存限制问题,9.0也没有单独的32位版本了。我见过有人下成Linux版然后在Windows上解压然后一脸懵的,这种情况纯属下载的时候没看文件后缀,ZIP包后缀带winx64就不会错。
3. 解压、目录规划与前序准备
3.1 解压到哪、目录长什么样
把ZIP包解压到目标盘,我这里用的路径是D:\mysql-9.0.1-winx64,具体盘符看你剩余空间。解压完看一眼目录结构,里面会有bin、data(可能没有,需要初始化后生成)、docs、include、lib、share等文件夹。D盘和C盘的区别在于:系统盘重装时数据库文件不会跟着被清掉,方便保留数据;但如果你C盘空间紧张,还是建议放D盘,毕竟InnoDB的ibdata1、binlog等文件挺占空间的。
这里有个解压工具上的提醒:别用老旧的WinRAR某版本或者Windows自带资源管理器长路径解压出问题,建议用7-Zip最新版或者Bandizip。MySQL的ZIP包内部有些路径已经比较深,在某些压缩工具下会出现“文件名过长”的报错,或者解压出来一部分文件损坏。Windows自带的“全部解压缩”对ZIP的处理还好,但遇到超大文件偶尔也会卡顿。我用7-Zip解压基本没出过事。
解压完成后建议顺手把文件夹重命名得简单一点,比如D:\mysql9,这样你在命令行操作时路径短,不容易打错。有些人安装软件从不改默认目录,结果后面一连串路径拼接出问题,比如my.ini里路径写错了,服务启动时报错,日志里看半天也发现不了是路径末尾多了个空格。
3.2 环境变量与基础依赖检查
解压完之后,如果不想每次都在命令行输全路径,可以配置环境变量。右键此电脑-属性-高级系统设置-环境变量,在系统变量的Path中新增一项,指向bin目录,比如D:\mysql9\bin。配置环境变量的价值在于:之后你在任何目录下敲mysql命令都能直接识别到,不会提示“mysql不是内部或外部命令”。这个报错几乎是新手第一道坎,看到它先别慌,八成就是环境变量没配。
配好环境变量之后,打开PowerShell或者CMD,先确认一下Visual C++运行库是不是就绪。最简单的验证方法其实不用单独运行库检测工具,直接跳转到下一步执行初始化命令,如果缺库会在初始化阶段冒出来0xc000007b或者DLL缺失提示。不过稳妥起见,我建议你提前检查一下:在“设置-应用-可选功能”里搜不到运行库,就去微软官网下载Visual C++ Redistributable 2015-2022 x64版本,安装完重启一次再继续。这个步骤省不省直接影响成败,尤其是一些精简版系统,连运行库都没带全,装MySQL必挂。
3.3 端口占用快速体检
MySQL默认跑在3306端口,如果你机器上之前装过其他MySQL实例、装了MariaDB,或者有奇奇怪怪的软件占用3306,后面初始化或者连接时就会冲突。检查端口的办法很简单,CMD里执行:
netstat -ano | findstr :3306如果什么都没有输出,恭喜,端口是干净的。如果输出了一行记录,后面带个PID,那就看看那个PID是什么进程。怎么找进程?打开任务管理器-详细信息,找对应的PID;或者PowerShell里执行:
Get-Process -Id PID如果是自己之前装的另一个MySQL,你需要决定到底是卸掉旧的还是让9.0换端口。我这次选择的方案是一切顺手,旧的测试库直接停掉,9.0占用3306。如果你不想动旧的,后面配置my.ini的时候把port改为3307、3308都可以,但注意后续连接工具填端口别填错。
这个“Windows关闭端口号”的操作本身不复杂,复杂的是判断哪个进程可以杀。系统关键进程占3306的情况真的遇到过,有些远程管理软件也会监听3306做内部通信,所以杀之前一定确认清楚。
4. 初始化配置与核心实操环节
4.1 写一份你真正读得懂的my.ini
ZIP包解压后默认是没有my.ini的,这跟MSI版差别很大。你需要手动创建一个配置文件,MySQL在Windows下启动时会按顺序查找几个路径下的ini文件,其中当前工作目录、安装目录下的my.ini都能被读到。我习惯直接放在安装目录根下,也就是D:\mysql9\my.ini,和bin目录平级,简单明了。
我这份my.ini比较精简,适合单机学习型使用:
[mysqld] # 安装目录 basedir=D:/mysql9 # 数据目录 datadir=D:/mysql9/data # 端口 port=3306 # 服务默认字符集 character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci # 默认存储引擎 default-storage-engine=InnoDB # 连接数上限 max_connections=200 # 兼容旧版本的认证方式,如果老客户端连不上,就开这个 # default_authentication_plugin=mysql_native_password # 错误日志 log-error=D:/mysql9/data/error.log # 运行日志 general_log=0 general_log_file=D:/mysql9/data/general.log # 慢查询日志 slow_query_log=1 slow_query_log_file=D:/mysql9/data/slow.log long_query_time=2关键点逐个说。
basedir和datadir这两个路径是重中之重,路径分隔符建议用正斜杠/,反斜杠在ini文件里可能被当转义字符处理,很多人在这里翻车。datadir指向的data目录现在可能还不存在,没关系,初始化时会自动创建。
character-set-server=utf8mb4配合collation-server=utf8mb4_0900_ai_ci是MySQL 9.0的默认组合,它支持完整的Unicode字符,emoji也能存。以前老教程教你用utf8,实际上MySQL的utf8不是真正的四字节UTF-8,存emoji会报错,现在8.0和9.0默认就是utf8mb4,我们显式配置主要是为了保险。
max_connections=200对学习开发完全够,如果跑生产你可能需要调更高,但每个连接都有内存开销,设太高又用不满反而是浪费。
default_authentication_plugin这一行我先注释掉了。MySQL 9.0默认用caching_sha2_password,这个认证插件安全级别高,但Navicat老版本、Java老驱动、Python老库可能不支持,如果你连接工具报“Authentication plugin 'caching_sha2_password' cannot be loaded”之类的问题,再放开这行注释,重启服务切换到mysql_native_password。注意9.0里mysql_native_password已经被标记为废弃,仅供兼容使用,生产环境不太建议。
4.2 以管理员身份初始化数据目录
配置写好了,下一步就是初始化。这一步必须在管理员权限的CMD或PowerShell里运行,普通用户窗口经常会因为权限不够导致初始化失败或者后续服务无法安装。怎么开管理员窗口?开始菜单直接搜“cmd”,右键选择“以管理员身份运行”即可。
进入安装目录,执行:
cd /d D:\mysql9 mysqld --initialize-insecure这里我用的是--initialize-insecure,含义是初始化数据目录并且root账号初始密码为空。另外一个选择是mysqld --initialize,它会随机生成一个临时root密码,输出在error.log里。我推荐--initialize-insecure的核心理由是:省去你从日志里翻密码的过程,初始化完直接空密码登录,然后再手动设密码。风险点是——如果你的机器一会儿没设密码就暴露在网络上了,那肯定不行;但在本地开发环境下,这个操作没问题,且设置密码的主动权在自己手里。
初始化过程通常十几秒到几分钟不等,关键看磁盘速度。期间终端看起来像卡住了,其实它正在生成ibdata1、undo log、系统表空间等文件。等光标回来后,你进data目录看一眼,会看到一堆文件和文件夹,最重要的是error.log那个文件(因为mysqld --initialize的时候会记录初始化日志),后面排查问题的第一现场就是它。
如果初始化过程中不是正常返回,而是报错退出,先去看打印的提示。最常见的两种情况:一是目录权限问题,datadir指向的路径父目录没有写权限;二是找不到配置文件,提示“Can't find messagefile”或“unknown variable”,通常是my.ini写错项了。逐个检查一下就明白,别急着删了再来。
4.3 注册Windows服务:让MySQL开机能自启
数据目录初始化之后不代表MySQL就能直接用了,因为现在它只是个独立进程,Windows重启后不会自动跑起来。要让它像正规软件一样随系统启动,需要把它注册成Windows服务。
仍然在管理员命令行里执行:
mysqld --install MySQL90这里MySQL90是服务名称,你可以随便取,比如MySQL,或者MySQL9。注意别漏了mysqld这个命令,我见过不少人敲成mysql --install,结果报错“mysql: unknown option '--install'”。mysql客户端和mysqld服务端是不同程序,服务注册必须用mysqld。
执行完成后提示“Service successfully installed.”,就算是成了。打开Windows服务管理器(Win+R输入services.msc),往下翻能找到MySQL90这一项。此时服务状态还是“停止”,需要手动启动。
启动命令:
net start MySQL90或者你也可以在服务管理器里右键启动,效果一样。启动如果提示“服务正在启动...服务已经启动成功”,那基本就大局已定。如果提示“MySQL90 服务无法启动”或者“服务没有返回错误,但这可能是 Windows 错误”,那就得去查日志了。这一步fail可以说是在Windows上装MySQL翻车率最高的环节,后文第五部分我会把排查思路完整展开。
启动成功之后,MySQL默认监听3306端口,Linux和Windows都一样。再验证一次端口:
netstat -ano | findstr :3306能看到LISTENING状态的记录就说明服务真的跑起来了。
4.4 登录数据库并设置root密码
服务正常启动后,接下来就是登录会话。当前root密码还是空的,所以直接用:
mysql -u root不需要-p参数直接回车,就能进到MySQL的命令行。看到mysql>提示符就说明连上了。这时候第一件事就是给root设个密码,这里我是这样做的:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;密码建议至少8位,包含字母、数字、特殊字符,别用123456这种。设完之后,以后登录就要:
mysql -u root -p回车后输入密码,不会再让你直接裸登录了。这里顺便提一下,MySQL 9.0默认创建了root@localhost账号,只允许本机连接。如果你有从远程连接这台数据库的需求,那还得再创建授权用户,见后面5.4节。
4.5 放行防火墙端口与远程访问配置
如果你的MySQL只给本机程序用,防火墙不用管;但如果是个人开发机上跑完让另一个人电脑上的Navicat连过来,Windows防火墙就会拦一把。以管理员PowerShell执行:
New-NetFirewallRule -DisplayName "MySQL 3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow或者走可视化界面:控制面板-Windows Defender防火墙-高级设置-入站规则-新建规则,选端口,填3306,允许连接即可。
远程访问还得在MySQL里做一步:创建一个允许任意主机连接的账号。示例:
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;这里说明下,root@%和root@localhost是两个独立账号,mutually不会覆盖。你改root@localhost密码,root@%的密码不变。所以远程连接时用root@%的密码。很多人在这一步犯迷糊:明明改了密码,远程还是连不上,其实是因为Navicat用的账号根本不是root@localhost。
5. 连接验证、常见问题与排障实录
5.1 Navicat、命令行、JDBC三种方式连接
数据库装好、服务跑起来,下一步自然是验证各种客户端能不能连上。命令行方式最简单,前面已经演示过。Navicat的话,新建连接,主机填127.0.0.1或localhost,端口3306,用户名root,密码填你设置的密码,点击连接测试。我第一次用Navicat 17连接9.0时遇到的是报错“SSL connection error: SSL is required but the server doesn't support it”,当时我愣了十几秒。
排查思路是这样的:Navicat新版本默认开启SSL选项,但MySQL 9.0的ZIP包初始化时SSL默认未必启用完整证书链,尤其是你手动指定了ini没有配置ssl相关参数时。最简单的解决方式是在Navicat连接的高级选项里,把“使用SSL”关掉,如果是Navicat较新版本,位置在“连接属性-SSL”标签页,把“使用SSL协议”勾选去掉,重新测试连接就能通过。如果你坚持要用SSL加密连接,那需要在my.ini里配置ssl-ca、ssl-cert、ssl-key参数,并生成自签名证书,操作起来略繁琐,单机学习场景就没有必要了。
Java项目(JDBC)连接时也同样会遇到SSL问题,常见报错是“javax.net.ssl.SSLHandshakeException”,解决思路一般是在JDBC URL后追加useSSL=false&allowPublicKeyRetrieval=true,例如:
jdbc:mysql://127.0.0.1:3306/你的库?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai那两条参数分别表示停用SSL、允许客户端从服务器请求RSA公钥用于密码传输。如果不加allowPublicKeyRetrieval,用caching_sha2_password认证插件时大概率连不上,报错Public Key Retrieval is not allowed。这两个参数是JavaWeb项目的标配参数,建议直接记住。
5.2 “MySQL90 服务无法启动”完整排查流程
这个报错我在实战中见到过太多次了,每次在群里回答这个问题,第一句话都是:先看错误日志,别瞎猜。找到data目录下的error.log,MySQL只会忠实地把原因写在这里。典型几种原因逐个说:
第一种,datadir路径不存在或者没有写权限。检查my.ini里datadir路径写对没有,并且data目录是否真正存在。如果你把basedir、datadir路径末尾多打了一个空格,Windows可能还认,MySQL去读目录时直接就空指针。这种问题非常隐蔽,肉眼看不出来,要用编辑器打开文件并在状态栏看行末是否有空格。
第二种,端口被占用。服务启动时尝试绑定3306,结果已经被其他进程占了,报错信息里会有“Bind on TCP/IP port: Address already in use”字样。解决方式是换端口,或者杀掉占用进程。我建议这时候先执行netstat -ano | findstr :3306看一下PID,如果是旧MySQL实例,就停旧服务;如果是无关软件,就改my.ini里port为3307,同时服务启动后连接工具也用3307。
第三种,配置文件里写入了不支持的参数。比如你抄了网上一份包含innodb_file_per_table、skip-grant-tables等老参数的老教程,MySQL 9.0可能已经移除了某项,会在日志里报“Unknown storage engine”或者“unknown variable”。解决方式是把这项参数删掉,别硬留。
第四种,data目录初始化不完整。比如你中途把data目录删了、或者初始化失败过又强行启动。此时data目录里没有mysql系统库,服务自然起不来。干脆的做法是把data目录整个改名备份,然后重新mysqld --initialize-insecure,再启动一次。
排障优先级我按自己的习惯排序:日志-端口-权限-参数。顺序执行下来80%的问题都解决了。不要一上来就卸载重装,那是最耗时且未必解决问题的办法。
5.3 “net start MySQL90”提示服务名无效怎么办
这里是个一字之差的大坑。安装MySQL 8.0/9.0的MSI版时,服务名可能是MySQL90或者MySQL,但ZIP版如果你按我的参考命令就是MySQL90第一优先级。如果敲net start mysql提示“服务名无效”,就说明当前系统里没有叫mysql的服务。执行:
sc query | findstr /i mysql或者直接:
sc query mysql看看返回什么。如果确认服务没注册,就先用mysqld --install MySQL90注册,再启动。还有一种情况是注册时用了管理员权限,启动时用普通权限窗口,服务不存在其实只是表面原因,本质是权限不同导致服务列表可见性差异,实际还是没注册上。
如果你安装过多个MySQL测试实例,服务列表里可能有一堆类似MySQL80、MySQL84、MySQL90的名称,启动时务必看清名字,别把MySQL90启动成MySQL80了。
5.4 忘记root密码与跳过授权表恢复法
开发机上数据库忘了root密码,这事谁都会遇到。Linux上先停服务再修改,Windows上也是类似的流程,不过有几个细节容易错。第一步,停掉MySQL服务:
net stop MySQL90第二步,在my.ini的[mysqld]末尾加一行:
skip-grant-tables第三步,重新启动服务,这时候MySQL不会加载授权表,你用任意密码或者直接命令就能进入:
mysql -u root第四步,重置密码。注意,MySQL 9.0的user表结构变了,但update mysql.user还是可以用的:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES;如果遇到“Table 'mysql.user' doesn't exist”,说明data目录初始化有问题,这属于另一种故障。第五步,删掉my.ini里skip-grant-tables那行,重启服务,密码就生效了。
我真心建议:这种方式只用于急救,用完立刻关掉skip-grant-tables并重启,否则等于把数据库裸奔在网络里,任何人不需要密码就能进。
5.5 中文乱码、编码与字符集问题
Windows控制台默认的代码页是GBK,MySQL客户端默认输出是utf8mb4,二者一碰撞,查询结果里的中文就是一堆乱码。常见现象:你在命令行里插入了中文,查出来却是一串????。解决办法:登录后执行:
SET NAMES utf8mb4;或者设置全局变量:
SET global character_set_server = utf8mb4;不过更根本的解决方式是在my.ini里加一件:
[client] default-character-set=utf8mb4然后重启服务。上面那个解决方法只作用于现有会话,数据库表的字段字符集也得配套,建表时可以显式指定:
CREATE TABLE t1 (name VARCHAR(50)) DEFAULT CHARSET=utf8mb4;坦白讲,MySQL 9.0在Windows下的中文问题比以前少多了,但navicat里看中文没问题、命令行里又乱码这种现象,大概率还是客户端和控制台的事,跟服务器没什么关系。遇到先别怀疑数据存坏了,多试试连接工具的字符集选项。
5.6 告别重复初始化:备份你的data目录
最后一个想说的是备份意识。Windows上MySQL最脆弱的就是data目录,一旦系统崩溃或者误删,数据就全没了。最简单的备份方案是热备份(mysqldump):
mysqldump -u root -p --all-databases > D:\backup.sql恢复时:
mysql -u root -p < D:\backup.sql也可以直接冷备份,就是先net stop MySQL90,然后把整个data目录拷到安全的地方,恢复时再把目录复制回去。冷备份期间服务是停掉的,适用停机维护场景;热备份不影响在线服务,但恢复的时候要注意binlog一致性,还是比较适合日常定期跑的。
我自己在Windows开发机上装9.0,因为只是测试环境,data目录丢了也不心疼,所以没做太复杂的备份。但如果你拿它保存一些重要的个人数据,建议起码每周跑一次mysqldump,再同步到网盘或另一块硬盘。别等真出事再后悔,数据库这行“数据无价”四个字我是有切身体会的。
6. 我踩过的几个坑和最终配置参考
聊到这儿,安装的完整链路基本梳理完毕,最后我把个人实战中最容易踩的坑集中总结一下,再给出一份可以直接照抄的参考配置。
第一个坑就是防火墙。很多人数据库本身装得好好的,Navicat在本地能连,另一台电脑上的同事就是连不上。这时候先别怀疑MySQL配置,检查Windows防火墙。默认情况下Windows防火墙对入站连接是拦截MySQL端口的,不额外加规则的话远程连接铁定失败。我在5.4节给了PowerShell添加防火墙规则的命令,再贴一次:
New-NetFirewallRule -DisplayName "MySQL 3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow第二个坑是服务启动成功但一会儿就自动停了。这种“假启动”多半是my.ini里写入了一个过时参数,MySQL 9.0启动时遇到了未知配置项,进程自动退出。我踩过的就是抄了老教程里的innodb_buffer_pool_size=128M用了KB单位写法,导致解析异常,服务反复崩溃。查日志是关键:error.log里会写明确原因,比如“Unknown system variable 'xxx'”,看到什么不认识就去掉什么。
第三个坑是笔记本休眠后MySQL连接突然断了。Windows电源管理把硬盘休眠,MySQL连同数据文件一起被冻结,唤醒后连接池里的连接变成死链接,应用层报一堆错。虽然跟安装本身无关,但开发机上跑MySQL常碰到,建议在电源选项里把休眠时间改为从不,或者至少给MySQL加一个心跳保活机制。
第四个小技巧是临时停止和启动服务。服务管理器的图形界面有时反应慢,命令行最顺手:
net stop MySQL90 net start MySQL90还有重启服务的快捷方式:
net stop MySQL90 && net start MySQL90这两个命令中间用的是&&,意思是前一个成功才执行后一个,省得你盯着指令。
最后给一份我在Windows 11上验证过、用来跑MySQL 9.0.1的完整my.ini,大家可以直接参考,按需删减:
[mysqld] basedir=D:/mysql9 datadir=D:/mysql9/data port=3306 character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci default-storage-engine=InnoDB max_connections=200 log-error=D:/mysql9/data/error.log slow_query_log=1 slow_query_log_file=D:/mysql9/data/slow.log long_query_time=2 skip-name-resolve [client] default-character-set=utf8mb4其中skip-name-resolve的意思是让MySQL不通过DNS反向解析客户端主机名,只查IP,这会加快远程连接速度,代价是grant授权时只能用IP不能用主机名。单机开发场景建议开,生产环境看情况,如果有基于主机名的授权需求就要去掉。
MySQL 9.0在Windows上的安装并没有想象中那么恐怖,下载、写ini、初始化、注册服务、设密码、连客户端,六步走完就齐活。万一哪一步卡了,记住先看error.log,不要瞎猜。这篇就是我从零开始装完整个过程中记录下来的操作和经验,把能提前避开的坑都帮你标注出来了。如果你在自己机器上装的过程碰到本文没覆盖到的报错,照着“看日志-查端口-查权限-查参数”这个顺序捋一遍,大概率是能解决的。装好之后,接下来就能愉快地建库、建表、跑查询了。