1. 为什么我坚持用ZIP包而不是安装版来装MySQL
如果你在搜索引擎里敲下"mysql zip 安装教程"这组关键词,大概率是已经受够了MySQL Installer那套图形界面安装流程。我最初也是从安装版入门的,但在帮几台服务器和同事电脑装过十几次MySQL之后,果断转向了ZIP解压版。原因不复杂,就三条。
第一,安装版会在系统里塞进一堆你不一定需要的组件。MySQL Installer默认带MySQL Workbench、MySQL Shell、Visual Studio插件、ODBC驱动等,这些对纯开发环境来说多数时候用不上,还拖慢安装速度。而ZIP包就是一个纯粹的MySQL服务端,解压即所得,目录清爽,想删就删。
第二,安装版在Windows服务注册和配置上做了太多"自动化",反而让排错变得困难。比如安装版默认把数据目录放在C:\ProgramData\MySQL\MySQL Server 8.0\Data,datadir和basedir被拆到两个不同的地方,一旦服务起不来,日志路径、配置路径都要花时间去找。ZIP版则可以把所有东西集中在一个文件夹里,配置全在一份my.ini里,所见即所得。
第三,多版本共存时ZIP包优势碾压安装版。我在一台机器上同时跑过MySQL 5.7和8.0做版本兼容性测试,安装版根本没法共存(第二次安装会把第一次的服务搞乱),而ZIP版只需要两个不同目录、两份不同my.ini、两个不同端口号就行,互不干扰。
当然也得承认,ZIP版的短板是首次配置需要手动处理更多细节,服务注册、环境变量、初始化参数都得自己来。但这恰恰是理解MySQL运行原理的最佳途径——把这个流程走一遍,你对MySQL的配置文件、初始化逻辑、权限表的认识会上一个台阶。
这篇文章从头到尾记录的是我在Windows 10/11上用ZIP包完整安装MySQL 8.0的实操流程,每一步都标注了当时为什么这么做、踩过哪些坑。文章里最大的篇幅花在几个高发问题上:配置文件导致服务无法启动、初始化后无密码却登录不上、Navicat连接报错等。如果你正准备装MySQL,照着一步步走基本能一遍过。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 下载版本怎么选、目录怎么放,这两个细节决定后面省不省事
2.1 官网下载的正确姿势:别被"Windows (x86, 32-bit)"这几个字误导
MySQL下载页的地址是https://dev.mysql.com/downloads/mysql/,进入后默认展示的是最新GA版本,写这篇文章时最新稳定版是8.0.x系列(如8.0.40)。页面上有几个下载选项,这里必须提醒一下,很多人第一次来确实会被Windows平台的多个选项搞晕:
| 文件 | 适用场景 | 我的建议 |
|---|---|---|
mysql-8.0.x-winx64.zip |
64位Windows系统,ZIP解压版 | 选这个 |
mysql-8.0.x-win32.zip |
32位Windows系统,或老项目的兼容需求 | 除非系统是32位,否则不选 |
mysql-installer-community-8.0.x.msi |
图形安装向导 | 本教程不需要 |
mysql-8.0.x-winx64-debug-test.zip |
包含调试版和测试组件 | 不选,体积大且用不上 |
下载时需要登录Oracle账号,这里我一般直接点"No thanks, just start my download"。有些读者反馈下载速度很慢,可以先试默认的CDN节点,一般国内直连也能接受,实在不行才考虑镜像站。
还有一个需要警惕的点:历史版本下拉框里有Windows (x86, 32-bit), ZIP Archive和Windows (x86, 64-bit), ZIP Archive两种ZIP包。如果你的Windows系统是64位(现在基本没有32位了),一定选64-bit。之前有位同事拿32位包在64位系统上跑,初始化失败了两次才反应过来是版本不匹配。
2.2 解压路径里绝对不能出现中文和空格
下载完成后是一个约200MB的压缩包,我习惯先放到D:\soft\之类的临时目录,然后右键解压到最终安装位置。
最终安装目录我的建议有这么几条:
- 不要解压到
C:\Program Files\这种带空格的路径。虽然ZIP版对路径空格的处理比安装版宽容一些,但后续某些配置文件、命令行操作、第三方工具连接时,一旦路径带空格就可能出现诡异的"找不到文件"或"路径无效"问题。这个坑在我早期用5.7版时踩过一次,从此再没把数据库放到带空格的路径下。 - 不要直接解压到C盘系统盘,更建议放到
D:\mysql\这类独立数据盘或工作盘,方便统一管理和备份。 - 解压后的目录名我一般会改成带版本号,比如
mysql-8.0.40-winx64,因为保留版本号在未来多版本切换时会非常有用。如果直接解压,目录会默认带版本号,这样其实就很好,不需要改。
解压后的目录结构大概是这样的:
code复制D:\mysql-8.0.40-winx64\
├── bin\ # 所有可执行文件(mysqld、mysql、mysqldump等)
├── docs\ # 文档
├── include\ # 头文件(开发者用)
├── lib\ # 库文件
├── share\ # 错误信息和字符集等资源
├── LICENSE
└── README
ZIP包默认没有data目录,也没有my.ini文件,这两个都需要自己创建。接下来就走进本文最容易出错的部分——配置文件。
3. my.ini配置:服务起不来,九成问题出在这个文件上
3.1 my.ini的三个基础配置段,逐行解释每个参数
很多初次接触ZIP版的人会困惑:安装版会自动生成配置,但ZIP版解压后什么都没有,MySQL怎么知道数据放哪里、端口号多少?这个时候my.ini就是MySQL服务的"启明星"。mysqld在启动时会按固定顺序查找配置文件:C:\Windows\my.ini、C:\my.ini、系统安装目录下的my.ini等。为了确保用的是我们自己的配置文件,启动命令里必须显式指定路径。
我在自己目录下新建的my.ini文件内容如下,这是经过多年实践后沉淀出的一个最精简且稳定的版本:
ini复制[mysqld]
# 端口号,默认是3306,如果被占用可以改3307等
port=3306
# MySQL安装根目录,也就是你解压后的路径
basedir=D:/mysql-8.0.40-winx64
# 数据文件存放目录
datadir=D:/mysql-8.0.40-winx64/data
# 允许的最大连接数
max_connections=200
# 数据库字符集
character-set-server=utf8mb4
# 数据库排序规则
collation-server=utf8mb4_unicode_ci
# 默认存储引擎
default-storage-engine=INNODB
# 8.0版本下建议使用caching_sha2_password,但navicat等老客户端不支持
# 为了兼容性,我一般改成mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# mysql命令行客户端的默认字符集
default-character-set=utf8mb4
[client]
# 客户端默认端口
port=3306
default-character-set=utf8mb4
这里面有几个容易写错、也是网上大量教程里最容易误导人的地方。
basedir和datadir的路径分隔符,Windows环境下用正斜杠/或者双反斜杠\\都可以,但千万别用单个反斜杠。比如D:\mysql-8.0.40-winx64中的\m会被解析成转义字符的一部分,导致路径解析错误。我亲眼见过有人在这上面反复折腾了一个多小时,最后只是把单反斜杠改成双反斜杠就解决了。
datadir指向的路径是初始化时自动创建的data目录,不是你自己手动建一个空文件夹就行。这一点后面专门讲,先按下不表。
default_authentication_plugin=mysql_native_password这个参数是MySQL 8.0的特殊点。8.0默认的认证插件是caching_sha2_password,安全性更高,但很多老版本客户端(尤其是Navicat 15之前的版本)不支持这个协议,连接时会报Authentication plugin 'caching_sha2_password' cannot be loaded。如果你的客户端都是新的,可以不加这个参数,保留默认认证插件;如果有老客户端,最好提前在my.ini里指定为mysql_native_password,省得装完连不上再回头改。
3.2 一个隐藏坑:my.ini的保存编码与BOM头
这个坑比较隐蔽,是我要专门拎出来说的。my.ini文件保存时,Windows记事本默认会用带BOM的UTF-8编码或ANSI编码。但MySQL解析配置文件时,如果遇到UTF-8 BOM头(就是文件最前面的EF BB BF三个字节),会导致首个参数解析异常,服务启动时报错或者忽略掉第一行内容。
我的习惯是用Notepad++或Visual Studio Code编辑my.ini,保存时选择UTF-8无BOM格式。如果你手头只有记事本,也有一个省事的办法:先把内容写到别处,再通过命令行echo追加(以下为PowerShell写法示例),避免记事本直接保存产生BOM:
powershell复制[System.IO.File]::WriteAllLines("D:\mysql-8.0.40-winx64\my.ini", @"
[mysqld]
port=3306
basedir=D:/mysql-8.0.40-winx64
datadir=D:/mysql-8.0.40-winx64/data
max_connections=200
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
[mysql]
default-character-set=utf8mb4
[client]
port=3306
default-character-set=utf8mb4
"@, [System.Text.UTF8Encoding]::new($false))
另外,my.ini里不要出现中文注释。虽然高版本MySQL对UTF-8配置文件的兼容性好了很多,但为了避免不必要的编码问题,我始终不在配置文件里写中文,只用英文和数字。
4. 初始化、启动、注册服务,这条命令链路走通就成功了一半
4.1 为什么必须先执行mysqld --initialize
配置文件写好后,下一步就是初始化数据目录。这一步的作用是生成MySQL系统数据库(mysql、information_schema、performance_schema、sys),创建root账号和权限表,以及生成初始的root密码。
在没有初始化的情况下直接启动mysqld,你会看到类似[ERROR] --initialize specified but the data directory has existing files或者干脆找不到数据目录的错误。这是因为MySQL在启动时发现datadir下没有mysql这个系统库,无法完成后续操作。
在bin目录下打开命令提示符(记得以管理员身份运行),执行:
bash复制mysqld --defaults-file=D:/mysql-8.0.40-winx64/my.ini --initialize --console
这里有几种命令变体的区别,要区分清楚:
| 命令 | 行为 | 使用场景 |
|---|---|---|
mysqld --initialize |
生成一个随机root密码,日志写到data目录的错误日志文件 | 安全要求高,不想用默认密码 |
mysqld --initialize-insecure |
生成root空密码 | 本地开发环境,图省事;后续自己改密码 |
mysqld --initialize --console |
随机密码直接打印到控制台 | 方便查找初始密码,推荐 |
我推荐用--initialize --console组合。它会生成一个临时随机密码并打印在控制台,这样既能保证初始密码不是空的,又不用去data目录下翻.err日志文件。控制台输出末尾类似这样:
code复制[Note] A temporary password is generated for root@localhost: xxxxxxxx
把xxxxxxxx记下来,后面第一次登录时需要用到。
如果你执行后没有看到输出而且卡住了,多半是前面的my.ini配置有问题,比如datadir路径不存在或无法写入。注意,data目录会由初始化过程自动创建,不要提前手动建data目录。我见过一个案例是用户手动创建了空data目录后再执行初始化,结果因为目录不为空(里面有desktop.ini之类系统文件)而报错,把data目录清空后重新初始化就正常了。另外,初始化命令必须在bin目录下执行,或者把bin目录加到环境变量的PATH里,否则系统会提示不是内部或外部命令。
4.2 启动服务:前台调试模式与后台服务模式的区别
初始化成功后,先别急着注册成Windows服务。我第一次装的时候,直接执行mysqld --install就注册服务去了,服务起不来时在Windows事件管理器里翻日志翻得很痛苦。后来养成了一个好习惯——先用前台模式启动一次,确认没有报错再注册服务。
前台模式启动命令:
bash复制mysqld --defaults-file=D:/mysql-8.0.40-winx64/my.ini --console
这次启动如果一切正常,控制台会打印类似ready for connections的日志,版本号、端口号、socket路径都会显示出来。保持这个窗口开着,新开另一个命令行窗口测试连接:
bash复制mysql -uroot -p
此时会让你输密码,填刚才初始化时记录的临时密码。登录成功后,你会看到mysql>命令提示符,说明服务运行正常。
测试完成后,在原来的前台窗口按Ctrl+C停掉服务,然后注册为Windows服务:
bash复制mysqld --install MySQL8
这里的MySQL8是给这个服务起的名字。如果你的机器上以后要跑多个MySQL实例,可以分别叫MySQL8、MySQL57之类的。注册成功后系统会提示Service successfully installed。
然后用net start命令启动服务:
bash复制net start MySQL8
以后重启电脑,这个服务也会自动启动。如果不想开机自启,可以运行services.msc,找到MySQL8服务,右键把"启动类型"改为"手动"。
这里有个容易忽略的点:注册服务前面那步前台模式启动绝对不是多此一举。如果my.ini里有任何参数错误、端口被占用或datadir路径问题,前台模式都能立刻在控制台里显示完整错误信息。而注册成服务后,错误信息会写进Windows事件日志和data目录下的.err文件里,定位起来会多绕几步。
4.3 注册服务时报"Install/Remove of the Service Denied"怎么办
注册服务时,命令提示符必须是以管理员身份运行的。如果没以管理员身份打开,会出现Install/Remove of the Service Denied(拒绝安装/删除服务)的报错。解决办法是关闭当前命令行窗口,找到cmd或Windows Terminal,右键"以管理员身份运行",再重新执行mysqld --install MySQL8。
还有一个不常见但确实发生过的坑:以前用安装版装过MySQL没卸干净,旧服务还占着相同的名字或端口。你可以先执行mysqld --remove MySQL8把服务删掉,再重新安装,或者干脆换一个服务名(比如MySQL8_2),绕开旧服务的残留。
5. 环境变量配置和root密码重置:装完离能用还差这两步
5.1 配置环境变量,让mysql命令随处可用
初始化、启动都成功后,如果不配置环境变量,之后每次执行mysql、mysqldump等命令都得先cd到D:\mysql-8.0.40-winx64\bin\目录,非常累赘。配置也很简单:
- 右键"此电脑" -> "属性" -> "高级系统设置" -> "环境变量"。
- 在"系统变量"中找到
Path,双击。 - 点击"新建",填入
D:\mysql-8.0.40-winx64\bin。 - 确定保存后,新开一个命令行窗口,输入
mysql --version验证。
注意:环境变量修改后,已经打开的命令行窗口不会自动生效,必须新开窗口。
另外,如果系统里同时装了多个MySQL版本,Path中靠前的bin目录会先被命中。想用哪个版本,就把哪个bin目录排在前面,或者干脆不配Path,进入对应目录手动执行。
5.2 用临时密码登录后,立刻修改root密码
前面初始化时生成的临时密码很复杂,类似j!x2Lk9&qRpv,不好记忆。登录后第一件事就是改成自己熟悉的强密码。
以临时密码登录:
bash复制mysql -uroot -p
在mysql>提示符下执行:
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
新密码建议至少8位,包含大小写字母、数字和特殊字符。MySQL 8.0默认开启密码强度校验插件,如果你设置的密码太简单,比如纯数字或弱口令,会收到类似ERROR 1819 (HY000): Your password does not satisfy the current policy requirements的报错。如果只是本地开发环境,不想被弱密码策略卡住,可以先这样临时把校验级别调低:
sql复制SET GLOBAL validate_password.policy = LOW;
然后改完密码后,再把策略调回默认的MEDIUM,或者重启服务恢复默认。注意这个参数在MySQL 8.0里是validate_password.policy,5.7里是validate_password_policy,不要混用。修改完以后用新密码重新连接一次,确认密码修改成功。
5.3 首次安装后的权限模型:为什么root只能本机登录
MySQL装好后,默认的root账号只在localhost上可用。如果你试图在另一台机器上用root连接这个数据库,会收到Access denied for user 'root'@'...'的错误。这是MySQL的安全默认行为,不是故障。
日常开发如果需要远程连接(比如用另一台电脑上的Navicat、或在应用服务器里连接),正确的做法是创建一个专用账号,而不是把root放开远程权限。比如创建一个负责远程连接的账号:
sql复制CREATE USER 'dev'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%';
FLUSH PRIVILEGES;
'%'表示允许从任意主机连接,实际环境里为了安全,更建议换成固定的IP,比如'dev'@'192.168.1.100'。同时还要检查my.ini里有没有设置bind-address参数;如果绑定了127.0.0.1,远程连接也会失败,需要注释掉或改成0.0.0.0,但改之前要确认你对防火墙风险有充分评估。
5.4 忘记密码时的重置思路
这个是整个流程里的高频问题,这里先把思路说明白。MySQL"忘记密码"时的重置核心是跳过权限表验证启动服务,然后用SQL直接改密码。
步骤大致如下(不同版本细节有差异,这是一套通用的流程):
- 停掉MySQL服务:
bash复制net stop MySQL8
- 以跳过授权表的方式前台启动:
bash复制mysqld --defaults-file=D:/mysql-8.0.40-winx64/my.ini --skip-grant-tables --console
- 新开窗口,无需密码直接进库:
bash复制mysql -uroot
- 切换到mysql库,刷新权限使授权表生效:
sql复制USE mysql;
FLUSH PRIVILEGES;
- 修改密码(8.0写法):
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
- 退出,停掉第2步的前台进程,再正常启动服务。
这里有一个非常关键的提醒:--skip-grant-tables模式下任何客户端都能无密码连接数据库,所以这个模式只应在本机紧急处理时使用,业务系统绝不能开着这个参数运行。改完密码后必须停掉服务并以正常模式重新启动。
6. 装完连不上?这个章节把最常见的四种报错一次说清
6.1 服务启动后马上停止 / 端口被占用
net start MySQL8执行后提示服务启动成功,但几秒后Windows提示"服务无法启动"或"服务已停止"。最常见的原因之一是3306端口被其他程序占用。尤其在Windows上,以前通过安装版装过MySQL并卸载不干净、或本机装了MariaDB、XAMPP等集成环境,都会抢占3306。
排查命令:
bash复制netstat -ano | findstr :3306
执行后如果能看到类似TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 12345这一行,说明端口被进程ID为12345的进程占用。再通过:
bash复制tasklist | findstr 12345
查看具体是哪个程序。如果是残留的mysqld,用taskkill /F /PID 12345结束它;如果是其他业务程序占用,那就修改my.ini里的port=3307等,再用新端口连接。
如果不是端口问题,服务启动失败后的详细原因都在data目录下*.err文件里。用文本编辑器打开这个文件,搜索[ERROR]关键字,通常能看到具体报错原因,比如配置路径错误、权限不足、某个参数值非法。养成看err日志的习惯能少走很多弯路。
6.2 登录报"Can't connect through socket"错误
Windows下用mysql -uroot -p连接时报:
code复制ERROR 2002 (HY000): Can't connect to local server through socket '/tmp/mysql.sock' (2)
这是MySQL客户端找不到socket文件导致的。这个报错在Windows上其实很误导人——Windows版MySQL默认走TCP连接而非Unix socket,报这个错通常意味着客户端没读到正确的my.ini配置,或者配置文件里[client]段缺失。
解决办法是显式指定连接参数:
bash复制mysql -uroot -p -h127.0.0.1 -P3306
如果这条能成功,说明服务本身正常,问题在客户端的默认配置。检查my.ini路径是否正确,如果my.ini不叫my.ini这个名字(比如叫my.cnf),或者没有放在mysqld启动时查找的默认位置,客户端就找不到 [client] 段的port配置。
6.3 ERROR 1045 (28000): Access denied
初始化后第一次登录时报这个错,基本就是密码输入错误。注意MySQL 8.0初始化时生成的临时密码只在控制台出现一次,如果当时没记录下来,唯一的补救路径是走5.4节的重置流程。如果你能在data目录的.err文件中找到初始化的临时密码,也可以在日志中翻一下。
另外,很多教程或经验分享里会写5.7版可以用空密码登录,但8.0的--initialize模式默认生成随机密码,根本不可能空密码登录。如果你想要空密码初始安装,得用--initialize-insecure来做。
6.4 老版本客户端报"Authentication plugin cannot be loaded"
错误信息类似:
code复制ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded
这个我在第3.1节已经埋过伏笔。MySQL 8.0把默认认证插件改成了caching_sha2_password,非常老的客户端(如某些旧版PHP的mysqli扩展、旧版Navicat)不认识这个插件,就会报错。
解决办法有两种。推荐的在my.ini中提前指定:
ini复制[mysqld]
default_authentication_plugin=mysql_native_password
修改后重启服务,再重建或修改用户密码使其使用新的认证插件:
sql复制ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
FLUSH PRIVILEGES;
不推荐的方法是把MySQL卸了重装低版本,这样做的代价太大,而且解决不了客户端以后升级的兼容问题。对开发环境来说,用mysql_native_password虽然安全性略逊于默认的caching_sha2_password,但在内网开发环境里可接受。生产环境建议用新版客户端并保持默认认证插件。
6.5 数据目录权限不足导致启动失败
还有一类鲜为人知的启动失败原因是data目录权限不足。如果你把MySQL解压到了C:\Program Files\这类受保护的系统目录,mysqld服务以Network Service或LocalSystem账户启动时可能没有对data目录的写权限,导致初始化或建表时报Permission denied。
排查方法:右键data目录 -> "属性" -> "安全",确认运行MySQL服务的Windows账户对该目录有完全控制权限。如果用的是默认的LocalSystem账户,一般还需要给Users或Everyone增加写权限。不过更省心的方法还是把整个MySQL安装目录放到D盘这类普通目录下,不要放进系统保护目录。
7. 为什么我推荐用mysqld而非mysqld.exe直接跑
在配置过程中,你可能会发现bin目录下同时有mysqld.exe和mysqld这两个可执行文件。在Windows命令行里,mysqld和mysqld.exe在多数情况下指向同一个程序;但有些教程会写出mysqld.exe --initialize,而有些只写mysqld --initialize,两者本质上没有区别。
不过这里有个差异我要多提醒一句:mysqld是一个服务程序,而mysql是客户端程序。很多人第一次接触时会把mysql这个客户端命令当成启动MySQL服务端的命令,执行mysql后进入mysql>提示符,误以为服务已经由这个命令启动了。实际上服务在后台由mysqld或Windows服务管理器维护着。搞清楚这两个命令的角色,整个安装流程就不容易乱了。
8. 几个真实场景下的调试案例:别人在这里卡的坑,你大概率也会遇到
8.1 案例一:my.ini编码导致参数解析失败
朋友在一台新电脑上按网上的教程装MySQL 8.0,初始化时报:
code复制[ERROR] [MY-010074] [Server] Failed to open log file ...: Invalid argument
折腾了很久,最后发现他用记事本把my.ini保存成了带BOM的UTF-8。去掉BOM后,所有问题瞬间消失。这类问题在中文版Windows上尤其容易遇到,因为记事本默认保存格式就是带BOM的UTF-8。从那时起,我在所有Windows技术文档里都强调"用VSCode或Notepad++编辑配置文件,编码选UTF-8无BOM"。
8.2 案例二:data目录残留半成品文件
另一个同事在初始化时报:
code复制[ERROR] [MY-010457] [Server] --initialize specified but the data directory has existing files (aborting)
原因是他之前初始化到一半失败,data目录留下了半成品文件,第二次初始化时MySQL会因为目录不是空的而拒绝执行。解决办法是清空data目录再重新初始化,或者干脆把data目录整个删除,让MySQL重新创建。
8.3 案例三:配置文件路径写错导致服务完全无视my.ini
有用户把my.ini放在C:\Users\Administrator\my.ini下,然后用mysqld --install注册服务。启动后修改port参数完全不生效,因为服务启动时根本找不到那份my.ini,于是使用了编译时的默认配置。这类问题我一直建议用前台模式启动加--defaults-file显式指定配置,就能第一时间发现问题。安装服务时也可以把defaults-file参数一起编码进服务,省得每次启动都要手动指定。
9. 从ZIP安装到项目落地:我踩过坑后整理的正确顺序清单
前面讲了大量排错案例,最后把正确的完整顺序串一遍。你照着这个清单执行,基本不会踩到前面那些坑。
- 从官网下载
mysql-8.0.x-winx64.zip(注意选64位版本)。 - 解压到不含中文和空格的路径,如
D:\mysql-8.0.40-winx64。 - 在解压目录下新建
my.ini,内容参考第3.1节,确认basedir和datadir路径写对、路径分隔符用/或\\。 - 以管理员身份打开命令行,cd到bin目录。
- 执行
mysqld --defaults-file=D:/mysql-8.0.40-winx64/my.ini --initialize --console,记录屏幕输出的临时root密码。 - 执行
mysqld --defaults-file=D:/mysql-8.0.40-winx64/my.ini --console前台启动,看到ready for connections后,另开窗口执行mysql -uroot -p测试。 - 测试完成后Ctrl+C停掉前台进程,执行
mysqld --install MySQL8注册服务。 - 执行
net start MySQL8启动服务。 - 配置系统环境变量Path,加入
D:\mysql-8.0.40-winx64\bin。 - 新开窗口,用临时密码登录,执行
ALTER USER修改密码。 - 需要远程连接的话,创建专用账号并授权,开放对应端口。
这套顺序是我在几台Windows开发机和测试服务器上反复实践过的,按这个走不会出大问题。如果中途卡住,回来对照第6章的报错汇排查原因。
我个人在实际操作中还有一个习惯:装完MySQL后,会顺手把my.ini和初始化命令记到一个备忘录里。因为下次给另一台电脑装的时候,很可能已经忘了上次用的是什么参数组合。用ZIP包方式装完一次、踩过一次坑之后,你会对MySQL的启动机制有比用安装版深得多的理解,这也是我一直推荐身边人尝试ZIP包安装的根本原因。
