推荐windows下直接使用mysql官方zip解压版而非msi安装版,因其可避免初始密码丢失、认证插件错配(如caching_sha2_password导致客户端连接失败)等问题;需手动配置my.ini(basedir、datadir、default_authentication_plugin等关键项),以管理员身份运行cmd执行mysqld --initialize生成临时密码并mysqld install注册服务,随后net start mysql启动,首次登录后立即用alter user切换为mysql_native_password插件并修改密码,确保本地及tcp连接(127.0.0.1)可用。

直接装解压版最省事,别碰安装版
Windows 上装 MySQL,推荐用官方提供的 ZIP 压缩包(即“解压版”),而不是 MSI 安装程序。原因很实际:mysqld --initialize 生成的初始密码、default_authentication_plugin=mysql_native_password 的强制设置、服务注册逻辑——这些在 MSI 安装器里常被隐藏或默认错配,尤其 MySQL 8.0+ 版本,极易导致 Navicat、DBeaver 或 Python 的 pymysql 连不上,报错 Authentication plugin 'caching_sha2_password' cannot be loaded。
实操建议:
- 去 https://www.php.cn/link/06d86297d6e28d4637d60c86c2a2f5b6,拉到页面底部选 Windows (x86, 64-bit), ZIP Archive(不是上面那个 2MB 的在线安装器)
- 下载后解压到不含中文、空格、特殊符号的路径,例如
C:mysql-8.0.33-winx64 - 跳过所有注册登录页,点左下角 No thanks, just start my download.
my.ini 配置必须手写,且三处路径不能错
解压后根目录下新建 my.ini,内容不是复制粘贴就完事——basedir、datadir、port 这三项一旦填错,后续所有命令都会失败,且错误提示极其模糊(比如 Can't start server: Bind on TCP/IP port 或直接静默退出)。
关键配置项说明与避坑点:
-
basedir:必须是 MySQL 解压后的**完整绝对路径**,反斜杠要双写,如basedir=C:\mysql-8.0.33-winx64 -
datadir:必须是**已存在且为空的文件夹**,不能和basedir同目录;建议单独建C:\mysql-data并提前创建好 -
default_authentication_plugin=mysql_native_password:MySQL 8.0 默认改用caching_sha2_password,但多数旧客户端不支持,这行不加,root 密码初始化成功也登不进去 -
character-set-server=utf8mb4:别写utf8(MySQL 里那是阉割版,不支持 emoji),应写utf8mb4;同时配套加collation-server=utf8mb4_0900_ai_ci
初始化和注册服务必须用管理员 CMD,顺序不能乱
以管理员身份运行 CMD,cd 进入 bin 目录后,两步缺一不可,且顺序固定:
- 先执行
mysqld --initialize --console:生成datadir下的数据文件,并在控制台末尾输出 root 临时密码(形如A temporary password is generated for root@localhost: iQs%7xKp9!Lm),务必复制保存——它只显示一次,关窗就丢 - 再执行
mysqld install:把 MySQL 注册为 Windows 服务(服务名默认为MySQL);如果报错Failed to install service,大概率是上一步没成功,或当前已有同名服务残留(可用sc query MySQL检查) - 启动服务:
net start mysql;若失败,用mysqld --console直接前台运行看报错细节,比查 Windows 事件日志快得多
首次登录后立刻改密并验证连接方式
用临时密码登录:mysql -u root -p,回车后粘贴密码。进库第一件事不是建表,而是立刻改密并确认认证插件:
- 执行
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!'; - 再执行
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';,确认plugin列值为mysql_native_password - 退出后,用新密码测试本地连接:
mysql -u root -p;再换非 localhost 方式测试(如mysql -h 127.0.0.1 -u root -p),因为localhost走 socket,127.0.0.1才走 TCP,这才是你以后写代码真正用的方式
最容易被忽略的是:Windows 下服务启动后,默认只监听 127.0.0.1,不监听 0.0.0.0;如需远程访问,必须在 my.ini 的 [mysqld] 段加 bind-address=0.0.0.0 并开放 Windows 防火墙端口——但这属于生产环境配置,新手本地开发千万别开。










